Re: [PATCH] usb: gadget: bcm63xx UDC driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Aug 21, 2012 at 08:20:43AM -0700, Kevin Cernekee wrote:
> On Tue, Aug 21, 2012 at 5:04 AM, Felipe Balbi <balbi@xxxxxx> wrote:
> > On Mon, Aug 20, 2012 at 08:48:11PM -0700, Kevin Cernekee wrote:
> >> On Mon, Aug 20, 2012 at 12:40 AM, Felipe Balbi <balbi@xxxxxx> wrote:
> >> > no workqueues, please either handle the IRQ here or use threaded_irqs.
> >> >
> >> > again, no workqueues.
> >>
> >> Felipe,
> >>
> >> I am seeing all sorts of deadlocks now, after removing the workqueue
> >> (patch V2).  Some have easy fixes, but for others it is not as
> >> obvious.  The code was much simpler when I could just trigger a
> >> deferred worker function.
> >>
> >> Workqueues are used in at91_udc, lpc32xx_udc, mv_udc_core, and
> >> pch_udc.  Could you please clarify why it is not OK to use one in
> >> bcm63xx_udc?
> >
> > Because threaded_irqs were added in order to drop such workqueues.
> > threaded_irqs also have the highest priority possible (only lower than
> > hardirq handlers), so you'll get scheduled much sooner.
> >
> > Could it be that most of your deadlocks is because you're not setting
> > IRQF_ONESHOT ?
> 
> The deadlocks involve ep0 processing that is triggered through
> bcm63xx_udc_queue().  e.g. gadget driver queues a new request, it's a
> reply to a spoofed SET_CONFIGURATION / SET_INTERFACE transaction, and
> the UDC driver calls the completion immediately.
> 
> So, not all of the ep0 work is being done in response to an IRQ from
> the controller HW, and I think that is where this driver diverges from
> most of the others.
> 
> Would it be OK to use a workqueue, or maybe a tasklet, given these
> circumstances?

Then stick to a workqueue... but could you let me know why exactly you
have to fake SET_CONFIGURATION/SET_INTERFACE requests ? Is this a
silicon bug or a silicon feature ? That's quite weird to me.

-- 
balbi

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux