1. 04 Sep, 2014 1 commit
    • Jiri Kosina's avatar
      HID: thingm: fix workqueue race on remove · 67a97845
      Jiri Kosina authored
      thingm_remove_rgb() needs to flush the workqueue after all the LED classes
      have been unregistered, otherwise the removal might race with another LED
      event coming, causing thingm_led_set() to schedule additional work after
      thingm_remove_rgb() has flushed it. This obviously causes oops later, as
      the scheduled work has been freed in the meantime.
      
      In addition to that, move the hid_hw_stop() to an earlier place, so that
      dmesg is not polluted by failure messages about not being able to write
      the LED while the device is being shut down.
      Reported-and-tested-by: default avatarDylan Alex Simon <dylan-kernel@dylex.net>
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      67a97845
  2. 03 Sep, 2014 1 commit
    • Alan Stern's avatar
      HID: usbhid: improve handling of Clear-Halt and reset · 8f507ef5
      Alan Stern authored
      This patch changes the way usbhid carries out Clear-Halt and reset.
      
      Currently, after a Clear-Halt on the interrupt-IN endpoint, the driver
      immediately restarts the interrupt URB, even if the Clear-Halt failed.
      This doesn't work out well when the reason for the failure was that
      the device was disconnected (when a low- or full-speed device is
      connected through a hub to an EHCI controller, transfer errors caused
      by disconnection are reported as stalls by the hub).  Instead now the
      driver will attempt a reset after a failed Clear-Halt.
      
      The way resets are carried out is also changed.  Now the driver will
      call usb_queue_reset_device() instead of calling usb_reset_device()
      directly.  This avoids a deadlock that would arise when a device is
      unplugged: The hid_reset() routine runs as a workqueue item, a reset
      attempt after the device has been unplugged will fail, failure will
      cause usbhid to be unbound, and the disconnect routine will try to do
      cancel_work_sync().  The usb_queue_reset_device() implementation is
      carefully written to handle scenarios like this one properly.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      8f507ef5
  3. 26 Aug, 2014 1 commit
  4. 21 Aug, 2014 11 commits
  5. 20 Aug, 2014 6 commits
  6. 19 Aug, 2014 20 commits