Re: BUG: USB Reset-Resume Mechanism does not work for runtime resume

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

 



On Thu, 6 Mar 2014, Oliver Neukum wrote:

> > > This is extremely tricky, almost academical a question.
> > > We cannot fall back to reset_resume() in this case without
> > > very bad consequences.
> > > If remote wakeup is needed, reset_resume() must not be used.
> > 
> > The only alternative is to logically disconnect the device.  But this 
> > conflicts with the persist_enabled flag.
> 
> In error handling? It seems to me that persist_enabled is a declaration
> of a goal. What the consequences of reaching that
> goal should be is a legitimate question.
> 
> > > It seems to me that the bug in this case is the fallback itself.
> > > From a design viewpoint is probably wrong the unbind a device
> > > in the runtime case. We'd better notify the driver in every case.
> > > If you unbind and rebind you just risk getting into a tight loop.
> > 
> > In this case, turning off the persist flag might help:
> > 
> > 	echo 0 >/sys/bus/usb/devices/.../power/persist
> 
> But in case remote wakeup is not requested the device
> should persist.

Then you're suggesting something like this in finish_port_resume()?

		status = usb_get_status(udev, USB_RECIP_DEVICE, 0, &devstatus);

-		/* If a normal resume failed, try doing a reset-resume */
-		if (status && !udev->reset_resume && udev->persist_enabled) {
+		/*
+		 * If a normal resume failed and remote wakeup is disabled,
+		 * try doing a reset-resume.
+		 */
+		if (status && !udev->reset_resume && !udev->do_remote_wakeup &&
+				udev->persist_enabled) {
			dev_dbg(&udev->dev, "retry with reset-resume\n");
			udev->reset_resume = 1;
			goto retry_reset_resume;

Are there any wakeup-enabled devices that this will mess up?

Alan Stern

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




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux