12286f39d2
- Include upstream patches designated as stable material and reviewed for applicability to include here. NOTE that the PIIX4 patch has migration implications: the change will also be applied to the SLE-15-SP2 qemu, and a live migration from that version to this SLE-15-SP3 qemu would require this patch to be applied for a successful migration if PIIX4 southbridge is used in the machine emulation (x86 i440fx) block-rbd-fix-memory-leak-in-qemu_rbd_co.patch block-rbd-Fix-memory-leak-in-qemu_rbd_co.patch cpu-core-Fix-help-of-CPU-core-device-typ.patch hw-arm-virt-acpi-build-Fix-GSIV-values-o.patch hw-block-fdc-Fix-fallback-property-on-sy.patch hw-isa-Kconfig-Add-missing-dependency-VI.patch hw-isa-piix4-Migrate-Reset-Control-Regis.patch hw-virtio-pci-Added-AER-capability.patch hw-virtio-pci-Added-counter-for-pcie-cap.patch s390x-css-report-errors-from-ccw_dstream.patch target-xtensa-fix-meson.build-rule-for-x.patch util-fix-use-after-free-in-module_load_o.patch virtio-pci-compat-page-aligned-ATS.patch OBS-URL: https://build.opensuse.org/request/show/885459 OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=634
61 lines
2.3 KiB
Diff
61 lines
2.3 KiB
Diff
From: Greg Kurz <groug@kaod.org>
|
|
Date: Fri, 9 Apr 2021 18:03:39 +0200
|
|
Subject: cpu/core: Fix "help" of CPU core device types
|
|
|
|
Git-commit: 0b47ec4b95ad1952e55e639711d442f8ec6e1345
|
|
|
|
Calling qdev_get_machine() from a QOM instance_init function is
|
|
fragile because we can't be sure the machine object actually
|
|
exists. And this happens to break when passing ",help" on the
|
|
command line to get the list of properties for a CPU core
|
|
device types :
|
|
|
|
$ ./qemu-system-ppc64 -device power8_v2.0-spapr-cpu-core,help
|
|
qemu-system-ppc64: ../../hw/core/machine.c:1290:
|
|
qdev_get_machine: Assertion `machine != NULL' failed.
|
|
Aborted (core dumped)
|
|
|
|
This used to work before QEMU 5.0, but commit 3df261b6676b
|
|
unwillingly introduced a subtle regression : the above command
|
|
line needs to create an instance but the instance_init function
|
|
of the base class calls qdev_get_machine() before
|
|
qemu_create_machine() has been called, which is a programming bug.
|
|
|
|
Use current_machine instead. It is okay to skip the setting of
|
|
nr_thread in this case since only its type is displayed.
|
|
|
|
Fixes: 3df261b6676b ("softmmu/vl.c: Handle '-cpu help' and '-device help' before 'no default machine'")
|
|
Reported-by: Thomas Huth <thuth@redhat.com>
|
|
Signed-off-by: Greg Kurz <groug@kaod.org>
|
|
Cc: peter.maydell@linaro.org
|
|
Message-Id: <20210409160339.500167-3-groug@kaod.org>
|
|
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
|
|
Signed-off-by: Bruce Rogers <brogers@suse.com>
|
|
---
|
|
hw/cpu/core.c | 10 ++++++++--
|
|
1 file changed, 8 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/hw/cpu/core.c b/hw/cpu/core.c
|
|
index 92d3b2fbad62cc3dd7656f148bfd..9876075155743d8966a8383412fd 100644
|
|
--- a/hw/cpu/core.c
|
|
+++ b/hw/cpu/core.c
|
|
@@ -66,10 +66,16 @@ static void core_prop_set_nr_threads(Object *obj, Visitor *v, const char *name,
|
|
|
|
static void cpu_core_instance_init(Object *obj)
|
|
{
|
|
- MachineState *ms = MACHINE(qdev_get_machine());
|
|
CPUCore *core = CPU_CORE(obj);
|
|
|
|
- core->nr_threads = ms->smp.threads;
|
|
+ /*
|
|
+ * Only '-device something-cpu-core,help' can get us there before
|
|
+ * the machine has been created. We don't care to set nr_threads
|
|
+ * in this case since it isn't used afterwards.
|
|
+ */
|
|
+ if (current_machine) {
|
|
+ core->nr_threads = current_machine->smp.threads;
|
|
+ }
|
|
}
|
|
|
|
static void cpu_core_class_init(ObjectClass *oc, void *data)
|