On 1.4.2022 14.59, Henry Lin wrote: > While rebooting, XHCI controller and its bus device will be shut down > in order by .shutdown callback. Stopping roothubs polling in > xhci_shutdown() can prevent XHCI driver from accessing port status > after its bus device shutdown. > > Take PCIe XHCI controller as example, if XHCI driver doesn't stop roothubs > polling, XHCI driver may access PCIe BAR register for port status after > parent PCIe root port driver is shutdown and cause PCIe bus error. > > Signed-off-by: Henry Lin <henryl@xxxxxxxxxx> > --- > drivers/usb/host/xhci.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c > index 2d378543bc3a..e7ae6766220e 100644 > --- a/drivers/usb/host/xhci.c > +++ b/drivers/usb/host/xhci.c > @@ -780,6 +780,14 @@ void xhci_shutdown(struct usb_hcd *hcd) > if (xhci->quirks & XHCI_SPURIOUS_REBOOT) > usb_disable_xhci_ports(to_pci_dev(hcd->self.sysdev)); > > + /* Don't poll the roothubs after shutdown. */ > + xhci_dbg(xhci, "%s: stopping usb%d port polling.\n", > + __func__, hcd->self.busnum); > + clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); > + del_timer_sync(&hcd->rh_timer); > + clear_bit(HCD_FLAG_POLL_RH, &xhci->shared_hcd->flags); > + del_timer_sync(&xhci->shared_hcd->rh_timer); > + > spin_lock_irq(&xhci->lock); > xhci_halt(xhci); > /* Workaround for spurious wakeups at shutdown with HSW */ > Thanks, adding to queue -Mathias