On Sun, Mar 27, 2022 at 02:25:01AM +0200, Tasos Sahanidis wrote: > Since commit ae8709b296d8 ("USB: core: Make do_proc_control() and > do_proc_bulk() killable") if a device has the USB_QUIRK_DELAY_CTRL_MSG > quirk set, it will temporarily block all other URBs (e.g. interrupts) > while sleeping due to a control. > > This results in noticeable delays when, for example, a userspace usbfs > application is sending URB interrupts at a high rate to a keyboard and > simultaneously updates the lock indicators using controls. Interrupts > with direction set to IN are also affected by this, meaning that > delivery of HID reports (containing scancodes) to the usbfs application > is delayed as well. > > This patch fixes the regression by calling msleep() while the device > mutex is unlocked, as was the case originally with usb_control_msg(). > > Fixes: ae8709b296d8 ("USB: core: Make do_proc_control() and do_proc_bulk() killable") > Signed-off-by: Tasos Sahanidis <tasos@xxxxxxxxxxxx> > --- Thanks for identifying and fixing this. Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> You might want to change the patch name, however. "Block" usually means pretty much the same thing as "sleep"; i.e., a process is blocked if it can't move forward. The name should be something like "Don't hold the device lock while sleeping in do_proc_control()". Alan Stern