* [PATCH v5 1/8] target/arm: Move start-powered-off property to generic CPUState
2020-08-19 2:42 [PATCH v5 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
@ 2020-08-19 2:42 ` Thiago Jung Bauermann
2020-08-19 2:42 ` [PATCH v5 2/8] target/arm: Move setting of CPU halted state to generic code Thiago Jung Bauermann
` (6 subsequent siblings)
7 siblings, 0 replies; 15+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-19 2:42 UTC (permalink / raw)
To: qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Jiaxun Yang, Aleksandar Markovic, Thomas Huth, David Gibson,
Philippe Mathieu-Daudé,
Artyom Tarasenko, Aleksandar Rikalo, Eduardo Habkost, Greg Kurz,
qemu-s390x, qemu-arm, Alex Bennée, Richard Henderson,
Cornelia Huck, Aurelien Jarno, Paolo Bonzini,
Thiago Jung Bauermann
There are other platforms which also have CPUs that start powered off, so
generalize the start-powered-off property so that it can be used by them.
Note that ARMv7MState also has a property of the same name but this patch
doesn't change it because that class isn't a subclass of CPUState so it
wouldn't be a trivial change.
This change should not cause any change in behavior.
Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Greg Kurz <groug@kaod.org>
Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com>
---
exec.c | 1 +
include/hw/core/cpu.h | 4 ++++
target/arm/cpu.c | 5 ++---
target/arm/cpu.h | 3 ---
target/arm/kvm32.c | 2 +-
target/arm/kvm64.c | 2 +-
6 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/exec.c b/exec.c
index 6f381f98e2..82e82fab09 100644
--- a/exec.c
+++ b/exec.c
@@ -899,6 +899,7 @@ Property cpu_common_props[] = {
DEFINE_PROP_LINK("memory", CPUState, memory, TYPE_MEMORY_REGION,
MemoryRegion *),
#endif
+ DEFINE_PROP_BOOL("start-powered-off", CPUState, start_powered_off, false),
DEFINE_PROP_END_OF_LIST(),
};
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index 8f145733ce..9fc2696db5 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -374,6 +374,10 @@ struct CPUState {
bool created;
bool stop;
bool stopped;
+
+ /* Should CPU start in powered-off state? */
+ bool start_powered_off;
+
bool unplug;
bool crash_occurred;
bool exit_request;
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index 111579554f..ec65c7653f 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -174,8 +174,8 @@ static void arm_cpu_reset(DeviceState *dev)
env->vfp.xregs[ARM_VFP_MVFR1] = cpu->isar.mvfr1;
env->vfp.xregs[ARM_VFP_MVFR2] = cpu->isar.mvfr2;
- cpu->power_state = cpu->start_powered_off ? PSCI_OFF : PSCI_ON;
- s->halted = cpu->start_powered_off;
+ cpu->power_state = s->start_powered_off ? PSCI_OFF : PSCI_ON;
+ s->halted = s->start_powered_off;
if (arm_feature(env, ARM_FEATURE_IWMMXT)) {
env->iwmmxt.cregs[ARM_IWMMXT_wCID] = 0x69051000 | 'Q';
@@ -2182,7 +2182,6 @@ static const ARMCPUInfo arm_cpus[] = {
};
static Property arm_cpu_properties[] = {
- DEFINE_PROP_BOOL("start-powered-off", ARMCPU, start_powered_off, false),
DEFINE_PROP_UINT32("psci-conduit", ARMCPU, psci_conduit, 0),
DEFINE_PROP_UINT64("midr", ARMCPU, midr, 0),
DEFINE_PROP_UINT64("mp-affinity", ARMCPU,
diff --git a/target/arm/cpu.h b/target/arm/cpu.h
index 9e8ed423ea..a925d26996 100644
--- a/target/arm/cpu.h
+++ b/target/arm/cpu.h
@@ -810,9 +810,6 @@ struct ARMCPU {
*/
uint32_t psci_version;
- /* Should CPU start in PSCI powered-off state? */
- bool start_powered_off;
-
/* Current power state, access guarded by BQL */
ARMPSCIState power_state;
diff --git a/target/arm/kvm32.c b/target/arm/kvm32.c
index 0af46b41c8..1f2b8f8b7a 100644
--- a/target/arm/kvm32.c
+++ b/target/arm/kvm32.c
@@ -218,7 +218,7 @@ int kvm_arch_init_vcpu(CPUState *cs)
/* Determine init features for this CPU */
memset(cpu->kvm_init_features, 0, sizeof(cpu->kvm_init_features));
- if (cpu->start_powered_off) {
+ if (cs->start_powered_off) {
cpu->kvm_init_features[0] |= 1 << KVM_ARM_VCPU_POWER_OFF;
}
if (kvm_check_extension(cs->kvm_state, KVM_CAP_ARM_PSCI_0_2)) {
diff --git a/target/arm/kvm64.c b/target/arm/kvm64.c
index 1169237905..f8a6d905fb 100644
--- a/target/arm/kvm64.c
+++ b/target/arm/kvm64.c
@@ -775,7 +775,7 @@ int kvm_arch_init_vcpu(CPUState *cs)
/* Determine init features for this CPU */
memset(cpu->kvm_init_features, 0, sizeof(cpu->kvm_init_features));
- if (cpu->start_powered_off) {
+ if (cs->start_powered_off) {
cpu->kvm_init_features[0] |= 1 << KVM_ARM_VCPU_POWER_OFF;
}
if (kvm_check_extension(cs->kvm_state, KVM_CAP_ARM_PSCI_0_2)) {
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v5 2/8] target/arm: Move setting of CPU halted state to generic code
2020-08-19 2:42 [PATCH v5 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
2020-08-19 2:42 ` [PATCH v5 1/8] target/arm: Move start-powered-off property to generic CPUState Thiago Jung Bauermann
@ 2020-08-19 2:42 ` Thiago Jung Bauermann
2020-08-19 2:42 ` [PATCH v5 3/8] ppc/spapr: Use start-powered-off CPUState property Thiago Jung Bauermann
` (5 subsequent siblings)
7 siblings, 0 replies; 15+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-19 2:42 UTC (permalink / raw)
To: qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Jiaxun Yang, Aleksandar Markovic, Thomas Huth, David Gibson,
Philippe Mathieu-Daudé,
Artyom Tarasenko, Aleksandar Rikalo, Eduardo Habkost, Greg Kurz,
qemu-s390x, qemu-arm, Alex Bennée, Richard Henderson,
Cornelia Huck, Aurelien Jarno, Paolo Bonzini,
Thiago Jung Bauermann
This change is in a separate patch because it's not so obvious that it
won't cause a regression.
Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Greg Kurz <groug@kaod.org>
Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com>
---
hw/core/cpu.c | 2 +-
target/arm/cpu.c | 1 -
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/hw/core/cpu.c b/hw/core/cpu.c
index 594441a150..71bb7859f1 100644
--- a/hw/core/cpu.c
+++ b/hw/core/cpu.c
@@ -258,7 +258,7 @@ static void cpu_common_reset(DeviceState *dev)
}
cpu->interrupt_request = 0;
- cpu->halted = 0;
+ cpu->halted = cpu->start_powered_off;
cpu->mem_io_pc = 0;
cpu->icount_extra = 0;
atomic_set(&cpu->icount_decr_ptr->u32, 0);
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index ec65c7653f..b6c65e4df6 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -175,7 +175,6 @@ static void arm_cpu_reset(DeviceState *dev)
env->vfp.xregs[ARM_VFP_MVFR2] = cpu->isar.mvfr2;
cpu->power_state = s->start_powered_off ? PSCI_OFF : PSCI_ON;
- s->halted = s->start_powered_off;
if (arm_feature(env, ARM_FEATURE_IWMMXT)) {
env->iwmmxt.cregs[ARM_IWMMXT_wCID] = 0x69051000 | 'Q';
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v5 3/8] ppc/spapr: Use start-powered-off CPUState property
2020-08-19 2:42 [PATCH v5 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
2020-08-19 2:42 ` [PATCH v5 1/8] target/arm: Move start-powered-off property to generic CPUState Thiago Jung Bauermann
2020-08-19 2:42 ` [PATCH v5 2/8] target/arm: Move setting of CPU halted state to generic code Thiago Jung Bauermann
@ 2020-08-19 2:42 ` Thiago Jung Bauermann
2020-08-19 2:42 ` [PATCH v5 4/8] ppc/e500: " Thiago Jung Bauermann
` (4 subsequent siblings)
7 siblings, 0 replies; 15+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-19 2:42 UTC (permalink / raw)
To: qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Jiaxun Yang, Aleksandar Markovic, Thomas Huth, David Gibson,
Philippe Mathieu-Daudé,
Artyom Tarasenko, Aleksandar Rikalo, Eduardo Habkost, Greg Kurz,
qemu-s390x, qemu-arm, Alex Bennée, Richard Henderson,
Cornelia Huck, Aurelien Jarno, Paolo Bonzini,
Thiago Jung Bauermann
PowerPC sPAPR CPUs start in the halted state, and spapr_reset_vcpu()
attempts to implement this by setting CPUState::halted to 1. But that's too
late for the case of hotplugged CPUs in a machine configure with 2 or more
threads per core.
By then, other parts of QEMU have already caused the vCPU to run in an
unitialized state a couple of times. For example, ppc_cpu_reset() calls
ppc_tlb_invalidate_all(), which ends up calling async_run_on_cpu(). This
kicks the new vCPU while it has CPUState::halted = 0, causing QEMU to issue
a KVM_RUN ioctl on the new vCPU before the guest is able to make the
start-cpu RTAS call to initialize its register state.
This problem doesn't seem to cause visible issues for regular guests, but
on a secure guest running under the Ultravisor it does. The Ultravisor
relies on being able to snoop on the start-cpu RTAS call to map vCPUs to
guests, and this issue causes it to see a stray vCPU that doesn't belong to
any guest.
Fix by setting the start-powered-off CPUState property in
spapr_create_vcpu(), which makes cpu_common_reset() initialize
CPUState::halted to 1 at an earlier moment.
Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Acked-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Greg Kurz <groug@kaod.org>
Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com>
---
hw/ppc/spapr_cpu_core.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
index c4f47dcc04..2125fdac34 100644
--- a/hw/ppc/spapr_cpu_core.c
+++ b/hw/ppc/spapr_cpu_core.c
@@ -36,11 +36,6 @@ static void spapr_reset_vcpu(PowerPCCPU *cpu)
cpu_reset(cs);
- /* All CPUs start halted. CPU0 is unhalted from the machine level
- * reset code and the rest are explicitly started up by the guest
- * using an RTAS call */
- cs->halted = 1;
-
env->spr[SPR_HIOR] = 0;
lpcr = env->spr[SPR_LPCR];
@@ -274,6 +269,11 @@ static PowerPCCPU *spapr_create_vcpu(SpaprCpuCore *sc, int i, Error **errp)
cs = CPU(obj);
cpu = POWERPC_CPU(obj);
+ /*
+ * All CPUs start halted. CPU0 is unhalted from the machine level reset code
+ * and the rest are explicitly started up by the guest using an RTAS call.
+ */
+ cs->start_powered_off = true;
cs->cpu_index = cc->core_id + i;
spapr_set_vcpu_id(cpu, cs->cpu_index, &local_err);
if (local_err) {
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v5 4/8] ppc/e500: Use start-powered-off CPUState property
2020-08-19 2:42 [PATCH v5 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
` (2 preceding siblings ...)
2020-08-19 2:42 ` [PATCH v5 3/8] ppc/spapr: Use start-powered-off CPUState property Thiago Jung Bauermann
@ 2020-08-19 2:42 ` Thiago Jung Bauermann
2020-08-19 3:05 ` Philippe Mathieu-Daudé
2020-08-19 2:42 ` [PATCH v5 5/8] mips/cps: " Thiago Jung Bauermann
` (3 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-19 2:42 UTC (permalink / raw)
To: qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Jiaxun Yang, Aleksandar Markovic, Thomas Huth, David Gibson,
Philippe Mathieu-Daudé,
Artyom Tarasenko, Aleksandar Rikalo, Eduardo Habkost, Greg Kurz,
qemu-s390x, qemu-arm, Alex Bennée, Richard Henderson,
Cornelia Huck, Aurelien Jarno, Paolo Bonzini,
Thiago Jung Bauermann
Instead of setting CPUState::halted to 1 in ppce500_cpu_reset_sec(), use
the start-powered-off property which makes cpu_common_reset() initialize it
to 1 in common code.
Also change creation of CPU object from cpu_create() to object_new() and
qdev_realize_and_unref() because cpu_create() realizes the CPU and it's not
possible to set a property after the object is realized.
Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com>
---
hw/ppc/e500.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
index ab9884e315..d7b803ef26 100644
--- a/hw/ppc/e500.c
+++ b/hw/ppc/e500.c
@@ -704,9 +704,6 @@ static void ppce500_cpu_reset_sec(void *opaque)
cpu_reset(cs);
- /* Secondary CPU starts in halted state for now. Needs to change when
- implementing non-kernel boot. */
- cs->halted = 1;
cs->exception_index = EXCP_HLT;
}
@@ -865,7 +862,7 @@ void ppce500_init(MachineState *machine)
CPUState *cs;
qemu_irq *input;
- cpu = POWERPC_CPU(cpu_create(machine->cpu_type));
+ cpu = POWERPC_CPU(object_new(machine->cpu_type));
env = &cpu->env;
cs = CPU(cpu);
@@ -897,7 +894,16 @@ void ppce500_init(MachineState *machine)
} else {
/* Secondary CPUs */
qemu_register_reset(ppce500_cpu_reset_sec, cpu);
+
+ /*
+ * Secondary CPU starts in halted state for now. Needs to change
+ * when implementing non-kernel boot.
+ */
+ object_property_set_bool(OBJECT(cs), "start-powered-off", true,
+ &error_fatal);
}
+
+ qdev_realize_and_unref(DEVICE(cs), NULL, &error_fatal);
}
env = firstenv;
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v5 4/8] ppc/e500: Use start-powered-off CPUState property
2020-08-19 2:42 ` [PATCH v5 4/8] ppc/e500: " Thiago Jung Bauermann
@ 2020-08-19 3:05 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 15+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-08-19 3:05 UTC (permalink / raw)
To: Thiago Jung Bauermann, qemu-ppc
Cc: Peter Maydell, Aleksandar Rikalo, Eduardo Habkost,
Aleksandar Markovic, Cornelia Huck, Mark Cave-Ayland, qemu-devel,
Jiaxun Yang, Greg Kurz, qemu-s390x, qemu-arm, Artyom Tarasenko,
Thomas Huth, Paolo Bonzini, David Hildenbrand, Richard Henderson,
Alex Bennée, Aurelien Jarno, David Gibson
On 8/19/20 4:42 AM, Thiago Jung Bauermann wrote:
> Instead of setting CPUState::halted to 1 in ppce500_cpu_reset_sec(), use
> the start-powered-off property which makes cpu_common_reset() initialize it
> to 1 in common code.
>
> Also change creation of CPU object from cpu_create() to object_new() and
> qdev_realize_and_unref() because cpu_create() realizes the CPU and it's not
> possible to set a property after the object is realized.
>
> Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> hw/ppc/e500.c | 14 ++++++++++----
> 1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
> index ab9884e315..d7b803ef26 100644
> --- a/hw/ppc/e500.c
> +++ b/hw/ppc/e500.c
> @@ -704,9 +704,6 @@ static void ppce500_cpu_reset_sec(void *opaque)
>
> cpu_reset(cs);
>
> - /* Secondary CPU starts in halted state for now. Needs to change when
> - implementing non-kernel boot. */
> - cs->halted = 1;
> cs->exception_index = EXCP_HLT;
> }
>
> @@ -865,7 +862,7 @@ void ppce500_init(MachineState *machine)
> CPUState *cs;
> qemu_irq *input;
>
> - cpu = POWERPC_CPU(cpu_create(machine->cpu_type));
> + cpu = POWERPC_CPU(object_new(machine->cpu_type));
> env = &cpu->env;
> cs = CPU(cpu);
>
> @@ -897,7 +894,16 @@ void ppce500_init(MachineState *machine)
> } else {
> /* Secondary CPUs */
> qemu_register_reset(ppce500_cpu_reset_sec, cpu);
> +
> + /*
> + * Secondary CPU starts in halted state for now. Needs to change
> + * when implementing non-kernel boot.
> + */
> + object_property_set_bool(OBJECT(cs), "start-powered-off", true,
> + &error_fatal);
> }
> +
> + qdev_realize_and_unref(DEVICE(cs), NULL, &error_fatal);
> }
>
> env = firstenv;
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v5 5/8] mips/cps: Use start-powered-off CPUState property
2020-08-19 2:42 [PATCH v5 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
` (3 preceding siblings ...)
2020-08-19 2:42 ` [PATCH v5 4/8] ppc/e500: " Thiago Jung Bauermann
@ 2020-08-19 2:42 ` Thiago Jung Bauermann
2020-08-19 3:06 ` Philippe Mathieu-Daudé
2020-08-19 2:42 ` [PATCH v5 6/8] sparc/sun4m: Remove main_cpu_reset() Thiago Jung Bauermann
` (2 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-19 2:42 UTC (permalink / raw)
To: qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Jiaxun Yang, Aleksandar Markovic, Thomas Huth, David Gibson,
Philippe Mathieu-Daudé,
Artyom Tarasenko, Aleksandar Rikalo, Eduardo Habkost, Greg Kurz,
qemu-s390x, qemu-arm, Alex Bennée, Richard Henderson,
Cornelia Huck, Aurelien Jarno, Paolo Bonzini,
Thiago Jung Bauermann
Instead of setting CPUState::halted to 1 in main_cpu_reset(), use the
start-powered-off property which makes cpu_common_reset() initialize it
to 1 in common code.
Also change creation of CPU object from cpu_create() to object_new() and
qdev_realize_and_unref() because cpu_create() realizes the CPU and it's not
possible to set a property after the object is realized.
Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com>
---
hw/mips/cps.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/hw/mips/cps.c b/hw/mips/cps.c
index 615e1a1ad2..4a98cf2287 100644
--- a/hw/mips/cps.c
+++ b/hw/mips/cps.c
@@ -52,9 +52,6 @@ static void main_cpu_reset(void *opaque)
CPUState *cs = CPU(cpu);
cpu_reset(cs);
-
- /* All VPs are halted on reset. Leave powering up to CPC. */
- cs->halted = 1;
}
static bool cpu_mips_itu_supported(CPUMIPSState *env)
@@ -76,7 +73,7 @@ static void mips_cps_realize(DeviceState *dev, Error **errp)
bool saar_present = false;
for (i = 0; i < s->num_vp; i++) {
- cpu = MIPS_CPU(cpu_create(s->cpu_type));
+ cpu = MIPS_CPU(object_new(s->cpu_type));
/* Init internal devices */
cpu_mips_irq_init_cpu(cpu);
@@ -89,7 +86,16 @@ static void mips_cps_realize(DeviceState *dev, Error **errp)
env->itc_tag = mips_itu_get_tag_region(&s->itu);
env->itu = &s->itu;
}
+ /* All VPs are halted on reset. Leave powering up to CPC. */
+ if (!object_property_set_bool(OBJECT(cpu), "start-powered-off", true,
+ errp)) {
+ return;
+ }
qemu_register_reset(main_cpu_reset, cpu);
+
+ if (!qdev_realize_and_unref(DEVICE(cpu), NULL, errp)) {
+ return;
+ }
}
cpu = MIPS_CPU(first_cpu);
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v5 5/8] mips/cps: Use start-powered-off CPUState property
2020-08-19 2:42 ` [PATCH v5 5/8] mips/cps: " Thiago Jung Bauermann
@ 2020-08-19 3:06 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 15+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-08-19 3:06 UTC (permalink / raw)
To: Thiago Jung Bauermann, qemu-ppc
Cc: Peter Maydell, Aleksandar Rikalo, Eduardo Habkost,
Aleksandar Markovic, Cornelia Huck, Mark Cave-Ayland, qemu-devel,
Jiaxun Yang, Greg Kurz, qemu-s390x, qemu-arm, Artyom Tarasenko,
Thomas Huth, Paolo Bonzini, David Hildenbrand, Richard Henderson,
Alex Bennée, Aurelien Jarno, David Gibson
On 8/19/20 4:42 AM, Thiago Jung Bauermann wrote:
> Instead of setting CPUState::halted to 1 in main_cpu_reset(), use the
> start-powered-off property which makes cpu_common_reset() initialize it
> to 1 in common code.
>
> Also change creation of CPU object from cpu_create() to object_new() and
> qdev_realize_and_unref() because cpu_create() realizes the CPU and it's not
> possible to set a property after the object is realized.
>
> Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com>
> ---
> hw/mips/cps.c | 14 ++++++++++----
> 1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/hw/mips/cps.c b/hw/mips/cps.c
> index 615e1a1ad2..4a98cf2287 100644
> --- a/hw/mips/cps.c
> +++ b/hw/mips/cps.c
> @@ -52,9 +52,6 @@ static void main_cpu_reset(void *opaque)
> CPUState *cs = CPU(cpu);
>
> cpu_reset(cs);
> -
> - /* All VPs are halted on reset. Leave powering up to CPC. */
> - cs->halted = 1;
> }
>
> static bool cpu_mips_itu_supported(CPUMIPSState *env)
> @@ -76,7 +73,7 @@ static void mips_cps_realize(DeviceState *dev, Error **errp)
> bool saar_present = false;
>
> for (i = 0; i < s->num_vp; i++) {
> - cpu = MIPS_CPU(cpu_create(s->cpu_type));
> + cpu = MIPS_CPU(object_new(s->cpu_type));
>
> /* Init internal devices */
> cpu_mips_irq_init_cpu(cpu);
> @@ -89,7 +86,16 @@ static void mips_cps_realize(DeviceState *dev, Error **errp)
> env->itc_tag = mips_itu_get_tag_region(&s->itu);
> env->itu = &s->itu;
> }
> + /* All VPs are halted on reset. Leave powering up to CPC. */
> + if (!object_property_set_bool(OBJECT(cpu), "start-powered-off", true,
> + errp)) {
> + return;
Ah, better :)
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> + }
> qemu_register_reset(main_cpu_reset, cpu);
> +
> + if (!qdev_realize_and_unref(DEVICE(cpu), NULL, errp)) {
> + return;
> + }
> }
>
> cpu = MIPS_CPU(first_cpu);
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v5 6/8] sparc/sun4m: Remove main_cpu_reset()
2020-08-19 2:42 [PATCH v5 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
` (4 preceding siblings ...)
2020-08-19 2:42 ` [PATCH v5 5/8] mips/cps: " Thiago Jung Bauermann
@ 2020-08-19 2:42 ` Thiago Jung Bauermann
2020-08-19 3:07 ` Philippe Mathieu-Daudé
2020-08-19 2:42 ` [PATCH v5 7/8] sparc/sun4m: Use start-powered-off CPUState property Thiago Jung Bauermann
2020-08-19 2:42 ` [PATCH v5 8/8] target/s390x: " Thiago Jung Bauermann
7 siblings, 1 reply; 15+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-19 2:42 UTC (permalink / raw)
To: qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Jiaxun Yang, Aleksandar Markovic, Thomas Huth, David Gibson,
Philippe Mathieu-Daudé,
Artyom Tarasenko, Aleksandar Rikalo, Eduardo Habkost, Greg Kurz,
qemu-s390x, qemu-arm, Alex Bennée, Richard Henderson,
Cornelia Huck, Aurelien Jarno, Paolo Bonzini,
Thiago Jung Bauermann
We rely on cpu_common_reset() to set cs->halted to 0, so main_cpu_reset()
is pointless.
Suggested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com>
---
hw/sparc/sun4m.c | 13 +------------
1 file changed, 1 insertion(+), 12 deletions(-)
diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c
index cf7dfa4af5..22c51dac8a 100644
--- a/hw/sparc/sun4m.c
+++ b/hw/sparc/sun4m.c
@@ -218,15 +218,6 @@ static void dummy_cpu_set_irq(void *opaque, int irq, int level)
{
}
-static void main_cpu_reset(void *opaque)
-{
- SPARCCPU *cpu = opaque;
- CPUState *cs = CPU(cpu);
-
- cpu_reset(cs);
- cs->halted = 0;
-}
-
static void secondary_cpu_reset(void *opaque)
{
SPARCCPU *cpu = opaque;
@@ -827,9 +818,7 @@ static void cpu_devinit(const char *cpu_type, unsigned int id,
env = &cpu->env;
cpu_sparc_set_id(env, id);
- if (id == 0) {
- qemu_register_reset(main_cpu_reset, cpu);
- } else {
+ if (id != 0) {
qemu_register_reset(secondary_cpu_reset, cpu);
cs = CPU(cpu);
cs->halted = 1;
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v5 6/8] sparc/sun4m: Remove main_cpu_reset()
2020-08-19 2:42 ` [PATCH v5 6/8] sparc/sun4m: Remove main_cpu_reset() Thiago Jung Bauermann
@ 2020-08-19 3:07 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 15+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-08-19 3:07 UTC (permalink / raw)
To: Thiago Jung Bauermann, qemu-ppc
Cc: Peter Maydell, Aleksandar Rikalo, Eduardo Habkost,
Aleksandar Markovic, Cornelia Huck, Mark Cave-Ayland, qemu-devel,
Jiaxun Yang, Greg Kurz, qemu-s390x, qemu-arm, Artyom Tarasenko,
Thomas Huth, Paolo Bonzini, David Hildenbrand, Richard Henderson,
Alex Bennée, Aurelien Jarno, David Gibson
On 8/19/20 4:42 AM, Thiago Jung Bauermann wrote:
> We rely on cpu_common_reset() to set cs->halted to 0, so main_cpu_reset()
> is pointless.
>
> Suggested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
> Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> hw/sparc/sun4m.c | 13 +------------
> 1 file changed, 1 insertion(+), 12 deletions(-)
>
> diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c
> index cf7dfa4af5..22c51dac8a 100644
> --- a/hw/sparc/sun4m.c
> +++ b/hw/sparc/sun4m.c
> @@ -218,15 +218,6 @@ static void dummy_cpu_set_irq(void *opaque, int irq, int level)
> {
> }
>
> -static void main_cpu_reset(void *opaque)
> -{
> - SPARCCPU *cpu = opaque;
> - CPUState *cs = CPU(cpu);
> -
> - cpu_reset(cs);
> - cs->halted = 0;
> -}
> -
> static void secondary_cpu_reset(void *opaque)
> {
> SPARCCPU *cpu = opaque;
> @@ -827,9 +818,7 @@ static void cpu_devinit(const char *cpu_type, unsigned int id,
> env = &cpu->env;
>
> cpu_sparc_set_id(env, id);
> - if (id == 0) {
> - qemu_register_reset(main_cpu_reset, cpu);
> - } else {
> + if (id != 0) {
> qemu_register_reset(secondary_cpu_reset, cpu);
> cs = CPU(cpu);
> cs->halted = 1;
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v5 7/8] sparc/sun4m: Use start-powered-off CPUState property
2020-08-19 2:42 [PATCH v5 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
` (5 preceding siblings ...)
2020-08-19 2:42 ` [PATCH v5 6/8] sparc/sun4m: Remove main_cpu_reset() Thiago Jung Bauermann
@ 2020-08-19 2:42 ` Thiago Jung Bauermann
2020-08-19 3:09 ` Philippe Mathieu-Daudé
2020-08-19 2:42 ` [PATCH v5 8/8] target/s390x: " Thiago Jung Bauermann
7 siblings, 1 reply; 15+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-19 2:42 UTC (permalink / raw)
To: qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Jiaxun Yang, Aleksandar Markovic, Thomas Huth, David Gibson,
Philippe Mathieu-Daudé,
Artyom Tarasenko, Aleksandar Rikalo, Eduardo Habkost, Greg Kurz,
qemu-s390x, qemu-arm, Alex Bennée, Richard Henderson,
Cornelia Huck, Aurelien Jarno, Paolo Bonzini,
Thiago Jung Bauermann
Instead of setting CPUState::halted to 1 in secondary_cpu_reset(), use the
start-powered-off property which makes cpu_common_reset() initialize it
to 1 in common code.
This makes secondary_cpu_reset() unnecessary, so remove it.
Also remove setting of cs->halted from cpu_devinit(), which seems out of
place when compared to similar code in other architectures (e.g.,
ppce500_init() in hw/ppc/e500.c).
Finally, change creation of CPU object from cpu_create() to object_new()
and qdev_realize_and_unref() because cpu_create() realizes the CPU and it's
not possible to set a property after the object is realized.
Suggested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com>
---
hw/sparc/sun4m.c | 21 +++++----------------
1 file changed, 5 insertions(+), 16 deletions(-)
diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c
index 22c51dac8a..1925f415e7 100644
--- a/hw/sparc/sun4m.c
+++ b/hw/sparc/sun4m.c
@@ -218,15 +218,6 @@ static void dummy_cpu_set_irq(void *opaque, int irq, int level)
{
}
-static void secondary_cpu_reset(void *opaque)
-{
- SPARCCPU *cpu = opaque;
- CPUState *cs = CPU(cpu);
-
- cpu_reset(cs);
- cs->halted = 1;
-}
-
static void cpu_halt_signal(void *opaque, int irq, int level)
{
if (level && current_cpu) {
@@ -810,21 +801,19 @@ static const TypeInfo ram_info = {
static void cpu_devinit(const char *cpu_type, unsigned int id,
uint64_t prom_addr, qemu_irq **cpu_irqs)
{
- CPUState *cs;
SPARCCPU *cpu;
CPUSPARCState *env;
- cpu = SPARC_CPU(cpu_create(cpu_type));
+ cpu = SPARC_CPU(object_new(cpu_type));
env = &cpu->env;
cpu_sparc_set_id(env, id);
- if (id != 0) {
- qemu_register_reset(secondary_cpu_reset, cpu);
- cs = CPU(cpu);
- cs->halted = 1;
- }
+ object_property_set_bool(OBJECT(cpu), "start-powered-off", id != 0,
+ &error_fatal);
*cpu_irqs = qemu_allocate_irqs(cpu_set_irq, cpu, MAX_PILS);
env->prom_addr = prom_addr;
+
+ qdev_realize_and_unref(DEVICE(cpu), NULL, &error_fatal);
}
static void dummy_fdc_tc(void *opaque, int irq, int level)
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v5 7/8] sparc/sun4m: Use start-powered-off CPUState property
2020-08-19 2:42 ` [PATCH v5 7/8] sparc/sun4m: Use start-powered-off CPUState property Thiago Jung Bauermann
@ 2020-08-19 3:09 ` Philippe Mathieu-Daudé
2020-08-19 15:26 ` Thiago Jung Bauermann
0 siblings, 1 reply; 15+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-08-19 3:09 UTC (permalink / raw)
To: Thiago Jung Bauermann, qemu-ppc
Cc: Peter Maydell, Aleksandar Rikalo, Eduardo Habkost,
Aleksandar Markovic, Cornelia Huck, Mark Cave-Ayland, qemu-devel,
Jiaxun Yang, Greg Kurz, qemu-s390x, qemu-arm, Artyom Tarasenko,
Thomas Huth, Paolo Bonzini, David Hildenbrand, Richard Henderson,
Alex Bennée, Aurelien Jarno, David Gibson
On 8/19/20 4:42 AM, Thiago Jung Bauermann wrote:
> Instead of setting CPUState::halted to 1 in secondary_cpu_reset(), use the
> start-powered-off property which makes cpu_common_reset() initialize it
> to 1 in common code.
>
> This makes secondary_cpu_reset() unnecessary, so remove it.
>
> Also remove setting of cs->halted from cpu_devinit(), which seems out of
> place when compared to similar code in other architectures (e.g.,
> ppce500_init() in hw/ppc/e500.c).
>
> Finally, change creation of CPU object from cpu_create() to object_new()
> and qdev_realize_and_unref() because cpu_create() realizes the CPU and it's
> not possible to set a property after the object is realized.
>
> Suggested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com>
> ---
> hw/sparc/sun4m.c | 21 +++++----------------
> 1 file changed, 5 insertions(+), 16 deletions(-)
>
> diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c
> index 22c51dac8a..1925f415e7 100644
> --- a/hw/sparc/sun4m.c
> +++ b/hw/sparc/sun4m.c
> @@ -218,15 +218,6 @@ static void dummy_cpu_set_irq(void *opaque, int irq, int level)
> {
> }
>
> -static void secondary_cpu_reset(void *opaque)
> -{
> - SPARCCPU *cpu = opaque;
> - CPUState *cs = CPU(cpu);
> -
> - cpu_reset(cs);
> - cs->halted = 1;
> -}
> -
> static void cpu_halt_signal(void *opaque, int irq, int level)
> {
> if (level && current_cpu) {
> @@ -810,21 +801,19 @@ static const TypeInfo ram_info = {
> static void cpu_devinit(const char *cpu_type, unsigned int id,
> uint64_t prom_addr, qemu_irq **cpu_irqs)
> {
> - CPUState *cs;
> SPARCCPU *cpu;
> CPUSPARCState *env;
>
> - cpu = SPARC_CPU(cpu_create(cpu_type));
> + cpu = SPARC_CPU(object_new(cpu_type));
> env = &cpu->env;
>
> cpu_sparc_set_id(env, id);
> - if (id != 0) {
> - qemu_register_reset(secondary_cpu_reset, cpu);
> - cs = CPU(cpu);
> - cs->halted = 1;
> - }
> + object_property_set_bool(OBJECT(cpu), "start-powered-off", id != 0,
> + &error_fatal);
Why not call here:
qdev_realize_and_unref(DEVICE(cpu), NULL, &error_fatal);
?
> *cpu_irqs = qemu_allocate_irqs(cpu_set_irq, cpu, MAX_PILS);
> env->prom_addr = prom_addr;
> +
> + qdev_realize_and_unref(DEVICE(cpu), NULL, &error_fatal);
> }
>
> static void dummy_fdc_tc(void *opaque, int irq, int level)
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v5 7/8] sparc/sun4m: Use start-powered-off CPUState property
2020-08-19 3:09 ` Philippe Mathieu-Daudé
@ 2020-08-19 15:26 ` Thiago Jung Bauermann
0 siblings, 0 replies; 15+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-19 15:26 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: Peter Maydell, Aleksandar Rikalo, Eduardo Habkost,
Aleksandar Markovic, Cornelia Huck, Mark Cave-Ayland, qemu-devel,
Jiaxun Yang, Greg Kurz, qemu-s390x, qemu-arm, qemu-ppc,
Artyom Tarasenko, Thomas Huth, Paolo Bonzini, David Hildenbrand,
Richard Henderson, Alex Bennée, Aurelien Jarno,
David Gibson
Hi Philippe,
Philippe Mathieu-Daudé <philmd@redhat.com> writes:
> On 8/19/20 4:42 AM, Thiago Jung Bauermann wrote:
>> Instead of setting CPUState::halted to 1 in secondary_cpu_reset(), use the
>> start-powered-off property which makes cpu_common_reset() initialize it
>> to 1 in common code.
>>
>> This makes secondary_cpu_reset() unnecessary, so remove it.
>>
>> Also remove setting of cs->halted from cpu_devinit(), which seems out of
>> place when compared to similar code in other architectures (e.g.,
>> ppce500_init() in hw/ppc/e500.c).
>>
>> Finally, change creation of CPU object from cpu_create() to object_new()
>> and qdev_realize_and_unref() because cpu_create() realizes the CPU and it's
>> not possible to set a property after the object is realized.
>>
>> Suggested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>> Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com>
>> ---
>> hw/sparc/sun4m.c | 21 +++++----------------
>> 1 file changed, 5 insertions(+), 16 deletions(-)
>>
>> diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c
>> index 22c51dac8a..1925f415e7 100644
>> --- a/hw/sparc/sun4m.c
>> +++ b/hw/sparc/sun4m.c
>> @@ -218,15 +218,6 @@ static void dummy_cpu_set_irq(void *opaque, int irq, int level)
>> {
>> }
>>
>> -static void secondary_cpu_reset(void *opaque)
>> -{
>> - SPARCCPU *cpu = opaque;
>> - CPUState *cs = CPU(cpu);
>> -
>> - cpu_reset(cs);
>> - cs->halted = 1;
>> -}
>> -
>> static void cpu_halt_signal(void *opaque, int irq, int level)
>> {
>> if (level && current_cpu) {
>> @@ -810,21 +801,19 @@ static const TypeInfo ram_info = {
>> static void cpu_devinit(const char *cpu_type, unsigned int id,
>> uint64_t prom_addr, qemu_irq **cpu_irqs)
>> {
>> - CPUState *cs;
>> SPARCCPU *cpu;
>> CPUSPARCState *env;
>>
>> - cpu = SPARC_CPU(cpu_create(cpu_type));
>> + cpu = SPARC_CPU(object_new(cpu_type));
>> env = &cpu->env;
>>
>> cpu_sparc_set_id(env, id);
>> - if (id != 0) {
>> - qemu_register_reset(secondary_cpu_reset, cpu);
>> - cs = CPU(cpu);
>> - cs->halted = 1;
>> - }
>> + object_property_set_bool(OBJECT(cpu), "start-powered-off", id != 0,
>> + &error_fatal);
>
> Why not call here:
>
> qdev_realize_and_unref(DEVICE(cpu), NULL, &error_fatal);
>
> ?
I can do that. I was unsure about whether qemu_allocate_irqs() could
come after realize, but now that you pointed it out it obviously can
since this code was working with cpu_create(). I'll send a v6 with that
change.
>> *cpu_irqs = qemu_allocate_irqs(cpu_set_irq, cpu, MAX_PILS);
>> env->prom_addr = prom_addr;
>> +
>> + qdev_realize_and_unref(DEVICE(cpu), NULL, &error_fatal);
>> }
>>
>> static void dummy_fdc_tc(void *opaque, int irq, int level)
>>
--
Thiago Jung Bauermann
IBM Linux Technology Center
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v5 8/8] target/s390x: Use start-powered-off CPUState property
2020-08-19 2:42 [PATCH v5 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
` (6 preceding siblings ...)
2020-08-19 2:42 ` [PATCH v5 7/8] sparc/sun4m: Use start-powered-off CPUState property Thiago Jung Bauermann
@ 2020-08-19 2:42 ` Thiago Jung Bauermann
2020-08-19 3:10 ` Philippe Mathieu-Daudé
7 siblings, 1 reply; 15+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-19 2:42 UTC (permalink / raw)
To: qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Jiaxun Yang, Aleksandar Markovic, Thomas Huth, David Gibson,
Philippe Mathieu-Daudé,
Artyom Tarasenko, Aleksandar Rikalo, Eduardo Habkost, Greg Kurz,
qemu-s390x, qemu-arm, Alex Bennée, Richard Henderson,
Cornelia Huck, Aurelien Jarno, Paolo Bonzini,
Thiago Jung Bauermann
Instead of setting CPUState::halted to 1 in s390_cpu_initfn(), use the
start-powered-off property which makes cpu_common_reset() initialize it
to 1 in common code.
Note that this changes behavior by setting cs->halted to 1 on reset, which
didn't happen before.
Acked-by: Cornelia Huck <cohuck@redhat.com>
Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com>
---
target/s390x/cpu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c
index 08eb674d22..73d7d6007e 100644
--- a/target/s390x/cpu.c
+++ b/target/s390x/cpu.c
@@ -291,7 +291,7 @@ static void s390_cpu_initfn(Object *obj)
S390CPU *cpu = S390_CPU(obj);
cpu_set_cpustate_pointers(cpu);
- cs->halted = 1;
+ cs->start_powered_off = true;
cs->exception_index = EXCP_HLT;
#if !defined(CONFIG_USER_ONLY)
object_property_add(obj, "crash-information", "GuestPanicInformation",
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v5 8/8] target/s390x: Use start-powered-off CPUState property
2020-08-19 2:42 ` [PATCH v5 8/8] target/s390x: " Thiago Jung Bauermann
@ 2020-08-19 3:10 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 15+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-08-19 3:10 UTC (permalink / raw)
To: Thiago Jung Bauermann, qemu-ppc
Cc: Peter Maydell, Aleksandar Rikalo, Eduardo Habkost,
Aleksandar Markovic, Cornelia Huck, Mark Cave-Ayland, qemu-devel,
Jiaxun Yang, Greg Kurz, qemu-s390x, qemu-arm, Artyom Tarasenko,
Thomas Huth, Paolo Bonzini, David Hildenbrand, Richard Henderson,
Alex Bennée, Aurelien Jarno, David Gibson
On 8/19/20 4:42 AM, Thiago Jung Bauermann wrote:
> Instead of setting CPUState::halted to 1 in s390_cpu_initfn(), use the
> start-powered-off property which makes cpu_common_reset() initialize it
> to 1 in common code.
>
> Note that this changes behavior by setting cs->halted to 1 on reset, which
> didn't happen before.
>
> Acked-by: Cornelia Huck <cohuck@redhat.com>
> Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> target/s390x/cpu.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c
> index 08eb674d22..73d7d6007e 100644
> --- a/target/s390x/cpu.c
> +++ b/target/s390x/cpu.c
> @@ -291,7 +291,7 @@ static void s390_cpu_initfn(Object *obj)
> S390CPU *cpu = S390_CPU(obj);
>
> cpu_set_cpustate_pointers(cpu);
> - cs->halted = 1;
> + cs->start_powered_off = true;
> cs->exception_index = EXCP_HLT;
> #if !defined(CONFIG_USER_ONLY)
> object_property_add(obj, "crash-information", "GuestPanicInformation",
>
^ permalink raw reply [flat|nested] 15+ messages in thread