On Thursday, November 08, 2012 12:07:54 PM Alan Stern wrote: > On Thu, 8 Nov 2012, Rafael J. Wysocki wrote:
[...] I'd like to revisit this for a while if you don't mind. > Your revised patch does do the job, except for a few problems. > Namely, while local_pci_probe() and pci_device_remove() are running, > the device _does_ have a driver. Right. > This means that local_pci_probe() should not call pm_runtime_get_sync(), > for example. Doing so would invoke the driver's runtime_resume routine > before calling the driver's probe routine! > > The USB subsystem solves this problem by carefully keeping track of the > state of the device-driver binding: > > Originally the device is UNBOUND. > > At the start of the subsystem's probe routine, the state > changes to BINDING. > > If the probe succeeds then it changes to BOUND; otherwise > it goes back to UNBOUND. > > At the start of the subsystem's remove routine, the state > changes to UNBINDING. At the end it goes to UNBOUND. > > When the state is anything other than BOUND, the subsystem's runtime PM > routines act as though there is no driver. Well, that wouldn't help PCI, because some drivers want to use the pm_runtime_* stuff in their .probe() routines and actually expect it to work. :-) Perhaps we can introduce something like pm_runtime_get[_put]_skip_callbacks() that would treat the device as though it had the power.no_callbacks flag set and use that around the driver's .probe() in the PCI core? Rafael -- I speak only for myself. Rafael J. Wysocki, Intel Open Source Technology Center. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/