• S
    USB: Set wakeup bits for all children hubs. · 72937e1e
    Sarah Sharp 提交于
    This patch takes care of the race condition between the Function Wake
    Device Notification and the auto-suspend timeout for this situation:
    
    Roothub
      | (U3)
    hub A
      | (U3)
    hub B
      | (U3)
    device C
    
    When device C signals a resume, the xHCI driver will set the wakeup_bits
    for the roothub port that hub A is attached to.  However, since USB 3.0
    hubs do not set a link state change bit on device-initiated resume, hub
    A will not indicate a port event when polled.  Without this patch, khubd
    will notice the wakeup-bits are set for the roothub port, it will resume
    hub A, and then it will poll the events bits for hub A and notice that
    nothing has changed.  Then it will be suspended after 2 seconds.
    
    Change hub_activate() to look at the port link state for each USB 3.0
    hub port, and set hub->change_bits if the link state is U0, indicating
    the device has finished resume.  Change the resume function called by
    hub_events(), hub_handle_remote_wakeup(), to check the link status
    for resume instead of just the port's wakeup_bits.
    Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
    72937e1e
hub.c 119.3 KB