On 3/12/19 3:20 PM, Lukas Wunner wrote: > On Tue, Mar 12, 2019 at 03:05:48PM +0300, Sergey Miroshnichenko wrote: >> During the safe removal procedure, a Data Link Layer State Changed event >> may occur after pciehp_power_off_slot(), and it is handled when the slot is >> already set to OFF_STATE. This results in re-enabling the device and makes >> it impossible to actually safely remove it. >> >> Clear out the Presence Detect Changed and Data Link Layer State Changed >> events when the disabled slot has settled down. >> >> It is still possible to re-enable the device if it remains in the slot >> after pressing the Attention Button by pressing it again. >> >> Signed-off-by: Sergey Miroshnichenko > > Reviewed-by: Lukas Wunner > Thank you! > Did this work correctly before v4.19 or is it a regression caused by > d331710ea78f ("PCI: pciehp: Become resilient to missed events")? > Either way, it seems reasonable to backport it to stable and > v4.19 is the earliest that it should apply cleanly to, so: > > Cc: stable@vger.kernel.org # v4.19+ > Yes, that was a regression caused by this commit. I've verified it applies cleanly to v4.19. Best regards, Serge > Thanks a lot for catching this, I wasn't able to test the code paths > which are only exercised if a power controller is present (because > Thunderbolt doesn't have one). > > Lukas > >> --- >> drivers/pci/hotplug/pciehp_ctrl.c | 4 ++++ >> 1 file changed, 4 insertions(+) >> >> diff --git a/drivers/pci/hotplug/pciehp_ctrl.c b/drivers/pci/hotplug/pciehp_ctrl.c >> index 3f3df4c29f6e..905282a8ddaa 100644 >> --- a/drivers/pci/hotplug/pciehp_ctrl.c >> +++ b/drivers/pci/hotplug/pciehp_ctrl.c >> @@ -115,6 +115,10 @@ static void remove_board(struct controller *ctrl, bool safe_removal) >> * removed from the slot/adapter. >> */ >> msleep(1000); >> + >> + /* Ignore link or presence changes caused by power off */ >> + atomic_and(~(PCI_EXP_SLTSTA_DLLSC | PCI_EXP_SLTSTA_PDC), >> + &ctrl->pending_events); >> } >> >> /* turn off Green LED */ >> -- >> 2.20.1