On 2018-06-13 19:43:55 [+0200], Oliver Neukum wrote: > On Mi, 2018-06-13 at 18:28 +0200, Sebastian Andrzej Siewior wrote: > > The function service_outstanding_interrupt() will unconditionally enable > > interrupts during unlock and invoke usb_submit_urb() with GFP_KERNEL. > > If the HCD completes in BH (like ehci does) then the context remains > > atomic due local_bh_disable() and enabling interrupts does not change > > this. > > Hi, Hi Oliver, > I am just looking at your patch and I am wondering why > wdm_in_callback() won't just call service_outstanding_interrupt() > again and again? OK, maybe I am dense and it may well be present now, > but it just looks to me that way. But this part didn't change, did it? The user blocks in wdmw_read() waiting for the WDM_READ to be set and a wakeup. After rhe wakeup it clears the ->rerr. | static ssize_t wdm_read | (struct file *file, char __user *buffer, size_t count, loff_t *ppos) | { |… | rv = wait_event_interruptible(desc->wait, | test_bit(WDM_READ, &desc->flags)); |… | | if (desc->rerr) { /* read completed, error happened */ | rv = usb_translate_errors(desc->rerr); | desc->rerr = 0; | spin_unlock_irq(&desc->iuspin); | goto err; | } Maybe we should delay the WDM_READ flag in the error case until the worker is done (before the wakeup). > Regards > Oliver Sebastian -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html