2940a4b9e3
ACPI PCI hotplug would broken after bridge hotplug and then migration if hotplugged bridge were specified on target at command line. Currently it's not possible since, 'hotplugged' property was made read-only for some time now. The issue would happen due to BSEL being assigned to all bridges during 1st 'reset': source seq: 1. start 'pc' machine => sets BSEL to 0 on pci.0 (host-bridge) 2. hotplug bridge, no bsel is assigned (so far is ok) target seq: 1. start 'pc' machine with -S -device pci-bridge,id=hp_br,hotplugged=on BSEL gets assigned to as follows hp_br: 0 pci.0: 1 as result hotplug requests with migrated AML generated on source would be misdirected to 'hp_br' instead of intended pci.0 While it's not issue at the moment, it's based on implicit assumptions * 'hotplugged' property is read-only * 1st reset happens before QEMU drops into monitor mode which lets add hotplugged on source bridges as hotplugged ones (anything added at that stage counts as hotplugged (yet another assumption)) All of it looks too fragile to me, so lets restrict BSEL only to cold-plugged bridges explicitly. Migration wise it shouldn't break anything since assignment order stays the same: * user can't specify 'hotplugged=on' on CLI * user can't specify 'hotplugged=off' at monitor stage or later on older QEMU versions where 'hotplugged' is RW, hotplug is broken after migration anyways and we cannot do anything to fix that. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Message-Id: <20230112140312.3096331-12-imammedo@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> |
||
---|---|---|
.. | ||
acpi_interface.c | ||
acpi-cpu-hotplug-stub.c | ||
acpi-mem-hotplug-stub.c | ||
acpi-nvdimm-stub.c | ||
acpi-pci-hotplug-stub.c | ||
acpi-stub.c | ||
acpi-x86-stub.c | ||
aml-build-stub.c | ||
aml-build.c | ||
bios-linker-loader.c | ||
core.c | ||
cpu_hotplug.c | ||
cpu.c | ||
cxl-stub.c | ||
cxl.c | ||
erst.c | ||
generic_event_device.c | ||
ghes-stub.c | ||
ghes.c | ||
hmat.c | ||
hmat.h | ||
ich9_tco.c | ||
ich9.c | ||
ipmi-stub.c | ||
ipmi.c | ||
Kconfig | ||
memory_hotplug.c | ||
meson.build | ||
nvdimm.c | ||
pci.c | ||
pcihp.c | ||
piix4.c | ||
tpm.c | ||
trace-events | ||
trace.h | ||
utils.c | ||
viot.c | ||
viot.h | ||
vmgenid.c |