On Wed, Dec 14, 2011 at 4:01 PM, Oliver Neukum <oneukum@xxxxxxx> wrote: > Am Donnerstag, 17. November 2011, 12:23:50 schrieb Daniel Kurtz: >> Defer LED setting action to a workqueue. >> This is more likely to send all LED change events in a single URB. > > Hi, > > I hope I am looking at the correct version of this patch. Yes, that is the correct version. It looks like I forgot to bump r in the [PATCH] of the subject. > But as far as I can see the work for handling LEDs is not delayed > while a reset is going on. That is wrong. Good catch, I think. Your comment is a bit terse, so it is difficult to tell exactly what you are recommending. Perhaps something like the following? +/* Workqueue routine to send requests to change LEDs */ +static void hid_led(struct work_struct *work) +{ + struct usbhid_device *usbhid = + container_of(work, struct usbhid_device, led_work); + struct hid_device *hid = usbhid->hid; + struct hid_field *field; + unsigned long flags; + + field = hidinput_get_led_field(hid); + if (!field) { + hid_warn(hid, "LED event field not found\n"); + return; + } + + spin_lock_irqsave(&usbhid->lock, flags); + if (!test_bit(HID_DISCONNECTED, &usbhid->iofl) && + !test_bit(HID_RESET_PENDING, &usbhid->iofl)) { + usbhid->ledcount = hidinput_count_leds(hid); + hid_dbg(usbhid->hid, "New ledcount = %u\n", usbhid->ledcount); + __usbhid_submit_report(hid, field->report, USB_DIR_OUT); + } + spin_unlock_irqrestore(&usbhid->lock, flags); +} -Dan > > Regards > Oliver > -- > To unsubscribe from this list: send the line "unsubscribe linux-input" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html