• Thomas Pugliese's avatar
    usb: wusbcore: fix device disconnect on rekey timeout · 275e517c
    Thomas Pugliese authored
    If three or more wireless devices are connected and two of them
    disconnect between 1-3 seconds apart, it can cause the HWA to disconnect
    the remaining devices due to failing to see a DN_Alive message from
    them.  This happens because when the HWA detects that the first device
    is gone, it will attempt to rekey the remaining devices.  If one of the
    devices is not responding because it has also been disconnected but not
    yet timed out, the synchronous rekey operation running on the wusbd
    workqueue can block for up to 5 seconds.  This will prevent the
    KEEPALIVE timer from running and DN_Alive messages from being processed
    because they are processed by the same workqueue.  This patch moves the
    rekey operation to a separate workqueue since it is the only wusb work
    item that needs to communicate directly with wireless devices.  The rest
    of the WUSB work items either perform no device IO or communicate
    directly with the host controller and should not be blocked out by a
    non-responding wireless device.
    Signed-off-by: default avatarThomas Pugliese <thomas.pugliese@gmail.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    275e517c
wusbhc.h 16.4 KB