| From 52200a94d69075f41d8cbc080f8b2a2f7e3aa884 Mon Sep 17 00:00:00 2001 | 
 | From: Sasha Levin <sashal@kernel.org> | 
 | Date: Thu, 17 Jul 2025 10:31:05 +0300 | 
 | Subject: usb: xhci: Avoid showing errors during surprise removal | 
 |  | 
 | From: Mario Limonciello <mario.limonciello@amd.com> | 
 |  | 
 | [ Upstream commit 4b9c60e440525b729ac5f071e00bcee12e0a7e84 ] | 
 |  | 
 | 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> | 
 | Signed-off-by: Sasha Levin <sashal@kernel.org> | 
 | --- | 
 |  drivers/usb/host/xhci-ring.c | 7 +++++-- | 
 |  1 file changed, 5 insertions(+), 2 deletions(-) | 
 |  | 
 | diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c | 
 | index c4880b22f359..c8e1ead0c09e 100644 | 
 | --- a/drivers/usb/host/xhci-ring.c | 
 | +++ b/drivers/usb/host/xhci-ring.c | 
 | @@ -1289,12 +1289,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); | 
 | @@ -1308,7 +1311,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)); | 
 |  } | 
 |   | 
 | --  | 
 | 2.39.5 | 
 |  |