Thread (9 messages) 9 messages, 4 authors, 2020-10-06

Re: Is usb_hcd_giveback_urb() allowed in task context?

From: Alan Stern <stern@rowland.harvard.edu>
Date: 2020-10-06 01:23:36
Also in: lkml

On Mon, Oct 05, 2020 at 05:38:22PM -0600, Shuah Khan wrote:
On 10/5/20 9:25 AM, Alan Stern wrote:
quoted
On Mon, Oct 05, 2020 at 05:21:30PM +0200, Andrey Konovalov wrote:
No, no -- it won't work right if it's called in process context.  Not
only do the spinlock calls leave the interrupt flag unchanged, also the
driver callback routines may expect to be invoked with interrupts
disabled.  (We have tried to fix this, but I'm not at all certain that
all the cases have been updated.)
In the case of vhci case, usb_hcd_giveback_urb() is called from vhci's
urb_enqueue, when it determines it doesn't need to xmit the urb and can give
it back. This path runs in task context.

Do you have any recommendation on how this case can be handled?
Just call local_irq_disable() before usb_hcd_giveback_urb(), and 
local_irq_enable() afterward.

Alan Stern
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help