[v2] USB: cdc-wdm: don't enable interrupts in USB-giveback

From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: 2018-06-13 20:28:09

On 2018-06-13 19:43:55 [+0200], Oliver Neukum wrote:
On Mi, 2018-06-13 at 18:28 +0200, Sebastian Andrzej Siewior wrote:
quoted
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@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help