回复: [PATCH 1/1] usb: host: xhci-plat: keep runtime active when remove host

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



​
...
> This seems odd,

> I don't understand why pm_runtime_set_suspended() would call pm_runtime_put_sync()?

> I thought pm_runtime_set_suspended() is used to let pm core know the hardware is suspended,

> and inform the parent of this, possibly allowing parent to runtime suspend. 

> Not sure if it's needed in the remove function. 

> It makes sense to allow the parent to suspend, but xhci isn't really suspended.

> Yes is stopped, but we can't resume our way back to a active state.

> 

> Could it be that the runtime suspend call you are seeing is because we are removing all child devices,

> disconnecting and freeing everything, including roothubs and hcd's. 

> Maybe runtime pm should be disabled a bit earlier.

> 

> Currently probe and remove looks like:

> 

> xhci_plat_probe()

> pm_runtime_set_active()

>  pm_runtime_enable()

>   pm_runtime_get_noresume()

 > ...

> pm_runtime_put_noidle()

>   pm_runtime_forbid()

> 

> xhci_plat_remove()

>   <remove and put both hcd's>

>   pm_runtime_set_suspended()

>   pm_runtime_disable()

  

> 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()

thanks
Li Jun

> -Mathias 







[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux