qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-ppc] [PATCH v2 3/7] ppc: different creation paths for cpus in


From: Greg Kurz
Subject: Re: [Qemu-ppc] [PATCH v2 3/7] ppc: different creation paths for cpus in system and user mode
Date: Mon, 4 Jul 2016 09:40:58 +0200

On Mon, 4 Jul 2016 09:14:43 +0200
Igor Mammedov <address@hidden> wrote:

> On Sat, 02 Jul 2016 00:41:40 +0200
> Greg Kurz <address@hidden> 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 <address@hidden>
> > Signed-off-by: Greg Kurz <address@hidden>
> > ---
> >  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)
> >  {
> >   
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]