From: Wen Xiong <wenxiong@xxxxxxxxxxxxxxxxxx> We saw "Host halt failed, -110" error when rebooting system/ shutdowning system/kexec constantly. This patch called usb_disconnect() before calling xhci_halt(). usb_disconnect()disconnect the parent and all of its children, clean up hardware state and make sure that hardware is ready to be halted down. Rebooting. [18648.996035] sd 0:2:1:0: [sdb] Synchronizing SCSI cache [18678.831197] mpt3sas_cm1: sending message unit reset !! [18678.832774] mpt3sas_cm1: message unit reset: SUCCESS [18683.900798] mpt3sas_cm0: sending message unit reset !! [18683.902370] mpt3sas_cm0: message unit reset: SUCCESS [18693.921103] xhci_hcd 0005:01:00.0: Host halt failed, -110 [18693.924483] reboot: Restarting system [18861.282906007,5] OPAL: Reboot request... Signed-off-by: Wen Xiong <wenxiong@xxxxxxxxxxxxxxxxxx> Thanks, Wendy --- drivers/usb/host/xhci.c | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-) diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index ee198ea..67fdb0f 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -709,10 +709,17 @@ static void xhci_stop(struct usb_hcd *hcd) static void xhci_shutdown(struct usb_hcd *hcd) { struct xhci_hcd *xhci = hcd_to_xhci(hcd); + struct usb_device *rhdev = hcd->self.root_hub; + + dev_info(hcd->self.controller, "remove, state %x\n", hcd->state); if (xhci->quirks & XHCI_SPURIOUS_REBOOT) usb_disable_xhci_ports(to_pci_dev(hcd->self.sysdev)); + mutex_lock(&usb_bus_idr_lock); + usb_disconnect(&rhdev); + mutex_unlock(&usb_bus_idr_lock); + spin_lock_irq(&xhci->lock); xhci_halt(xhci); /* Workaround for spurious wakeups at shutdown with HSW */ -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html