On Thu, May 14, 2020 at 01:31:59AM +0000, Peter Chen wrote: > On 20-05-13 14:45:42, Jun Li wrote: > > > > ... > > > Would it make sense to change xhci_plat_remove() to > > > > > > > > > xhci_plat_remove() > > > > > pm_runtime_disable() > > > > > <remove and put both hcd's> > > > > > pm_runtime_set_suspended() > > > > > > > > > or possibly wrapping the remove in a runtime get/put: > > > > > xhci_plat_remove() > > > > > pm_runtime_get_noresume() > > > > > pm_runtime_disable() > > > > > <remove and put both hcd's> > > > > > pm_runtime_set_suspended() > > > > > pm_runtime_put_noidle() > > > > I think it's better to keep runtime active during driver removal, > > how about this: > > > > pm_runtime_get_sync() > > <remove and put both hcd's> > > pm_runtime_disable() > > pm_runtime_put_noidle() > > pm_runtime_set_suspended() > > > > I think it is more reasonable since for some DRD controllers if > DRD core is suspended, access the xHCI register (eg, we remove > xhci-plat-hcd module at the time) may hang the system. Alan & > Mathias, what's your opinion? Jun's suggestion looks good to me. Alan Stern