On Wed, 2020-07-22 at 19:19 +0300, Maxim Levitsky wrote: > On Wed, 2020-07-22 at 19:17 +0300, Maxim Levitsky wrote: > > 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 <mlevi...@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 > Typo here, forgot to refresh the commit. > > + */ > > + 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, ping.
Best regards, Maxim Levitsky