A question about the softirq implementation in DDE Linux26
Da Zheng
zhengda1936 at gmail.com
Sat Feb 27 01:53:22 CET 2010
On 10-2-26 下午11:50, Dirk Vogt wrote:
> On Fri, 2010-02-26 at 22:08 +0800, Da Zheng wrote:
>> In Linux local_irq_save() disables irqs in the local processor, so if
>> the hard
>> IRQ handler tries to raise softirq, it is guaranteed that the softirq
>> thread
>> will not be scheduled to run, and vice versa. How would that work on a
>> SMP machine?
>
> Correct me if I am wrong, but i think even on native Linux the hard IRQ
> handler and the soft IRQ handler could run on the same time (on two
> different processors) as only *local* interrupts are disabled.
>
>> [...] 2.3.43 introduced softirqs, and re-implemented the (now
>> deprecated) BHs underneath them. Softirqs are fully-SMP versions of
>> BHs: they can run on as many CPUs at once as required. This means
>> they need to deal with any races in shared data using their own locks.
>> [...]
>
> [0]
> http://people.netfilter.org/rusty/unreliable-guides/kernel-hacking/basics-softirqs.html
It seems that I missed a letter.
The same type of softirq can run on more than one processor at the same time,
but when a softirq is activated, it should be executed on the same CPU. That's
why each CPU has a 32-bit mask describing the pending softirqs in the local CPU.
Please check the section 4.7 of the book Understanding the Linux Kernel, the
third edition.
Best regards,
Zheng Da
More information about the l4-hackers
mailing list