qemu-e2k/include/hw/pci
Michael S. Tsirkin 2841ab435b pcie: check that slt ctrl changed before deleting
During boot, linux would sometimes overwrites control of a powered off
slot before powering it on. Unfortunately QEMU interprets that as a
power off request and ejects the device.

For example:

/x86_64-softmmu/qemu-system-x86_64 -enable-kvm -S -machine q35  \
    -device pcie-root-port,id=pcie_root_port_0,slot=2,chassis=2,addr=0x2,bus=pcie.0 \
    -monitor stdio disk.qcow2
(qemu)device_add virtio-balloon-pci,id=balloon,bus=pcie_root_port_0
(qemu)cont

Balloon is deleted during guest boot.

To fix, save control beforehand and check that power
or led state actually change before ejecting.

Note: this is more a hack than a solution, ideally we'd
find a better way to detect ejects, or move away
from ejects completely and instead monitor whether
it's safe to delete device due to e.g. its power state.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Tested-by: Igor Mammedov <imammedo@redhat.com>
2019-07-01 09:17:30 -04:00
..
msi.h Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
msix.h Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
pci_bridge.h pci/shpc: perform unplug via the hotplug handler 2018-12-20 11:19:12 -05:00
pci_bus.h pcie: Simplify pci_adjust_config_limit() 2019-05-29 18:00:57 -04:00
pci_host.h pci: Fold host_buses list into PCIHostState functionality 2013-07-07 23:10:57 +03:00
pci_ids.h pci: Move NVIDIA vendor id to the rest of ids 2019-02-22 10:51:31 -05:00
pci_regs.h Supply missing header guards 2019-06-12 13:20:21 +02:00
pci.h pci: Make is_bridge a bool 2019-05-29 18:00:57 -04:00
pcie_aer.h pci: Reduce scope of error injection 2017-05-08 20:32:14 +02:00
pcie_host.h ppc4xx: Add device models found in PPC440 core SoCs 2018-02-16 14:06:07 +11:00
pcie_port.h gen_pcie_root_port: Add ACS (Access Control Services) capability 2019-03-12 22:31:21 -04:00
pcie_regs.h pcie: Add a simple PCIe ACS (Access Control Services) helper function 2019-03-12 22:31:21 -04:00
pcie.h pcie: check that slt ctrl changed before deleting 2019-07-01 09:17:30 -04:00
shpc.h Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
slotid_cap.h Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00