Re: [Qemu-devel] [PATCH v6 3/7] s390x/cpu: Move some CPU initialization into realize
On 02/22/2016 12:35 PM, Andreas Färber wrote: > Am 22.02.2016 um 18:06 schrieb Matthew Rosato: >> In preparation for hotplug, defer some CPU initialization >> until the device is actually being realized. >> >> Signed-off-by: Matthew Rosato>> --- >> target-s390x/cpu.c | 9 ++--- >> 1 file changed, 6 insertions(+), 3 deletions(-) > > Looks reasonable on a brief sight, > > Reviewed-by: Andreas Färber > > What is env->cpu_num used for? In particular, have you thought about > linux-user creating multiple CPUs and possibly destroying them again? > env->cpu_num is intended to map to the s390x architecture concept of a cpu address, which is a numeric ID used to differentiate between CPUs when a targeted event occurs (like an unsolicited interrupt that must be handled on behalf of a particular CPU). s390x architecture currently cannot tolerate CPU destruction. Matt
Re: [Qemu-devel] [PATCH v6 3/7] s390x/cpu: Move some CPU initialization into realize
Am 22.02.2016 um 18:06 schrieb Matthew Rosato: > In preparation for hotplug, defer some CPU initialization > until the device is actually being realized. > > Signed-off-by: Matthew Rosato> --- > target-s390x/cpu.c | 9 ++--- > 1 file changed, 6 insertions(+), 3 deletions(-) Looks reasonable on a brief sight, Reviewed-by: Andreas Färber What is env->cpu_num used for? In particular, have you thought about linux-user creating multiple CPUs and possibly destroying them again? Regards, Andreas -- SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Felix Imendörffer, Jane Smithard, Graham Norton; HRB 21284 (AG Nürnberg)
[Qemu-devel] [PATCH v6 3/7] s390x/cpu: Move some CPU initialization into realize
In preparation for hotplug, defer some CPU initialization until the device is actually being realized. Signed-off-by: Matthew Rosato--- 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 = >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 = >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, _abort); #if !defined(CONFIG_USER_ONLY) -qemu_register_reset(s390_cpu_machine_reset_cb, cpu); qemu_get_timedate(, 0); env->tod_offset = TOD_UNIX_EPOCH + (time2tod(mktimegm()) * 10ULL); @@ -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; -- 1.9.1