qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 1/1] pci/pcie: refuse another hotplug/unplug event if attention b


From: Maxim Levitsky
Subject: [PATCH 1/1] pci/pcie: refuse another hotplug/unplug event if attention button is pending
Date: Wed, 22 Jul 2020 19:17:22 +0300

Curently it is possible to hotplug a device and then immediatly
hotunplug it before the OS notices, and that will result
in missed unplug event since we can only send one attention button event.

Moreover the device will stuck in unplugging state forever.

Error out in such cases and rely on the caller (e.g libvirt) to retry
the unplug a bit later

Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
---
 hw/pci/pcie.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c
index 5b48bae0f6..9e836cf2f4 100644
--- a/hw/pci/pcie.c
+++ b/hw/pci/pcie.c
@@ -402,6 +402,17 @@ static void pcie_cap_slot_plug_common(PCIDevice 
*hotplug_dev, DeviceState *dev,
          */
         error_setg_errno(errp, EBUSY, "slot is electromechanically locked");
     }
+
+    if (sltsta & PCI_EXP_SLTSTA_ABP) {
+        /*
+         * Attention button is pressed, thus we can't send another
+         * hotpplug event
+         */
+        error_setg_errno(errp, EBUSY,
+                         "attention button is already pressed, can't "
+                         "send another hotplug event");
+    }
+
 }
 
 void pcie_cap_slot_pre_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
-- 
2.26.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]