• David Herrmann's avatar
    Bluetooth: hidp: Stop I/O on shutdown · 794d1756
    David Herrmann authored
    Current hidp driver purges the in/out queue on HID shutdown, but does
    not prevent further I/O. If a driver uses hidp_output_raw_report or
    hidp_get_raw_report during shutdown, the driver hangs for 5 or 10
    seconds per call until it gets a timeout.
    That is, if the output queue of an HID driver has 10 messages pending,
    it will take 50s until hid_destroy_device() will return. The
    hidp_session_sem semaphore is held during shutdown so no other HID
    device may be added/removed during this time.
    
    This patch makes hidp_output_raw_report and hidp_get_raw_report fail if
    session->terminate is true. Also hidp_session will wakeup all current
    calls to these functions to cancel the current operations.
    
    We already purge the current I/O queues on hidp_stop(), so this data loss
    does not change the behaviour of the HID drivers.
    Signed-off-by: default avatarDavid Herrmann <dh.herrmann@googlemail.com>
    Signed-off-by: default avatarGustavo F. Padovan <padovan@profusion.mobi>
    794d1756
core.c 29.7 KB