Am Samstag, 16. April 2005 04:47 schrieb Alan Stern:
> On Sat, 16 Apr 2005, Oliver Neukum wrote:
> 
> > > The point is not whether things are interrupt-driven, it's whether or not 
> > > interrupts are enabled.  In a bottom-half handler all the time-consuming 
> > > work can be done with interrupts enabled.
> > 
> > How so? Part of the work done in IRQ can be shifted to tasklets, yes.
> 
> So can part of the work done in enqueue.
> 
> > But the enqueue times are worse, so are in more need of optimisation.
> 
> Although enqueue took more time than IRQ handling on average, I'm more
> concerned about maximum times.  Enqueue's maximum time was worse on one of
> the computers, IRQ handling's was worse on the other.

But enqueuing in many drivers is part of irq handling. Storage is an
exception in that regard.

> In any case, I'm not concerned about optimization -- if I was I wouldn't
> be talking about using a bottom half.  I'm concerned about reducing the
> amount of time spent with interrupts disabled.  It's not necessary to
> optimize any code or improve any run times; it's necessary only to move
> things around so they can execute with interrupts enabled.
> 
> > So instead of shifting code in the enqueue path to a different lock,
> > shifting it under no lock or into another path at all would seem better
> > to me.
> 
> Who said anything about a different lock?  The tasklet approach will shift 
> enqueue code to run in the tasklet, which means it automatically benefits 
> from the kernel's policy of allowing only one instance of a tasklet to run 
> at any time.  Anyway, locks aren't the issue -- interrupt enabling is.

What is the point of using a tasklet? It is about locking, not context.
Using a tasklet from task context is never sensible. Either you need
interrupts off, or you don't need them off. Needing to take a spinlock
in a tasklet doesn't help. Task context is already lower in priority.

In addition, usb_submit_urb() must work from hard irq context.
You need to to do anything than can error before you kick off a
tasklet, and you must make sure that usb_unlink_urb() will work
before the tasklet runs.

        Regards
                Oliver


-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_ide95&alloc_id396&op=click
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to