> > > It depends on device. Before the suspend, we tell device it can wakeup > host > > through USB_REQ_SET_FEATURE, but when it really sends wakeup signal, > the host > > does not act which the device has expected. It may lose some data it > wants to send Host or other > > uncertain situation. I think you do not want that confusing thing > happen, so > > you design the logic at choose_wakeup. > > Here's the revised patch. Can you test it to make sure it does what > you want? > > Alan Stern > Alan, we have a similar debug yesterday, the system still enters suspend which remote wakeup occurs, and we find it is due to: commit 0af212ba8f123c2eba151af7726c34a50b127962 USB: don't let errors prevent system sleep Tony, I know you are working on this issue. please share your results and discuss with Alan about the solution. > > > Index: usb-3.3/drivers/usb/core/hcd.c > =================================================================== > --- usb-3.3.orig/drivers/usb/core/hcd.c > +++ usb-3.3/drivers/usb/core/hcd.c > @@ -1978,6 +1978,13 @@ int hcd_bus_suspend(struct usb_device *r > if (status == 0) { > usb_set_device_state(rhdev, USB_STATE_SUSPENDED); > hcd->state = HC_STATE_SUSPENDED; > + > + /* Did we race with a root-hub wakeup event? */ > + if (unlikely(HCD_POLL_PENDING(hcd) && > + rhdev->do_remote_wakeup)) { > + hcd_bus_resume(rhdev, PMSG_AUTO_RESUME); > + status = -EBUSY; > + } > } else { > spin_lock_irq(&hcd_root_hub_lock); > if (!HCD_DEAD(hcd)) { > Index: usb-3.3/drivers/usb/core/hub.c > =================================================================== > --- usb-3.3.orig/drivers/usb/core/hub.c > +++ usb-3.3/drivers/usb/core/hub.c > @@ -399,6 +399,11 @@ static void kick_khubd(struct usb_hub *h > usb_autopm_get_interface_no_resume( > to_usb_interface(hub->intfdev)); > wake_up(&khubd_wait); > + > + /* Did a wakeup event arrive while khubd was frozen? */ > + if (unlikely(frozen(khubd_task) && > + device_may_wakeup(&hub->hdev->dev))) > + pm_wakeup_event(&hub->hdev->dev, 100); > } > spin_unlock_irqrestore(&hub_event_lock, flags); > } > -- 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