Skip to content

Commit 87befb0

Browse files
author
Myron Stowe
committed
PCI: pciehp: Ignore belated Presence Detect Changed caused by DPC
JIRA: https://issues.redhat.com/browse/RHEL-107597 Upstream Status: bbf10cd commit bbf10cd Author: Lukas Wunner <lukas@wunner.de> Date: Wed Jun 18 16:38:25 2025 +0200 PCI: pciehp: Ignore belated Presence Detect Changed caused by DPC Commit c3be50f ("PCI: pciehp: Ignore Presence Detect Changed caused by DPC") sought to ignore Presence Detect Changed events occurring as a side effect of Downstream Port Containment. The commit awaits recovery from DPC and then clears events which occurred in the meantime. However if the first event seen after DPC is Data Link Layer State Changed, only that event is cleared and not Presence Detect Changed. The object of the commit is thus defeated. That's because pciehp_ist() computes the events to clear based on the local "events" variable instead of "ctrl->pending_events". The former contains the events that had occurred when pciehp_ist() was entered, whereas the latter also contains events that have accumulated while awaiting DPC recovery. In practice, the order of PDC and DLLSC events is arbitrary and the delay in-between can be several milliseconds. So change the logic to always clear PDC events, even if they come after an initial DLLSC event. Fixes: c3be50f ("PCI: pciehp: Ignore Presence Detect Changed caused by DPC") Reported-by: Lương Việt Hoàng <tcm4095@gmail.com> Reported-by: Joel Mathew Thomas <proxy0@tutamail.com> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219765#c165 Signed-off-by: Lukas Wunner <lukas@wunner.de> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Tested-by: Lương Việt Hoàng <tcm4095@gmail.com> Tested-by: Joel Mathew Thomas <proxy0@tutamail.com> Link: https://patch.msgid.link/d9c4286a16253af7e93eaf12e076e3ef3546367a.1750257164.git.lukas@wunner.de Signed-off-by: Myron Stowe <mstowe@redhat.com>
1 parent 6c024fd commit 87befb0

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

drivers/pci/hotplug/pciehp_hpc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -771,7 +771,7 @@ static irqreturn_t pciehp_ist(int irq, void *dev_id)
771771
u16 ignored_events = PCI_EXP_SLTSTA_DLLSC;
772772

773773
if (!ctrl->inband_presence_disabled)
774-
ignored_events |= events & PCI_EXP_SLTSTA_PDC;
774+
ignored_events |= PCI_EXP_SLTSTA_PDC;
775775

776776
events &= ~ignored_events;
777777
pciehp_ignore_link_change(ctrl, pdev, irq, ignored_events);

0 commit comments

Comments
 (0)