From: Igor Mammedov <imammedo@redhat.com>
To: qemu-devel@nongnu.org
Cc: mst@redhat.com, anisinha@redhat.com, jusual@redhat.com,
kraxel@redhat.com
Subject: [PATCH] acpi: pcihp: make pending delete expire in 5sec
Date: Mon, 3 Apr 2023 18:16:18 +0200 [thread overview]
Message-ID: <20230403161618.1344414-1-imammedo@redhat.com> (raw)
with Q35 using ACPI PCI hotplug by default, user's request to unplug
device is ignored when it's issued before guest OS has been booted.
And any additional attempt to request device hot-unplug afterwards
results in following error:
"Device XYZ is already in the process of unplug"
arguably it can be considered as a regression introduced by [2],
before which it was possible to issue unplug request multiple
times.
Allowing pending delete expire brings ACPI PCI hotplug on par
with native PCIe unplug behavior [1] which in its turn refers
back to ACPI PCI hotplug ability to repeat unplug requests.
PS:
From ACPI point of view, unplug request sets PCI hotplug status
bit in GPE0 block. However depending on OSPM, status bits may
be retained (Windows) or cleared (Linux) during guest's ACPI
subsystem initialization, and as result Linux guest looses
plug/unplug event (no SCI generated) if plug/unplug has
happend before guest OS initialized GPE registers handling.
I couldn't find any restrictions wrt OPM clearing GPE status
bits ACPI spec.
Hence a fallback approach is to let user repeat unplug request
later at the time when guest OS has booted.
1) 18416c62e3 ("pcie: expire pending delete")
2)
Fixes: cce8944cc9ef ("qdev-monitor: Forbid repeated device_del")
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
---
CC: mst@redhat.com
CC: anisinha@redhat.com
CC: jusual@redhat.com
CC: kraxel@redhat.com
---
hw/acpi/pcihp.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c
index dcfb779a7a..cd4f9fee0a 100644
--- a/hw/acpi/pcihp.c
+++ b/hw/acpi/pcihp.c
@@ -357,6 +357,8 @@ void acpi_pcihp_device_unplug_request_cb(HotplugHandler *hotplug_dev,
* acpi_pcihp_eject_slot() when the operation is completed.
*/
pdev->qdev.pending_deleted_event = true;
+ pdev->qdev.pending_deleted_expires_ms =
+ qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + 5000; /* 5 secs */
s->acpi_pcihp_pci_status[bsel].down |= (1U << slot);
acpi_send_event(DEVICE(hotplug_dev), ACPI_PCI_HOTPLUG_STATUS);
}
--
2.39.1
next reply other threads:[~2023-04-03 16:16 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-03 16:16 Igor Mammedov [this message]
2023-04-03 17:23 ` [PATCH] acpi: pcihp: make pending delete expire in 5sec Michael S. Tsirkin
2023-04-04 7:03 ` Gerd Hoffmann
2023-04-04 7:36 ` Ani Sinha
2023-04-04 12:40 ` Michael S. Tsirkin
2023-04-04 13:56 ` Igor Mammedov
2023-04-04 8:30 ` Igor Mammedov
2023-04-04 10:46 ` Gerd Hoffmann
2023-04-06 11:46 ` Igor Mammedov
2023-04-06 12:01 ` Gerd Hoffmann
2023-04-04 8:28 ` Igor Mammedov
2023-04-04 12:46 ` Michael S. Tsirkin
2023-04-04 14:04 ` Igor Mammedov
2023-04-04 14:10 ` Ani Sinha
2023-04-04 14:40 ` Michael S. Tsirkin
2023-04-04 14:42 ` Michael S. Tsirkin
2023-04-05 7:30 ` Igor Mammedov
2023-04-05 8:32 ` Michael S. Tsirkin
2023-04-05 9:24 ` Igor Mammedov
2023-04-05 9:59 ` Michael S. Tsirkin
2023-04-05 12:03 ` Igor Mammedov
2023-04-05 12:27 ` Michael S. Tsirkin
2023-04-05 12:32 ` Ani Sinha
2023-04-04 14:11 ` Ani Sinha
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230403161618.1344414-1-imammedo@redhat.com \
--to=imammedo@redhat.com \
--cc=anisinha@redhat.com \
--cc=jusual@redhat.com \
--cc=kraxel@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).