• Tilman Schmidt's avatar
    bas_gigaset: fix pre_reset handling · c6fdd8e5
    Tilman Schmidt authored
    The delayed work function int_in_work() may call usb_reset_device()
    and thus, indirectly, the driver's pre_reset method. Trying to
    cancel the work synchronously in that situation would deadlock.
    Fix by avoiding cancel_work_sync() in the pre_reset method.
    If the reset was NOT initiated by int_in_work() this might cause
    int_in_work() to run after the post_reset method, with urb_int_in
    already resubmitted, so handle that case gracefully.
    Signed-off-by: default avatarTilman Schmidt <tilman@imap.cc>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
bas-gigaset.c 71.3 KB