On Wed, 12 Oct 2011, Oliver Neukum wrote:
Am Mittwoch, 12. Oktober 2011, 17:28:06 schrieb Alan Stern:
quoted
quoted
Arguably a driver is the wrong layer to do this.
Are you suggesting the usb_runtime_suspend() should call
usb_mark_last_busy() and pm_runtime_autosuspend() if usb_suspend_both()
returns -EBUSY or -EAGAIN?
Yes.
I just sent a trial patch to Matthew. And after a little checking, I
found the reason for the problem.
Originally usbcore did this automatically. When we switched over to
the runtime PM framework, the PM core did it. But the code to retry
failed autosuspends was removed by Rafael Wysocki in commit
f71648d73c1650b8b4aceb3856bebbde6daa3b86 (PM / Runtime: Remove idle
notification after failing suspend), and the USB subsystem wasn't
updated accordingly. I even Acked that patch -- apparently I had
forgotten about the need for this mechanism.
So it looks like putting it back into usbcore is the right thing to do.
Alan Stern