git: 9be42ee6c9c7 - main - pci: Make PCIe Eject timeout configurable
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 02 Apr 2025 20:14:39 UTC
The branch main has been updated by cperciva:
URL: https://cgit.FreeBSD.org/src/commit/?id=9be42ee6c9c741052bdc49f13bc953bf88a24423
commit 9be42ee6c9c741052bdc49f13bc953bf88a24423
Author: Colin Percival <cperciva@FreeBSD.org>
AuthorDate: 2025-03-31 04:08:44 +0000
Commit: Colin Percival <cperciva@FreeBSD.org>
CommitDate: 2025-04-02 20:14:24 +0000
pci: Make PCIe Eject timeout configurable
PCIe mandates a 5 second delay between when the "Attention Button" is
pressed and when the associated device is detached; this is to allow
for the button to be pressed a second time to cancel the ejection. On
some systems this 5 second delay may not be desireable; so introduce a
hw.pci.pcie_hp_detach_timeout sysctl (which can also be set as a loader
tunable) which specifies the timeout in milliseconds (default 5000).
If set to zero, the device is detached immediately.
Reviewed by: jhb
MFC after: 2 weeks
Sponsored by: Amazon
Differential Revision: https://reviews.freebsd.org/D49585
---
sys/dev/pci/pci_pci.c | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/sys/dev/pci/pci_pci.c b/sys/dev/pci/pci_pci.c
index 10133c0c68d9..5e71a376604b 100644
--- a/sys/dev/pci/pci_pci.c
+++ b/sys/dev/pci/pci_pci.c
@@ -800,6 +800,11 @@ SYSCTL_INT(_hw_pci, OID_AUTO, enable_pcie_hp, CTLFLAG_RDTUN,
&pci_enable_pcie_hp, 0,
"Enable support for native PCI-express HotPlug.");
+static sbintime_t pcie_hp_detach_timeout = 5 * SBT_1S;
+SYSCTL_SBINTIME_MSEC(_hw_pci, OID_AUTO, pcie_hp_detach_timeout, CTLFLAG_RWTUN,
+ &pcie_hp_detach_timeout,
+ "Attention Button delay for PCI-express Eject.");
+
static void
pcib_probe_hotplug(struct pcib_softc *sc)
{
@@ -1068,11 +1073,17 @@ pcib_pcie_intr_hotplug(void *arg)
&sc->pcie_ab_task, NULL);
} else if (old_slot_sta & PCIEM_SLOT_STA_PDS) {
/* Only initiate detach sequence if device present. */
- device_printf(dev,
- "Attention Button Pressed: Detaching in 5 seconds\n");
- sc->flags |= PCIB_DETACH_PENDING;
- taskqueue_enqueue_timeout(taskqueue_bus,
- &sc->pcie_ab_task, 5 * hz);
+ if (pcie_hp_detach_timeout != 0) {
+ device_printf(dev,
+ "Attention Button Pressed: Detaching in %ld ms\n",
+ (long)(pcie_hp_detach_timeout / SBT_1MS));
+ sc->flags |= PCIB_DETACH_PENDING;
+ taskqueue_enqueue_timeout_sbt(taskqueue_bus,
+ &sc->pcie_ab_task, pcie_hp_detach_timeout,
+ SBT_1S, 0);
+ } else {
+ sc->flags |= PCIB_DETACHING;
+ }
}
}
if (sc->pcie_slot_sta & PCIEM_SLOT_STA_PFD)