]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
usb: xhci: Avoid showing errors during surprise removal
authorMario Limonciello <mario.limonciello@amd.com>
Thu, 17 Jul 2025 07:31:05 +0000 (10:31 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 17 Jul 2025 08:53:04 +0000 (10:53 +0200)
When a USB4 dock is unplugged from a system it won't respond to ring
events. The PCI core handles the surprise removal event and notifies
all PCI drivers. The XHCI PCI driver sets a flag that the device is
being removed as well.

When that flag is set don't show messages in the cleanup path for
marking the controller dead.

Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Acked-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Link: https://lore.kernel.org/r/20250717073107.488599-2-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/xhci-ring.c

index 94c9c9271658ecc784ffa2ad1506603c703aeaf3..2b7415dd41702d366f40bdc6facecc2139557374 100644 (file)
@@ -1376,12 +1376,15 @@ static void xhci_kill_endpoint_urbs(struct xhci_hcd *xhci,
  */
 void xhci_hc_died(struct xhci_hcd *xhci)
 {
+       bool notify;
        int i, j;
 
        if (xhci->xhc_state & XHCI_STATE_DYING)
                return;
 
-       xhci_err(xhci, "xHCI host controller not responding, assume dead\n");
+       notify = !(xhci->xhc_state & XHCI_STATE_REMOVING);
+       if (notify)
+               xhci_err(xhci, "xHCI host controller not responding, assume dead\n");
        xhci->xhc_state |= XHCI_STATE_DYING;
 
        xhci_cleanup_command_queue(xhci);
@@ -1395,7 +1398,7 @@ void xhci_hc_died(struct xhci_hcd *xhci)
        }
 
        /* inform usb core hc died if PCI remove isn't already handling it */
-       if (!(xhci->xhc_state & XHCI_STATE_REMOVING))
+       if (notify)
                usb_hc_died(xhci_to_hcd(xhci));
 }