A question about the softirq implementation in DDE Linux26
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
>> 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.
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
More information about the l4-hackers