On Sat, 22 Feb 2014, Dan Williams wrote:

> On Fri, Feb 21, 2014 at 1:17 PM, Alan Stern <st...@rowland.harvard.edu> wrote:
> > On Fri, 21 Feb 2014, Dan Williams wrote:
> >
> >> > Round 2: add usb 3 hcd
> >> >
> >> > usb_add_hcd()  // secondary usb3 hcd
> >> >   hcd->self.root_hub = usb_alloc_dev()
> >> >   hcd->driver->reset(hcd) -> xhci_gen_setup()
> >> >     if(primary_hcd) // false
> >> >     ..
> >> >     else
> >> >       pm_runtime_put_noidle(hcd->self.controller) // -1 usage, *
> >> >   register_root_hub(hcd) -> usb_new_device(usb_dev)
> >> >     pm_runtime_set_active(&udev->dev);
> >> >     pm_runtime_get_noresume(&udev->dev);
> >> >     pm_runtime_use_autosuspend(&udev->dev);
> >> >     pm_runtime_enable(&udev->dev);
> >> >     ...
> >> >     pm_runtime_put_sync_autosuspend(&udev->dev); // ok to trigger would
> >> > trigger xhci_suspend if all usages were 0.
> >> >
> >> > *) unnecessary to trigger any suspend as we're just about to register the
> >> > usb3 roothub. but we need to decrement the usage counter.
> >>
> >> Right, but I assume you'd want to hold the reference until after the
> >> hub is registered, otherwise there's still a chance we suspend right
> >> before register.  So I'm saying hold the reference until the
> >> registration process takes its own.
> >
> > To be really safe about it, you should call pm_runtime_get_noresume at
> > the start of xhci_pci_probe, and pm_runtime_put_noidle at the end
> 
> Why _put_noidle?  The fact that we suspend between registrations means
> the controller is getting suspend requests that we will block with
> _get_noresume.  However, once probe is done our final put might be the
> only one to trigger the deferred suspension.  I.e. just worried about
> the case where the controller's usage count is 0, but it remains
> active indefinitely.

Either _put_sync or _put_noidle would be okay.  The reason is because 
the device core always calls pm_request_idle after probing a driver 
(see driver_probe_device()).

> > (as well as in the error return pathways).
> 
> Sounds like an example case for a new devm_pm_runtime_get() api.

Maybe...

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to