Message ID | 20230918160257.30127-19-philmd@linaro.org |
---|---|
State | New |
Headers | show |
Series | exec/cpu: Call cpu_exec_realizefn() once in cpu_common_realize() | expand |
On 18.09.23 18:02, Philippe Mathieu-Daudé wrote: > s390_cpu_realize_sysemu() runs some checks for the TCG accelerator, > previous to creating the vCPU. s390_realize_cpu_model() also does > run some checks for KVM. > Move the sysemu call to s390_realize_cpu_model(). Having a single > call before cpu_exec_realizefn() will allow us to factor a > verify_accel_features() handler out in a pair of commits. > > Directly pass a S390CPU* to s390_cpu_realize_sysemu() to simplify. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > target/s390x/s390x-internal.h | 2 +- > target/s390x/cpu-sysemu.c | 3 +-- > target/s390x/cpu.c | 6 ------ > target/s390x/cpu_models.c | 4 ++++ > 4 files changed, 6 insertions(+), 9 deletions(-) > > diff --git a/target/s390x/s390x-internal.h b/target/s390x/s390x-internal.h > index 825252d728..781ac08458 100644 > --- a/target/s390x/s390x-internal.h > +++ b/target/s390x/s390x-internal.h > @@ -241,7 +241,7 @@ uint32_t calc_cc(CPUS390XState *env, uint32_t cc_op, uint64_t src, uint64_t dst, > unsigned int s390_cpu_halt(S390CPU *cpu); > void s390_cpu_unhalt(S390CPU *cpu); > void s390_cpu_init_sysemu(Object *obj); > -bool s390_cpu_realize_sysemu(DeviceState *dev, Error **errp); > +bool s390_cpu_realize_sysemu(S390CPU *cpu, Error **errp); > void s390_cpu_finalize(Object *obj); > void s390_cpu_class_init_sysemu(CPUClass *cc); > void s390_cpu_machine_reset_cb(void *opaque); > diff --git a/target/s390x/cpu-sysemu.c b/target/s390x/cpu-sysemu.c > index 8112561e5e..5178736c46 100644 > --- a/target/s390x/cpu-sysemu.c > +++ b/target/s390x/cpu-sysemu.c > @@ -122,9 +122,8 @@ void s390_cpu_init_sysemu(Object *obj) > s390_cpu_set_state(S390_CPU_STATE_STOPPED, cpu); > } > > -bool s390_cpu_realize_sysemu(DeviceState *dev, Error **errp) > +bool s390_cpu_realize_sysemu(S390CPU *cpu, Error **errp) > { > - S390CPU *cpu = S390_CPU(dev); > MachineState *ms = MACHINE(qdev_get_machine()); > unsigned int max_cpus = ms->smp.max_cpus; > > diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c > index 416ac6c4e0..7257d4bc19 100644 > --- a/target/s390x/cpu.c > +++ b/target/s390x/cpu.c > @@ -237,12 +237,6 @@ static void s390_cpu_realizefn(DeviceState *dev, Error **errp) > goto out; > } > > -#if !defined(CONFIG_USER_ONLY) > - if (!s390_cpu_realize_sysemu(dev, &err)) { > - goto out; > - } > -#endif > - > cpu_exec_realizefn(cs, &err); > if (err != NULL) { > goto out; > diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c > index 98f14c09c2..f030be0d55 100644 > --- a/target/s390x/cpu_models.c > +++ b/target/s390x/cpu_models.c > @@ -612,6 +612,10 @@ void s390_realize_cpu_model(CPUState *cs, Error **errp) > cpu->env.cpuid = deposit64(cpu->env.cpuid, CPU_PHYS_ADDR_SHIFT, > CPU_PHYS_ADDR_BITS, cpu->env.core_id); > } > + > + if (!s390_cpu_realize_sysemu(cpu, &err)) { > + return; > + } > #endif > } > That has nothing to do with CPU models and is, therefore, completely misplaced ... :/ Or what am I missing?
diff --git a/target/s390x/s390x-internal.h b/target/s390x/s390x-internal.h index 825252d728..781ac08458 100644 --- a/target/s390x/s390x-internal.h +++ b/target/s390x/s390x-internal.h @@ -241,7 +241,7 @@ uint32_t calc_cc(CPUS390XState *env, uint32_t cc_op, uint64_t src, uint64_t dst, unsigned int s390_cpu_halt(S390CPU *cpu); void s390_cpu_unhalt(S390CPU *cpu); void s390_cpu_init_sysemu(Object *obj); -bool s390_cpu_realize_sysemu(DeviceState *dev, Error **errp); +bool s390_cpu_realize_sysemu(S390CPU *cpu, Error **errp); void s390_cpu_finalize(Object *obj); void s390_cpu_class_init_sysemu(CPUClass *cc); void s390_cpu_machine_reset_cb(void *opaque); diff --git a/target/s390x/cpu-sysemu.c b/target/s390x/cpu-sysemu.c index 8112561e5e..5178736c46 100644 --- a/target/s390x/cpu-sysemu.c +++ b/target/s390x/cpu-sysemu.c @@ -122,9 +122,8 @@ void s390_cpu_init_sysemu(Object *obj) s390_cpu_set_state(S390_CPU_STATE_STOPPED, cpu); } -bool s390_cpu_realize_sysemu(DeviceState *dev, Error **errp) +bool s390_cpu_realize_sysemu(S390CPU *cpu, Error **errp) { - S390CPU *cpu = S390_CPU(dev); MachineState *ms = MACHINE(qdev_get_machine()); unsigned int max_cpus = ms->smp.max_cpus; diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c index 416ac6c4e0..7257d4bc19 100644 --- a/target/s390x/cpu.c +++ b/target/s390x/cpu.c @@ -237,12 +237,6 @@ static void s390_cpu_realizefn(DeviceState *dev, Error **errp) goto out; } -#if !defined(CONFIG_USER_ONLY) - if (!s390_cpu_realize_sysemu(dev, &err)) { - goto out; - } -#endif - cpu_exec_realizefn(cs, &err); if (err != NULL) { goto out; diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c index 98f14c09c2..f030be0d55 100644 --- a/target/s390x/cpu_models.c +++ b/target/s390x/cpu_models.c @@ -612,6 +612,10 @@ void s390_realize_cpu_model(CPUState *cs, Error **errp) cpu->env.cpuid = deposit64(cpu->env.cpuid, CPU_PHYS_ADDR_SHIFT, CPU_PHYS_ADDR_BITS, cpu->env.core_id); } + + if (!s390_cpu_realize_sysemu(cpu, &err)) { + return; + } #endif }
s390_cpu_realize_sysemu() runs some checks for the TCG accelerator, previous to creating the vCPU. s390_realize_cpu_model() also does run some checks for KVM. Move the sysemu call to s390_realize_cpu_model(). Having a single call before cpu_exec_realizefn() will allow us to factor a verify_accel_features() handler out in a pair of commits. Directly pass a S390CPU* to s390_cpu_realize_sysemu() to simplify. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- target/s390x/s390x-internal.h | 2 +- target/s390x/cpu-sysemu.c | 3 +-- target/s390x/cpu.c | 6 ------ target/s390x/cpu_models.c | 4 ++++ 4 files changed, 6 insertions(+), 9 deletions(-)