question about softirqs
Thomas Gleixner
tglx at linutronix.de
Thu May 14 00:17:08 EST 2009
On Wed, 13 May 2009, Andi Kleen wrote:
> > "If a soft irq is raised in process context, raise_softirq() in
> > kernel/softirq.c calls wakeup_softirqd() to make sure that ksoftirqd
>
> softirqd is only used when the softirq runs for too long or when
> there are no suitable irq exits for a long time.
>
> In normal situations (not excessive time in softirq) they don't
> do anything.
Err, no. Chris is completely correct:
if (!in_interrupt())
wakeup_softirqd();
We can not rely on irqs coming in when the softirq is raised from
thread context. An irq_exit might be faster to process it than the
scheduler can schedule ksoftirqd in, but ksoftirqd is woken and runs
nevertheless. If it finds a softirq pending then it processes them in
it's context and irq_exit calls to softirq are returning right away.
Thanks,
tglx
More information about the Linuxppc-dev
mailing list