On Mon, 4 Jul 2016 09:14:43 +0200 Igor Mammedov <imamm...@redhat.com> wrote:
> On Sat, 02 Jul 2016 00:41:40 +0200 > Greg Kurz <gr...@kaod.org> wrote: > > > The machine code currently uses the same cpu_ppc_init() function to > > create cpus as the user mode. This function also triggers the cpu > > realization. > > > > It is okay for user mode but with system mode we may want to do other > > things between initialization and realization, like generating cpu > > ids for the DT for example. > > > > With this patch, each mode has its own creation helper: > > - ppc_cpu_init() is for system mode only > > - cpu_init() is for user mode only > > > > Suggested-by: Igor Mammedov <imamm...@redhat.com> > > Signed-off-by: Greg Kurz <gr...@kaod.org> > > --- > > hw/ppc/e500.c | 2 +- > > hw/ppc/mac_newworld.c | 2 +- > > hw/ppc/mac_oldworld.c | 2 +- > > hw/ppc/ppc.c | 5 +++++ > > hw/ppc/ppc440_bamboo.c | 2 +- > > hw/ppc/ppc4xx_devs.c | 2 +- > > hw/ppc/prep.c | 2 +- > > hw/ppc/spapr.c | 2 +- > > hw/ppc/virtex_ml507.c | 2 +- > > include/hw/ppc/ppc.h | 1 + > > target-ppc/cpu.h | 5 +++-- > > target-ppc/translate_init.c | 5 ----- > > 12 files changed, 17 insertions(+), 15 deletions(-) > > > > diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c > > index 0cd534df55f8..ff5d92e48dd9 100644 > > --- a/hw/ppc/e500.c > > +++ b/hw/ppc/e500.c > > @@ -821,7 +821,7 @@ void ppce500_init(MachineState *machine, > > PPCE500Params *params) CPUState *cs; > > qemu_irq *input; > > > > - cpu = cpu_ppc_init(machine->cpu_model); > > + cpu = ppc_cpu_init(machine->cpu_model); > > if (cpu == NULL) { > > fprintf(stderr, "Unable to initialize CPU!\n"); > > exit(1); > > diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c > > index 32e88b378687..6ab675c498d0 100644 > > --- a/hw/ppc/mac_newworld.c > > +++ b/hw/ppc/mac_newworld.c > > @@ -193,7 +193,7 @@ static void ppc_core99_init(MachineState *machine) > > #endif > > } > > for (i = 0; i < smp_cpus; i++) { > > - cpu = cpu_ppc_init(machine->cpu_model); > > + cpu = ppc_cpu_init(machine->cpu_model); > > if (cpu == NULL) { > > fprintf(stderr, "Unable to find PowerPC CPU > > definition\n"); exit(1); > > diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c > > index 447948746b1a..77fbdfffd4e2 100644 > > --- a/hw/ppc/mac_oldworld.c > > +++ b/hw/ppc/mac_oldworld.c > > @@ -113,7 +113,7 @@ static void ppc_heathrow_init(MachineState > > *machine) if (machine->cpu_model == NULL) > > machine->cpu_model = "G3"; > > for (i = 0; i < smp_cpus; i++) { > > - cpu = cpu_ppc_init(machine->cpu_model); > > + cpu = ppc_cpu_init(machine->cpu_model); > > if (cpu == NULL) { > > fprintf(stderr, "Unable to find PowerPC CPU > > definition\n"); exit(1); > > diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c > > index e4252528a69d..dc3d214009c5 100644 > > --- a/hw/ppc/ppc.c > > +++ b/hw/ppc/ppc.c > > @@ -1350,3 +1350,8 @@ PowerPCCPU *ppc_get_vcpu_by_dt_id(int cpu_dt_id) > > > > return NULL; > > } > > + > > +PowerPCCPU *ppc_cpu_init(const char *cpu_model) > > +{ > > + return POWERPC_CPU(cpu_generic_init(TYPE_POWERPC_CPU, > > cpu_model)); +} > > diff --git a/hw/ppc/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c > > index 5c535b18a20d..7f22433c8e91 100644 > > --- a/hw/ppc/ppc440_bamboo.c > > +++ b/hw/ppc/ppc440_bamboo.c > > @@ -186,7 +186,7 @@ static void bamboo_init(MachineState *machine) > > if (machine->cpu_model == NULL) { > > machine->cpu_model = "440EP"; > > } > > - cpu = cpu_ppc_init(machine->cpu_model); > > + cpu = ppc_cpu_init(machine->cpu_model); > > if (cpu == NULL) { > > fprintf(stderr, "Unable to initialize CPU!\n"); > > exit(1); > > diff --git a/hw/ppc/ppc4xx_devs.c b/hw/ppc/ppc4xx_devs.c > > index e7f413e49d08..94a24243af70 100644 > > --- a/hw/ppc/ppc4xx_devs.c > > +++ b/hw/ppc/ppc4xx_devs.c > > @@ -56,7 +56,7 @@ PowerPCCPU *ppc4xx_init(const char *cpu_model, > > CPUPPCState *env; > > > > /* init CPUs */ > > - cpu = cpu_ppc_init(cpu_model); > > + cpu = ppc_cpu_init(cpu_model, 0); > > if (cpu == NULL) { > > fprintf(stderr, "Unable to find PowerPC %s CPU definition\n", > > cpu_model); > > diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c > > index 054af1e8b481..e62fe643f492 100644 > > --- a/hw/ppc/prep.c > > +++ b/hw/ppc/prep.c > > @@ -509,7 +509,7 @@ static void ppc_prep_init(MachineState *machine) > > if (machine->cpu_model == NULL) > > machine->cpu_model = "602"; > > for (i = 0; i < smp_cpus; i++) { > > - cpu = cpu_ppc_init(machine->cpu_model); > > + cpu = ppc_cpu_init(machine->cpu_model); > > if (cpu == NULL) { > > fprintf(stderr, "Unable to find PowerPC CPU > > definition\n"); exit(1); > > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > > index 78ebd9ee38ce..690ee486aa07 100644 > > --- a/hw/ppc/spapr.c > > +++ b/hw/ppc/spapr.c > > @@ -1828,7 +1828,7 @@ static void ppc_spapr_init(MachineState > > *machine) g_free(type); > > } else { > > for (i = 0; i < smp_cpus; i++) { > > - PowerPCCPU *cpu = cpu_ppc_init(machine->cpu_model); > > + PowerPCCPU *cpu = ppc_cpu_init(machine->cpu_model); > > if (cpu == NULL) { > > error_report("Unable to find PowerPC CPU > > definition"); exit(1); > > diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c > > index b97d96685cf1..8d350fb98b2c 100644 > > --- a/hw/ppc/virtex_ml507.c > > +++ b/hw/ppc/virtex_ml507.c > > @@ -96,7 +96,7 @@ static PowerPCCPU *ppc440_init_xilinx(ram_addr_t > > *ram_size, CPUPPCState *env; > > qemu_irq *irqs; > > > > - cpu = cpu_ppc_init(cpu_model); > > + cpu = ppc_cpu_init(cpu_model, 0); > shouldn't it have only 1 argument? > Yes ! And the build breaks... :-\ > > if (cpu == NULL) { > > fprintf(stderr, "Unable to initialize CPU!\n"); > > exit(1); > > diff --git a/include/hw/ppc/ppc.h b/include/hw/ppc/ppc.h > > index 5617dc4a2c04..a4db1db82e1b 100644 > > --- a/include/hw/ppc/ppc.h > > +++ b/include/hw/ppc/ppc.h > > @@ -106,4 +106,5 @@ enum { > > /* ppc_booke.c */ > > void ppc_booke_timers_init(PowerPCCPU *cpu, uint32_t freq, uint32_t > > flags); > > +PowerPCCPU *ppc_cpu_init(const char *cpu_model); > > #endif > > diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h > > index af73bced9f70..440309a68006 100644 > > --- a/target-ppc/cpu.h > > +++ b/target-ppc/cpu.h > > @@ -1196,7 +1196,6 @@ extern const struct VMStateDescription > > vmstate_ppc_cpu; #endif > > > > > > /*****************************************************************************/ > > -PowerPCCPU *cpu_ppc_init(const char *cpu_model); > > void ppc_translate_init(void); > > void gen_update_current_nip(void *opaque); > > /* you can call this signal handler from your SIGBUS and SIGSEGV > > @@ -1275,7 +1274,9 @@ static inline uint64_t ppc_dump_gpr(CPUPPCState > > *env, int gprn) int ppc_dcr_read (ppc_dcr_t *dcr_env, int dcrn, > > uint32_t *valp); int ppc_dcr_write (ppc_dcr_t *dcr_env, int dcrn, > > uint32_t val); > > -#define cpu_init(cpu_model) CPU(cpu_ppc_init(cpu_model)) > > +#if defined(CONFIG_USER_ONLY) > > +#define cpu_init(cpu_model) cpu_generic_init(TYPE_POWERPC_CPU, > > cpu_model) +#endif > > > > #define cpu_signal_handler cpu_ppc_signal_handler > > #define cpu_list ppc_cpu_list > > diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c > > index a06bf50b65d4..6706787b41a1 100644 > > --- a/target-ppc/translate_init.c > > +++ b/target-ppc/translate_init.c > > @@ -10000,11 +10000,6 @@ static ObjectClass > > *ppc_cpu_class_by_name(const char *name) return NULL; > > } > > > > -PowerPCCPU *cpu_ppc_init(const char *cpu_model) > > -{ > > - return POWERPC_CPU(cpu_generic_init(TYPE_POWERPC_CPU, > > cpu_model)); -} > > - > > /* Sort by PVR, ordering special case "host" last. */ > > static gint ppc_cpu_list_compare(gconstpointer a, gconstpointer b) > > { > > >