Changelog: v2: * instead of disabling power control on slot and letting ACPI PCI hotplug module in guest to deal with it, set PCI_EXP_SLTCTL_PWR_ON on PCIe slot from acpi_pcihp_device_plug_cb() when a device plugged into it.
Currently ACPI PCI hotplug is enabled by default for Q35 machine type and overrides native PCIe hotplug. It works as expected when a PCIe device is hotplugged into slot, however the device becomes in-operational after migration. Which is caused by BARs being disabled on target due to powered off status of the slot. Proposed fix turns on power on PCIe slot when a device is hotplugged into it, then that state is migrated and device stays powred on after migration. Tested with (seabios: FC34, Win2012; ovmf: RHEL8) RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=2053584 CC: m...@redhat.com CC: kra...@redhat.com Ref to v1: https://lore.kernel.org/all/20220225100127.78974...@redhat.com/T/ Gitlab link: https://gitlab.com/imammedo/qemu/-/tree/pcie_poweroff_acpi_regression_rhbz2053584_V2 Igor Mammedov (3): pci: expose TYPE_XIO3130_DOWNSTREAM name acpi: pcihp: pcie: set power on cap on parent slot q35: compat: keep hotplugged PCIe device broken after migration for 6.2 and older machine types include/hw/acpi/pcihp.h | 1 + include/hw/pci-bridge/xio3130_downstream.h | 15 +++++++++++++++ include/hw/pci/pcie.h | 1 + hw/acpi/ich9.c | 20 ++++++++++++++++++++ hw/acpi/pcihp.c | 15 ++++++++++++++- hw/core/machine.c | 4 +++- hw/pci-bridge/xio3130_downstream.c | 3 ++- hw/pci/pcie.c | 11 +++++++++++ 8 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 include/hw/pci-bridge/xio3130_downstream.h -- 2.31.1