@@ -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);
@@ -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;
@@ -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;
@@ -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(-)