Mailing List archive

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

[linux-dvb] Re: [PATCH] support for multiple feeds per pid



Johannes Stezenbach wrote:
> On Fri, Feb 21, 2003 at 01:50:18AM +0100, Oliver Endriss wrote:
> > Locks should never be held longer than necessary. Taking a lock in
> > the interrupt handler and releasing it in the tasklet might lead to
> > deadlocks.

> s/might/will/

Hm, not necessarily, I wished it would. ;-) 

On a vanilla *UP* machine, spin_lock() and spin_unlock() do nothing at 
all. spin_lock_irq() resolves to a simple cli().
Let's assume that we have a buggy implementation which calls 
spin_lock_irq() in the ISR and spin_unlock_irq() in the tasklet.

In the interrupt handler cli() has no effect because interrupts are 
disabled anyway. As soon as interrupts are automatically enabled at the 
end of the isr, the lock will be broken...
In the tasklet, spin_unlock_irq() enables interrupts. (I believe that 
they are enabled anyway, when the tasklet starts, so nothing happens.)
In this example the whole spinlock stuff does nothing at all.
This will work until the critical area is accessed after the end of the 
interrupt handler and before the tasklet has finished processing the 
critical area.

There is a good chance that these errors will remain undetected for some 
time on UP machines. That's why it is a good idea to enable spin lock 
debugging and compile the kernel for SMP...

> ...

> The whole point using of tasklets is to keep irq handlers short
> so other irqs wont be blocked for too long. But if it's not possible
> do defer work from the irq handler, then using tasklets is the
> wrong approach.

Sure. The most time-consuming part of the av7110 driver is busy-waiting 
in wait_for_debi_done(). Apparently, this happens very often, if you 
are using the card in transfer mode. IIRC this can consume about 25% of 
the processor cycles, no matter whether you have a slow or a fast cpu.
(BTW this is an indication that the CPU is really waiting for the DVB 
card.)
Using tasklets improves situation somewhat because some interrupts can 
be processed during busy-waiting, but does not really solve the 
busy-waiting problem.

Oliver


-- 
Info:
To unsubscribe send a mail to listar@linuxtv.org with "unsubscribe linux-dvb" as subject.



Home | Main Index | Thread Index