> In preparation for hotplug, defer some CPU initialization > until the device is actually being realized. > > Signed-off-by: Matthew Rosato <mjros...@linux.vnet.ibm.com> > Reviewed-by: Andreas Färber <afaer...@suse.de> > --- > target-s390x/cpu.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/target-s390x/cpu.c b/target-s390x/cpu.c > index 603c2a1..8dfd063 100644 > --- a/target-s390x/cpu.c > +++ b/target-s390x/cpu.c > @@ -195,7 +195,13 @@ static void s390_cpu_realizefn(DeviceState *dev, Error > **errp) > { > CPUState *cs = CPU(dev); > S390CPUClass *scc = S390_CPU_GET_CLASS(dev); > + S390CPU *cpu = S390_CPU(dev); > + CPUS390XState *env = &cpu->env; > > +#if !defined(CONFIG_USER_ONLY) > + qemu_register_reset(s390_cpu_machine_reset_cb, cpu); > +#endif > + env->cpu_num = cs->cpu_index; > s390_cpu_gdb_init(cs); > qemu_init_vcpu(cs); > #if !defined(CONFIG_USER_ONLY) > @@ -213,7 +219,6 @@ static void s390_cpu_initfn(Object *obj) > S390CPU *cpu = S390_CPU(obj); > CPUS390XState *env = &cpu->env; > static bool inited; > - static int cpu_num = 0; > #if !defined(CONFIG_USER_ONLY) > struct tm tm; > #endif > @@ -223,7 +228,6 @@ static void s390_cpu_initfn(Object *obj) > cs->exception_index = EXCP_HLT; > cpu_exec_init(cs, &error_abort); > #if !defined(CONFIG_USER_ONLY) > - qemu_register_reset(s390_cpu_machine_reset_cb, cpu); > qemu_get_timedate(&tm, 0); > env->tod_offset = TOD_UNIX_EPOCH + > (time2tod(mktimegm(&tm)) * 1000000000ULL); > @@ -232,7 +236,6 @@ static void s390_cpu_initfn(Object *obj) > env->cpu_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, s390x_cpu_timer, cpu); > s390_cpu_set_state(CPU_STATE_STOPPED, cpu); > #endif > - env->cpu_num = cpu_num++; > > if (tcg_enabled() && !inited) { > inited = true;
Hmm, two things a) env is not needed in this patch b) This patch breaks cpu creation temporarily (cpu number rework). cpu_num is always 0 - a problem at east for tcg. You should introduce scc->next_cpu_id in this patch, cpu->id can be left in the error handling patch. David