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
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