Message ID | 1456866806-31466-4-git-send-email-mjrosato@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
> In preparation for hotplug, defer some CPU initialization > until the device is actually being realized. > > Signed-off-by: Matthew Rosato <mjrosato@linux.vnet.ibm.com> > Reviewed-by: Andreas Färber <afaerber@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
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;