[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL for-2.6 03/11] s390x/cpu: Get rid of side effects whe
From: |
Cornelia Huck |
Subject: |
[Qemu-devel] [PULL for-2.6 03/11] s390x/cpu: Get rid of side effects when creating a vcpu |
Date: |
Fri, 11 Mar 2016 10:56:34 +0100 |
From: Matthew Rosato <address@hidden>
In preparation for hotplug, defer some CPU initialization
until the device is actually being realized, including
cpu_exec_init.
Signed-off-by: Matthew Rosato <address@hidden>
Reviewed-by: David Hildenbrand <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Cornelia Huck <address@hidden>
---
target-s390x/cpu-qom.h | 2 ++
target-s390x/cpu.c | 20 +++++++++++++++-----
2 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/target-s390x/cpu-qom.h b/target-s390x/cpu-qom.h
index 029a44a..56d82f2 100644
--- a/target-s390x/cpu-qom.h
+++ b/target-s390x/cpu-qom.h
@@ -47,6 +47,8 @@ typedef struct S390CPUClass {
CPUClass parent_class;
/*< public >*/
+ int64_t next_cpu_id;
+
DeviceRealize parent_realize;
void (*parent_reset)(CPUState *cpu);
void (*load_normal)(CPUState *cpu);
diff --git a/target-s390x/cpu.c b/target-s390x/cpu.c
index 603c2a1..76c8eaf 100644
--- a/target-s390x/cpu.c
+++ b/target-s390x/cpu.c
@@ -195,7 +195,20 @@ 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;
+ Error *err = NULL;
+
+ cpu_exec_init(cs, &err);
+ if (err != NULL) {
+ error_propagate(errp, err);
+ return;
+ }
+#if !defined(CONFIG_USER_ONLY)
+ qemu_register_reset(s390_cpu_machine_reset_cb, cpu);
+#endif
+ env->cpu_num = scc->next_cpu_id++;
s390_cpu_gdb_init(cs);
qemu_init_vcpu(cs);
#if !defined(CONFIG_USER_ONLY)
@@ -213,7 +226,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
@@ -221,9 +233,7 @@ static void s390_cpu_initfn(Object *obj)
cs->env_ptr = env;
cs->halted = 1;
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 +242,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;
@@ -339,6 +348,7 @@ static void s390_cpu_class_init(ObjectClass *oc, void *data)
CPUClass *cc = CPU_CLASS(scc);
DeviceClass *dc = DEVICE_CLASS(oc);
+ scc->next_cpu_id = 0;
scc->parent_realize = dc->realize;
dc->realize = s390_cpu_realizefn;
@@ -371,7 +381,7 @@ static void s390_cpu_class_init(ObjectClass *oc, void *data)
cc->gdb_arch_name = s390_gdb_arch_name;
/*
- * Reason: s390_cpu_initfn() calls cpu_exec_init(), which saves
+ * Reason: s390_cpu_realizefn() calls cpu_exec_init(), which saves
* the object in cpus -> dangling pointer after final
* object_unref().
*/
--
2.7.2
- [Qemu-devel] [PULL for-2.6 00/11] s390x patches for 2.6, Cornelia Huck, 2016/03/11
- [Qemu-devel] [PULL for-2.6 06/11] s390x/cpu: Add error handling to cpu creation, Cornelia Huck, 2016/03/11
- [Qemu-devel] [PULL for-2.6 01/11] s390x/cpu: Cleanup init in preparation for hotplug, Cornelia Huck, 2016/03/11
- [Qemu-devel] [PULL for-2.6 02/11] s390x/cpu: Set initial CPU state in common routine, Cornelia Huck, 2016/03/11
- [Qemu-devel] [PULL for-2.6 05/11] s390x/cpu: Add CPU property links, Cornelia Huck, 2016/03/11
- [Qemu-devel] [PULL for-2.6 03/11] s390x/cpu: Get rid of side effects when creating a vcpu,
Cornelia Huck <=
- [Qemu-devel] [PULL for-2.6 08/11] pc-bios/s390-ccw: fix old bug in ptr increment, Cornelia Huck, 2016/03/11
- [Qemu-devel] [PULL for-2.6 04/11] s390x/cpu: Tolerate max_cpus, Cornelia Huck, 2016/03/11
- [Qemu-devel] [PULL for-2.6 09/11] s390x: Introduce machine definition macros, Cornelia Huck, 2016/03/11
- [Qemu-devel] [PULL for-2.6 07/11] s390x/cpu: Allow hotplug of CPUs, Cornelia Huck, 2016/03/11
- [Qemu-devel] [PULL for-2.6 11/11] s390x/cpu: use g_new0, Cornelia Huck, 2016/03/11
- [Qemu-devel] [PULL for-2.6 10/11] s390x: Introduce S390MachineClass, Cornelia Huck, 2016/03/11
- Re: [Qemu-devel] [PULL for-2.6 00/11] s390x patches for 2.6, Peter Maydell, 2016/03/14