* [PATCH v7 0/8] Generalize start-powered-off property from ARM
@ 2020-08-26 5:55 Thiago Jung Bauermann
2020-08-26 5:55 ` [PATCH v7 1/8] target/arm: Move start-powered-off property to generic CPUState Thiago Jung Bauermann
` (8 more replies)
0 siblings, 9 replies; 16+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-26 5:55 UTC (permalink / raw)
To: qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Aleksandar Markovic, Thomas Huth, David Gibson,
Philippe Mathieu-Daudé, Artyom Tarasenko, Aleksandar Rikalo,
Eduardo Habkost, Greg Kurz, qemu-s390x, qemu-arm,
Cédric Le Goater, Paolo Bonzini, Alex Bennée,
Richard Henderson, Cornelia Huck, Thiago Jung Bauermann,
Igor Mammedov, Aurelien Jarno
This version fixes `make check` failures in ppc/e500.c, mips/cps.c and
sparc/sun4m.c. This was done by moving the qdev_realize_and_unref() call as
close as possible to the object_new() call, in order to keep the CPU object
construction as similar as possible to the earlier version which used
cpu_create().
I also had to change the patch which removed the main_cpu_reset() function
from sparc/sun4m.c. It was causing a `make check` failure but I can't
really explain why. See this message for a few more details:
https://lists.nongnu.org/archive/html/qemu-ppc/2020-08/msg00419.html
I dropped the Reviewed-by's on the changed patches because of these
changes.
Original cover letter below, followed by changelog:
The ARM code has a start-powered-off property in ARMCPU, which is a
subclass of CPUState. This property causes arm_cpu_reset() to set
CPUState::halted to 1, signalling that the CPU should start in a halted
state. Other architectures also have code which aim to achieve the same
effect, but without using a property.
The ppc/spapr version has a bug where QEMU does a KVM_RUN on the vcpu
before cs->halted is set to 1, causing the vcpu to run while it's still in
an unitialized state (more details in patch 3).
Peter Maydell mentioned the ARM start-powered-off property and
Eduardo Habkost suggested making it generic, so this patch series does
that, for all cases which I was able to find via grep in the code.
The only problem is that I was only able to test these changes on a ppc64le
pseries KVM guest, so except for patches 2 and 3, all others are only
build-tested. Also, my grasp of QOM lifecycle is basically non-existant so
please be aware of that when reviewing this series.
The last patch may be wrong, as pointed out by Eduardo, so I marked it as
RFC. It may make sense to drop it.
Changes since v6:
Patch "ppc/e500: Use start-powered-off CPUState property"
Patch "mips/cps: Use start-powered-off CPUState property"
- Moved setting of start-powered-off property and qdev_realize_and_unref()
to right after object_new(machine->cpu_type).
- Dropped Philippe's Reviewed-by due to this change.
Patch "sparc/sun4m: Remove main_cpu_reset()"
- Dropped.
Patch "sparc/sun4m: Don't set cs->halted = 0 in main_cpu_reset()"
- New patch.
Patch "sparc/sun4m: Use start-powered-off CPUState property"
- Merged secondary_cpu_reset() with main_cpu_reset().
- Dropped Philippe's Reviewed-by due to this change.
Changes since v5:
Patch "ppc/e500: Use start-powered-off CPUState property"
Patch "mips/cps: Use start-powered-off CPUState property"
Patch "sparc/sun4m: Remove main_cpu_reset()"
Patch "target/s390x: Use start-powered-off CPUState property"
- Added Philippe's Reviewed-by.
Patch "sparc/sun4m: Use start-powered-off CPUState property"
- Move call to qdev_realize_and_unref() right after object_property_set_bool(),
as suggested by Philippe.
Changes since v4:
Patch "ppc/e500: Use start-powered-off CPUState property"
Patch "sparc/sun4m: Use start-powered-off CPUState property"
- Use qdev_realize_and_unref() instead of qdev_realize(), as suggested
by Igor.
- Pass &error_fatal to qdev_realize_and_unref() instead of manually
reporting the error and exiting QEMU, as suggested by Philippe.
- Changed object_property_set_bool() to use &error_fatal instead of
&error_abort.
Patch "mips/cps: Use start-powered-off CPUState property"
- Use qdev_realize_and_unref() instead of qdev_realize(), as suggested
by Igor.
- Use existing errp argument to propagate error back to the caller, as
suggested by Philippe.
- Changed object_property_set_bool() to use existing errp argument to
propagate error back to the caller instead of using &error_abort.
Changes since v3:
General:
- Added David's, Greg's and Cornelia's Reviewed-by and Acked-by to some
of the patches.
- Rebased on top of dgibson/ppc-for-5.2.
Patch "ppc/e500: Use start-powered-off CPUState property"
Patch "mips/cps: Use start-powered-off CPUState property"
Patch "sparc/sun4m: Use start-powered-off CPUState property"
- Initialize CPU object with object_new() and qdev_realize() instead
of cpu_create().
- Removed Reviewed-by's and Acked-by's from these patches because of
these changes.
Changes since v2:
General:
- Added Philippe's Reviewed-by to some of the patches.
Patch "ppc/spapr: Use start-powered-off CPUState property"
- Set the CPUState::start_powered_off variable directly rather than using
object_property_set_bool(). Suggested by Philippe.
Patch "sparc/sun4m: Remove main_cpu_reset()"
- New patch. Suggested by Philippe.
Patch "sparc/sun4m: Use start-powered-off CPUState property"
- Remove secondary_cpu_reset(). Suggested by Philippe.
- Remove setting of `cs->halted = 1` from cpu_devinit(). Suggested by Philippe.
Patch "Don't set CPUState::halted in cpu_devinit()"
- Squashed into previous patch. Suggested by Philippe.
Patch "sparc/sun4m: Use one cpu_reset() function for main and secondary CPUs"
- Dropped.
Patch "target/s390x: Use start-powered-off CPUState property"
- Set the CPUState::start_powered_off variable directly rather than using
object_property_set_bool(). Suggested by Philippe.
- Mention in the commit message Eduardo's observation that before this
patch, the code didn't set cs->halted on reset.
Thiago Jung Bauermann (8):
target/arm: Move start-powered-off property to generic CPUState
target/arm: Move setting of CPU halted state to generic code
ppc/spapr: Use start-powered-off CPUState property
ppc/e500: Use start-powered-off CPUState property
mips/cps: Use start-powered-off CPUState property
sparc/sun4m: Don't set cs->halted = 0 in main_cpu_reset()
sparc/sun4m: Use start-powered-off CPUState property
target/s390x: Use start-powered-off CPUState property
exec.c | 1 +
hw/core/cpu.c | 2 +-
hw/mips/cps.c | 15 +++++++++++----
hw/ppc/e500.c | 13 +++++++++----
hw/ppc/spapr_cpu_core.c | 10 +++++-----
hw/sparc/sun4m.c | 26 ++++++--------------------
include/hw/core/cpu.h | 4 ++++
target/arm/cpu.c | 4 +---
target/arm/cpu.h | 3 ---
target/arm/kvm32.c | 2 +-
target/arm/kvm64.c | 2 +-
target/s390x/cpu.c | 2 +-
12 files changed, 41 insertions(+), 43 deletions(-)
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v7 1/8] target/arm: Move start-powered-off property to generic CPUState
2020-08-26 5:55 [PATCH v7 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
@ 2020-08-26 5:55 ` Thiago Jung Bauermann
2020-08-26 5:55 ` [PATCH v7 2/8] target/arm: Move setting of CPU halted state to generic code Thiago Jung Bauermann
` (7 subsequent siblings)
8 siblings, 0 replies; 16+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-26 5:55 UTC (permalink / raw)
To: qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Aleksandar Markovic, Thomas Huth, David Gibson,
Philippe Mathieu-Daudé, Artyom Tarasenko, Aleksandar Rikalo,
Eduardo Habkost, Greg Kurz, qemu-s390x, qemu-arm,
Cédric Le Goater, Paolo Bonzini, Alex Bennée,
Richard Henderson, Cornelia Huck, Thiago Jung Bauermann,
Igor Mammedov, Aurelien Jarno
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] 16+ messages in thread
* [PATCH v7 2/8] target/arm: Move setting of CPU halted state to generic code
2020-08-26 5:55 [PATCH v7 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
2020-08-26 5:55 ` [PATCH v7 1/8] target/arm: Move start-powered-off property to generic CPUState Thiago Jung Bauermann
@ 2020-08-26 5:55 ` Thiago Jung Bauermann
2020-08-26 5:55 ` [PATCH v7 3/8] ppc/spapr: Use start-powered-off CPUState property Thiago Jung Bauermann
` (6 subsequent siblings)
8 siblings, 0 replies; 16+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-26 5:55 UTC (permalink / raw)
To: qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Aleksandar Markovic, Thomas Huth, David Gibson,
Philippe Mathieu-Daudé, Artyom Tarasenko, Aleksandar Rikalo,
Eduardo Habkost, Greg Kurz, qemu-s390x, qemu-arm,
Cédric Le Goater, Paolo Bonzini, Alex Bennée,
Richard Henderson, Cornelia Huck, Thiago Jung Bauermann,
Igor Mammedov, Aurelien Jarno
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] 16+ messages in thread
* [PATCH v7 3/8] ppc/spapr: Use start-powered-off CPUState property
2020-08-26 5:55 [PATCH v7 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
2020-08-26 5:55 ` [PATCH v7 1/8] target/arm: Move start-powered-off property to generic CPUState Thiago Jung Bauermann
2020-08-26 5:55 ` [PATCH v7 2/8] target/arm: Move setting of CPU halted state to generic code Thiago Jung Bauermann
@ 2020-08-26 5:55 ` Thiago Jung Bauermann
2020-08-26 5:55 ` [PATCH v7 4/8] ppc/e500: " Thiago Jung Bauermann
` (5 subsequent siblings)
8 siblings, 0 replies; 16+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-26 5:55 UTC (permalink / raw)
To: qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Aleksandar Markovic, Thomas Huth, David Gibson,
Philippe Mathieu-Daudé, Artyom Tarasenko, Aleksandar Rikalo,
Eduardo Habkost, Greg Kurz, qemu-s390x, qemu-arm,
Cédric Le Goater, Paolo Bonzini, Alex Bennée,
Richard Henderson, Cornelia Huck, Thiago Jung Bauermann,
Igor Mammedov, Aurelien Jarno
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] 16+ messages in thread
* [PATCH v7 4/8] ppc/e500: Use start-powered-off CPUState property
2020-08-26 5:55 [PATCH v7 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
` (2 preceding siblings ...)
2020-08-26 5:55 ` [PATCH v7 3/8] ppc/spapr: Use start-powered-off CPUState property Thiago Jung Bauermann
@ 2020-08-26 5:55 ` Thiago Jung Bauermann
2020-09-01 9:51 ` Philippe Mathieu-Daudé
2020-08-26 5:55 ` [PATCH v7 5/8] mips/cps: " Thiago Jung Bauermann
` (4 subsequent siblings)
8 siblings, 1 reply; 16+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-26 5:55 UTC (permalink / raw)
To: qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Aleksandar Markovic, Thomas Huth, David Gibson,
Philippe Mathieu-Daudé, Artyom Tarasenko, Aleksandar Rikalo,
Eduardo Habkost, Greg Kurz, qemu-s390x, qemu-arm,
Cédric Le Goater, Paolo Bonzini, Alex Bennée,
Richard Henderson, Cornelia Huck, Thiago Jung Bauermann,
Igor Mammedov, Aurelien Jarno
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 | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
index ab9884e315..ae39b9358e 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);
@@ -875,6 +872,14 @@ void ppce500_init(MachineState *machine)
exit(1);
}
+ /*
+ * 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", i != 0,
+ &error_fatal);
+ qdev_realize_and_unref(DEVICE(cs), NULL, &error_fatal);
+
if (!firstenv) {
firstenv = env;
}
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v7 5/8] mips/cps: Use start-powered-off CPUState property
2020-08-26 5:55 [PATCH v7 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
` (3 preceding siblings ...)
2020-08-26 5:55 ` [PATCH v7 4/8] ppc/e500: " Thiago Jung Bauermann
@ 2020-08-26 5:55 ` Thiago Jung Bauermann
2020-09-01 9:52 ` Philippe Mathieu-Daudé
2020-08-26 5:55 ` [PATCH v7 6/8] sparc/sun4m: Don't set cs->halted = 0 in main_cpu_reset() Thiago Jung Bauermann
` (3 subsequent siblings)
8 siblings, 1 reply; 16+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-26 5:55 UTC (permalink / raw)
To: qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Aleksandar Markovic, Thomas Huth, David Gibson,
Philippe Mathieu-Daudé, Artyom Tarasenko, Aleksandar Rikalo,
Eduardo Habkost, Greg Kurz, qemu-s390x, qemu-arm,
Cédric Le Goater, Paolo Bonzini, Alex Bennée,
Richard Henderson, Cornelia Huck, Thiago Jung Bauermann,
Igor Mammedov, Aurelien Jarno
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 | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/hw/mips/cps.c b/hw/mips/cps.c
index 615e1a1ad2..23c0f87e41 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,17 @@ 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));
+
+ /* All VPs are halted on reset. Leave powering up to CPC. */
+ if (!object_property_set_bool(OBJECT(cpu), "start-powered-off", true,
+ errp)) {
+ return;
+ }
+
+ if (!qdev_realize_and_unref(DEVICE(cpu), NULL, errp)) {
+ return;
+ }
/* Init internal devices */
cpu_mips_irq_init_cpu(cpu);
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v7 6/8] sparc/sun4m: Don't set cs->halted = 0 in main_cpu_reset()
2020-08-26 5:55 [PATCH v7 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
` (4 preceding siblings ...)
2020-08-26 5:55 ` [PATCH v7 5/8] mips/cps: " Thiago Jung Bauermann
@ 2020-08-26 5:55 ` Thiago Jung Bauermann
2020-09-01 9:53 ` Philippe Mathieu-Daudé
2020-08-26 5:55 ` [PATCH v7 7/8] sparc/sun4m: Use start-powered-off CPUState property Thiago Jung Bauermann
` (2 subsequent siblings)
8 siblings, 1 reply; 16+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-26 5:55 UTC (permalink / raw)
To: qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Aleksandar Markovic, Thomas Huth, David Gibson,
Philippe Mathieu-Daudé, Artyom Tarasenko, Aleksandar Rikalo,
Eduardo Habkost, Greg Kurz, qemu-s390x, qemu-arm,
Cédric Le Goater, Paolo Bonzini, Alex Bennée,
Richard Henderson, Cornelia Huck, Thiago Jung Bauermann,
Igor Mammedov, Aurelien Jarno
We rely on cpu_common_reset() to set cs->halted to 0, it's redundant to do
it in main_cpu_reset().
Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com>
---
hw/sparc/sun4m.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c
index cf7dfa4af5..7484aa4438 100644
--- a/hw/sparc/sun4m.c
+++ b/hw/sparc/sun4m.c
@@ -224,7 +224,6 @@ static void main_cpu_reset(void *opaque)
CPUState *cs = CPU(cpu);
cpu_reset(cs);
- cs->halted = 0;
}
static void secondary_cpu_reset(void *opaque)
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v7 7/8] sparc/sun4m: Use start-powered-off CPUState property
2020-08-26 5:55 [PATCH v7 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
` (5 preceding siblings ...)
2020-08-26 5:55 ` [PATCH v7 6/8] sparc/sun4m: Don't set cs->halted = 0 in main_cpu_reset() Thiago Jung Bauermann
@ 2020-08-26 5:55 ` Thiago Jung Bauermann
2020-09-01 9:54 ` Philippe Mathieu-Daudé
2020-08-26 5:55 ` [PATCH v7 8/8] target/s390x: " Thiago Jung Bauermann
2020-08-31 6:50 ` [PATCH v7 0/8] Generalize start-powered-off property from ARM David Gibson
8 siblings, 1 reply; 16+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-26 5:55 UTC (permalink / raw)
To: qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Aleksandar Markovic, Thomas Huth, David Gibson,
Philippe Mathieu-Daudé, Artyom Tarasenko, Aleksandar Rikalo,
Eduardo Habkost, Greg Kurz, qemu-s390x, qemu-arm,
Cédric Le Goater, Paolo Bonzini, Alex Bennée,
Richard Henderson, Cornelia Huck, Thiago Jung Bauermann,
Igor Mammedov, Aurelien Jarno
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.
Now secondary_cpu_reset() becomes equivalent to main_cpu_reset() so rename
the function to sun4m_cpu_reset().
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 | 25 ++++++-------------------
1 file changed, 6 insertions(+), 19 deletions(-)
diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c
index 7484aa4438..6bf9d27d8a 100644
--- a/hw/sparc/sun4m.c
+++ b/hw/sparc/sun4m.c
@@ -218,7 +218,7 @@ static void dummy_cpu_set_irq(void *opaque, int irq, int level)
{
}
-static void main_cpu_reset(void *opaque)
+static void sun4m_cpu_reset(void *opaque)
{
SPARCCPU *cpu = opaque;
CPUState *cs = CPU(cpu);
@@ -226,15 +226,6 @@ static void main_cpu_reset(void *opaque)
cpu_reset(cs);
}
-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) {
@@ -818,21 +809,17 @@ 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(main_cpu_reset, cpu);
- } else {
- qemu_register_reset(secondary_cpu_reset, cpu);
- cs = CPU(cpu);
- cs->halted = 1;
- }
+ qemu_register_reset(sun4m_cpu_reset, cpu);
+ object_property_set_bool(OBJECT(cpu), "start-powered-off", id != 0,
+ &error_fatal);
+ 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;
}
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v7 8/8] target/s390x: Use start-powered-off CPUState property
2020-08-26 5:55 [PATCH v7 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
` (6 preceding siblings ...)
2020-08-26 5:55 ` [PATCH v7 7/8] sparc/sun4m: Use start-powered-off CPUState property Thiago Jung Bauermann
@ 2020-08-26 5:55 ` Thiago Jung Bauermann
2020-08-31 6:50 ` [PATCH v7 0/8] Generalize start-powered-off property from ARM David Gibson
8 siblings, 0 replies; 16+ messages in thread
From: Thiago Jung Bauermann @ 2020-08-26 5:55 UTC (permalink / raw)
To: qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Aleksandar Markovic, Thomas Huth, David Gibson,
Philippe Mathieu-Daudé, Artyom Tarasenko, Aleksandar Rikalo,
Eduardo Habkost, Greg Kurz, qemu-s390x, qemu-arm,
Cédric Le Goater, Paolo Bonzini, Alex Bennée,
Richard Henderson, Cornelia Huck, Thiago Jung Bauermann,
Igor Mammedov, Aurelien Jarno
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>
Reviewed-by: Philippe Mathieu-Daudé <philmd@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] 16+ messages in thread
* Re: [PATCH v7 0/8] Generalize start-powered-off property from ARM
2020-08-26 5:55 [PATCH v7 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
` (7 preceding siblings ...)
2020-08-26 5:55 ` [PATCH v7 8/8] target/s390x: " Thiago Jung Bauermann
@ 2020-08-31 6:50 ` David Gibson
2020-09-01 0:50 ` Thiago Jung Bauermann
8 siblings, 1 reply; 16+ messages in thread
From: David Gibson @ 2020-08-31 6:50 UTC (permalink / raw)
To: Thiago Jung Bauermann
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Aleksandar Markovic, Thomas Huth, Philippe Mathieu-Daudé,
Artyom Tarasenko, Aleksandar Rikalo, Eduardo Habkost, Greg Kurz,
qemu-s390x, qemu-arm, Cédric Le Goater, Paolo Bonzini,
Alex Bennée, Richard Henderson, Cornelia Huck, qemu-ppc,
Igor Mammedov, Aurelien Jarno
[-- Attachment #1: Type: text/plain, Size: 7022 bytes --]
On Wed, Aug 26, 2020 at 02:55:27AM -0300, Thiago Jung Bauermann wrote:
> This version fixes `make check` failures in ppc/e500.c, mips/cps.c and
> sparc/sun4m.c. This was done by moving the qdev_realize_and_unref() call as
> close as possible to the object_new() call, in order to keep the CPU object
> construction as similar as possible to the earlier version which used
> cpu_create().
>
> I also had to change the patch which removed the main_cpu_reset() function
> from sparc/sun4m.c. It was causing a `make check` failure but I can't
> really explain why. See this message for a few more details:
>
> https://lists.nongnu.org/archive/html/qemu-ppc/2020-08/msg00419.html
>
> I dropped the Reviewed-by's on the changed patches because of these
> changes.
>
> Original cover letter below, followed by changelog:
>
> The ARM code has a start-powered-off property in ARMCPU, which is a
> subclass of CPUState. This property causes arm_cpu_reset() to set
> CPUState::halted to 1, signalling that the CPU should start in a halted
> state. Other architectures also have code which aim to achieve the same
> effect, but without using a property.
>
> The ppc/spapr version has a bug where QEMU does a KVM_RUN on the vcpu
> before cs->halted is set to 1, causing the vcpu to run while it's still in
> an unitialized state (more details in patch 3).
>
> Peter Maydell mentioned the ARM start-powered-off property and
> Eduardo Habkost suggested making it generic, so this patch series does
> that, for all cases which I was able to find via grep in the code.
>
> The only problem is that I was only able to test these changes on a ppc64le
> pseries KVM guest, so except for patches 2 and 3, all others are only
> build-tested. Also, my grasp of QOM lifecycle is basically non-existant so
> please be aware of that when reviewing this series.
>
> The last patch may be wrong, as pointed out by Eduardo, so I marked it as
> RFC. It may make sense to drop it.
Applied to ppc-for-5.2, thanks.
> Changes since v6:
>
> Patch "ppc/e500: Use start-powered-off CPUState property"
> Patch "mips/cps: Use start-powered-off CPUState property"
> - Moved setting of start-powered-off property and qdev_realize_and_unref()
> to right after object_new(machine->cpu_type).
> - Dropped Philippe's Reviewed-by due to this change.
>
> Patch "sparc/sun4m: Remove main_cpu_reset()"
> - Dropped.
>
> Patch "sparc/sun4m: Don't set cs->halted = 0 in main_cpu_reset()"
> - New patch.
>
> Patch "sparc/sun4m: Use start-powered-off CPUState property"
> - Merged secondary_cpu_reset() with main_cpu_reset().
> - Dropped Philippe's Reviewed-by due to this change.
>
> Changes since v5:
>
> Patch "ppc/e500: Use start-powered-off CPUState property"
> Patch "mips/cps: Use start-powered-off CPUState property"
> Patch "sparc/sun4m: Remove main_cpu_reset()"
> Patch "target/s390x: Use start-powered-off CPUState property"
> - Added Philippe's Reviewed-by.
>
> Patch "sparc/sun4m: Use start-powered-off CPUState property"
> - Move call to qdev_realize_and_unref() right after object_property_set_bool(),
> as suggested by Philippe.
>
> Changes since v4:
>
> Patch "ppc/e500: Use start-powered-off CPUState property"
> Patch "sparc/sun4m: Use start-powered-off CPUState property"
> - Use qdev_realize_and_unref() instead of qdev_realize(), as suggested
> by Igor.
> - Pass &error_fatal to qdev_realize_and_unref() instead of manually
> reporting the error and exiting QEMU, as suggested by Philippe.
> - Changed object_property_set_bool() to use &error_fatal instead of
> &error_abort.
>
> Patch "mips/cps: Use start-powered-off CPUState property"
> - Use qdev_realize_and_unref() instead of qdev_realize(), as suggested
> by Igor.
> - Use existing errp argument to propagate error back to the caller, as
> suggested by Philippe.
> - Changed object_property_set_bool() to use existing errp argument to
> propagate error back to the caller instead of using &error_abort.
>
> Changes since v3:
>
> General:
> - Added David's, Greg's and Cornelia's Reviewed-by and Acked-by to some
> of the patches.
> - Rebased on top of dgibson/ppc-for-5.2.
>
> Patch "ppc/e500: Use start-powered-off CPUState property"
> Patch "mips/cps: Use start-powered-off CPUState property"
> Patch "sparc/sun4m: Use start-powered-off CPUState property"
> - Initialize CPU object with object_new() and qdev_realize() instead
> of cpu_create().
> - Removed Reviewed-by's and Acked-by's from these patches because of
> these changes.
>
> Changes since v2:
>
> General:
> - Added Philippe's Reviewed-by to some of the patches.
>
> Patch "ppc/spapr: Use start-powered-off CPUState property"
> - Set the CPUState::start_powered_off variable directly rather than using
> object_property_set_bool(). Suggested by Philippe.
>
> Patch "sparc/sun4m: Remove main_cpu_reset()"
> - New patch. Suggested by Philippe.
>
> Patch "sparc/sun4m: Use start-powered-off CPUState property"
> - Remove secondary_cpu_reset(). Suggested by Philippe.
> - Remove setting of `cs->halted = 1` from cpu_devinit(). Suggested by Philippe.
>
> Patch "Don't set CPUState::halted in cpu_devinit()"
> - Squashed into previous patch. Suggested by Philippe.
>
> Patch "sparc/sun4m: Use one cpu_reset() function for main and secondary CPUs"
> - Dropped.
>
> Patch "target/s390x: Use start-powered-off CPUState property"
> - Set the CPUState::start_powered_off variable directly rather than using
> object_property_set_bool(). Suggested by Philippe.
> - Mention in the commit message Eduardo's observation that before this
> patch, the code didn't set cs->halted on reset.
>
> Thiago Jung Bauermann (8):
> target/arm: Move start-powered-off property to generic CPUState
> target/arm: Move setting of CPU halted state to generic code
> ppc/spapr: Use start-powered-off CPUState property
> ppc/e500: Use start-powered-off CPUState property
> mips/cps: Use start-powered-off CPUState property
> sparc/sun4m: Don't set cs->halted = 0 in main_cpu_reset()
> sparc/sun4m: Use start-powered-off CPUState property
> target/s390x: Use start-powered-off CPUState property
>
> exec.c | 1 +
> hw/core/cpu.c | 2 +-
> hw/mips/cps.c | 15 +++++++++++----
> hw/ppc/e500.c | 13 +++++++++----
> hw/ppc/spapr_cpu_core.c | 10 +++++-----
> hw/sparc/sun4m.c | 26 ++++++--------------------
> include/hw/core/cpu.h | 4 ++++
> target/arm/cpu.c | 4 +---
> target/arm/cpu.h | 3 ---
> target/arm/kvm32.c | 2 +-
> target/arm/kvm64.c | 2 +-
> target/s390x/cpu.c | 2 +-
> 12 files changed, 41 insertions(+), 43 deletions(-)
>
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v7 0/8] Generalize start-powered-off property from ARM
2020-08-31 6:50 ` [PATCH v7 0/8] Generalize start-powered-off property from ARM David Gibson
@ 2020-09-01 0:50 ` Thiago Jung Bauermann
0 siblings, 0 replies; 16+ messages in thread
From: Thiago Jung Bauermann @ 2020-09-01 0:50 UTC (permalink / raw)
To: David Gibson
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Aleksandar Markovic, Thomas Huth, Philippe Mathieu-Daudé,
Artyom Tarasenko, Aleksandar Rikalo, Eduardo Habkost, Greg Kurz,
qemu-s390x, qemu-arm, Cédric Le Goater, Paolo Bonzini,
Alex Bennée, Richard Henderson, Cornelia Huck, qemu-ppc,
Igor Mammedov, Aurelien Jarno
David Gibson <david@gibson.dropbear.id.au> writes:
> On Wed, Aug 26, 2020 at 02:55:27AM -0300, Thiago Jung Bauermann wrote:
>> This version fixes `make check` failures in ppc/e500.c, mips/cps.c and
>> sparc/sun4m.c. This was done by moving the qdev_realize_and_unref() call as
>> close as possible to the object_new() call, in order to keep the CPU object
>> construction as similar as possible to the earlier version which used
>> cpu_create().
>>
>> I also had to change the patch which removed the main_cpu_reset() function
>> from sparc/sun4m.c. It was causing a `make check` failure but I can't
>> really explain why. See this message for a few more details:
>>
>> https://lists.nongnu.org/archive/html/qemu-ppc/2020-08/msg00419.html
>>
>> I dropped the Reviewed-by's on the changed patches because of these
>> changes.
>>
>> Original cover letter below, followed by changelog:
>>
>> The ARM code has a start-powered-off property in ARMCPU, which is a
>> subclass of CPUState. This property causes arm_cpu_reset() to set
>> CPUState::halted to 1, signalling that the CPU should start in a halted
>> state. Other architectures also have code which aim to achieve the same
>> effect, but without using a property.
>>
>> The ppc/spapr version has a bug where QEMU does a KVM_RUN on the vcpu
>> before cs->halted is set to 1, causing the vcpu to run while it's still in
>> an unitialized state (more details in patch 3).
>>
>> Peter Maydell mentioned the ARM start-powered-off property and
>> Eduardo Habkost suggested making it generic, so this patch series does
>> that, for all cases which I was able to find via grep in the code.
>>
>> The only problem is that I was only able to test these changes on a ppc64le
>> pseries KVM guest, so except for patches 2 and 3, all others are only
>> build-tested. Also, my grasp of QOM lifecycle is basically non-existant so
>> please be aware of that when reviewing this series.
>>
>> The last patch may be wrong, as pointed out by Eduardo, so I marked it as
>> RFC. It may make sense to drop it.
>
> Applied to ppc-for-5.2, thanks.
Thank you!
--
Thiago Jung Bauermann
IBM Linux Technology Center
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v7 4/8] ppc/e500: Use start-powered-off CPUState property
2020-08-26 5:55 ` [PATCH v7 4/8] ppc/e500: " Thiago Jung Bauermann
@ 2020-09-01 9:51 ` Philippe Mathieu-Daudé
2020-09-01 18:39 ` Thiago Jung Bauermann
0 siblings, 1 reply; 16+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-09-01 9:51 UTC (permalink / raw)
To: Thiago Jung Bauermann, qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Aleksandar Markovic, Thomas Huth, David Gibson, Artyom Tarasenko,
Aleksandar Rikalo, Eduardo Habkost, Greg Kurz, qemu-s390x,
qemu-arm, Cédric Le Goater, Paolo Bonzini, Alex Bennée,
Richard Henderson, Cornelia Huck, Igor Mammedov, Aurelien Jarno
On 8/26/20 7:55 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>
> ---
> hw/ppc/e500.c | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v7 5/8] mips/cps: Use start-powered-off CPUState property
2020-08-26 5:55 ` [PATCH v7 5/8] mips/cps: " Thiago Jung Bauermann
@ 2020-09-01 9:52 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 16+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-09-01 9:52 UTC (permalink / raw)
To: Thiago Jung Bauermann, qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Aleksandar Markovic, Thomas Huth, David Gibson, Artyom Tarasenko,
Aleksandar Rikalo, Eduardo Habkost, Greg Kurz, qemu-s390x,
qemu-arm, Cédric Le Goater, Paolo Bonzini, Alex Bennée,
Richard Henderson, Cornelia Huck, Igor Mammedov, Aurelien Jarno
On 8/26/20 7:55 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 | 15 +++++++++++----
> 1 file changed, 11 insertions(+), 4 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v7 6/8] sparc/sun4m: Don't set cs->halted = 0 in main_cpu_reset()
2020-08-26 5:55 ` [PATCH v7 6/8] sparc/sun4m: Don't set cs->halted = 0 in main_cpu_reset() Thiago Jung Bauermann
@ 2020-09-01 9:53 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 16+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-09-01 9:53 UTC (permalink / raw)
To: Thiago Jung Bauermann, qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Aleksandar Markovic, Thomas Huth, David Gibson, Artyom Tarasenko,
Aleksandar Rikalo, Eduardo Habkost, Greg Kurz, qemu-s390x,
qemu-arm, Cédric Le Goater, Paolo Bonzini, Alex Bennée,
Richard Henderson, Cornelia Huck, Igor Mammedov, Aurelien Jarno
On 8/26/20 7:55 AM, Thiago Jung Bauermann wrote:
> We rely on cpu_common_reset() to set cs->halted to 0, it's redundant to do
> it in main_cpu_reset().
>
> Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com>
> ---
> hw/sparc/sun4m.c | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c
> index cf7dfa4af5..7484aa4438 100644
> --- a/hw/sparc/sun4m.c
> +++ b/hw/sparc/sun4m.c
> @@ -224,7 +224,6 @@ static void main_cpu_reset(void *opaque)
> CPUState *cs = CPU(cpu);
>
> cpu_reset(cs);
> - cs->halted = 0;
> }
>
> static void secondary_cpu_reset(void *opaque)
>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v7 7/8] sparc/sun4m: Use start-powered-off CPUState property
2020-08-26 5:55 ` [PATCH v7 7/8] sparc/sun4m: Use start-powered-off CPUState property Thiago Jung Bauermann
@ 2020-09-01 9:54 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 16+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-09-01 9:54 UTC (permalink / raw)
To: Thiago Jung Bauermann, qemu-ppc
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Aleksandar Markovic, Thomas Huth, David Gibson, Artyom Tarasenko,
Aleksandar Rikalo, Eduardo Habkost, Greg Kurz, qemu-s390x,
qemu-arm, Cédric Le Goater, Paolo Bonzini, Alex Bennée,
Richard Henderson, Cornelia Huck, Igor Mammedov, Aurelien Jarno
On 8/26/20 7:55 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.
>
> Now secondary_cpu_reset() becomes equivalent to main_cpu_reset() so rename
> the function to sun4m_cpu_reset().
>
> 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 | 25 ++++++-------------------
> 1 file changed, 6 insertions(+), 19 deletions(-)
>
> diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c
> index 7484aa4438..6bf9d27d8a 100644
> --- a/hw/sparc/sun4m.c
> +++ b/hw/sparc/sun4m.c
> @@ -218,7 +218,7 @@ static void dummy_cpu_set_irq(void *opaque, int irq, int level)
> {
> }
>
> -static void main_cpu_reset(void *opaque)
> +static void sun4m_cpu_reset(void *opaque)
> {
> SPARCCPU *cpu = opaque;
> CPUState *cs = CPU(cpu);
> @@ -226,15 +226,6 @@ static void main_cpu_reset(void *opaque)
> cpu_reset(cs);
> }
>
> -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) {
> @@ -818,21 +809,17 @@ 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(main_cpu_reset, cpu);
> - } else {
> - qemu_register_reset(secondary_cpu_reset, cpu);
> - cs = CPU(cpu);
> - cs->halted = 1;
> - }
> + qemu_register_reset(sun4m_cpu_reset, cpu);
> + object_property_set_bool(OBJECT(cpu), "start-powered-off", id != 0,
> + &error_fatal);
> + qdev_realize_and_unref(DEVICE(cpu), NULL, &error_fatal);
It is cleaner to call qemu_register_reset() after realize().
Anyway,
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> *cpu_irqs = qemu_allocate_irqs(cpu_set_irq, cpu, MAX_PILS);
> env->prom_addr = prom_addr;
> }
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v7 4/8] ppc/e500: Use start-powered-off CPUState property
2020-09-01 9:51 ` Philippe Mathieu-Daudé
@ 2020-09-01 18:39 ` Thiago Jung Bauermann
0 siblings, 0 replies; 16+ messages in thread
From: Thiago Jung Bauermann @ 2020-09-01 18:39 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: Peter Maydell, David Hildenbrand, Mark Cave-Ayland, qemu-devel,
Aleksandar Markovic, Thomas Huth, David Gibson, Artyom Tarasenko,
Aleksandar Rikalo, Eduardo Habkost, Greg Kurz, qemu-s390x,
qemu-arm, Cédric Le Goater, Paolo Bonzini, Alex Bennée,
Richard Henderson, Cornelia Huck, qemu-ppc, Igor Mammedov,
Aurelien Jarno
Philippe Mathieu-Daudé <philmd@redhat.com> writes:
> On 8/26/20 7:55 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>
>> ---
>> hw/ppc/e500.c | 13 +++++++++----
>> 1 file changed, 9 insertions(+), 4 deletions(-)
>
> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Thanks!
--
Thiago Jung Bauermann
IBM Linux Technology Center
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2020-09-01 18:58 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-08-26 5:55 [PATCH v7 0/8] Generalize start-powered-off property from ARM Thiago Jung Bauermann
2020-08-26 5:55 ` [PATCH v7 1/8] target/arm: Move start-powered-off property to generic CPUState Thiago Jung Bauermann
2020-08-26 5:55 ` [PATCH v7 2/8] target/arm: Move setting of CPU halted state to generic code Thiago Jung Bauermann
2020-08-26 5:55 ` [PATCH v7 3/8] ppc/spapr: Use start-powered-off CPUState property Thiago Jung Bauermann
2020-08-26 5:55 ` [PATCH v7 4/8] ppc/e500: " Thiago Jung Bauermann
2020-09-01 9:51 ` Philippe Mathieu-Daudé
2020-09-01 18:39 ` Thiago Jung Bauermann
2020-08-26 5:55 ` [PATCH v7 5/8] mips/cps: " Thiago Jung Bauermann
2020-09-01 9:52 ` Philippe Mathieu-Daudé
2020-08-26 5:55 ` [PATCH v7 6/8] sparc/sun4m: Don't set cs->halted = 0 in main_cpu_reset() Thiago Jung Bauermann
2020-09-01 9:53 ` Philippe Mathieu-Daudé
2020-08-26 5:55 ` [PATCH v7 7/8] sparc/sun4m: Use start-powered-off CPUState property Thiago Jung Bauermann
2020-09-01 9:54 ` Philippe Mathieu-Daudé
2020-08-26 5:55 ` [PATCH v7 8/8] target/s390x: " Thiago Jung Bauermann
2020-08-31 6:50 ` [PATCH v7 0/8] Generalize start-powered-off property from ARM David Gibson
2020-09-01 0:50 ` Thiago Jung Bauermann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).