Hi,
On 10-3-1 下午5:58, Christian Helmuth wrote:
If you only consider about handling the softirq queue, I think it's easy, simply using a lock to protect it explicitly, but it cannot solve the problem completely. There should be many race conditions in other places. I implement raw_local_irq_disable() and raw_local_irq_enable() with a lock, but there is still a serious problem. Because of spin_lock_irqsave, there can be dead locks. One example is in pcnet32_watchdog() and pcnet32_interrupt(). So I think we can just let spin_lock_irqsave() become spin_lock(). After all, the interrupt handling doesn't run in the real interrupt context any more, so I think there is no reason to do spin_lock_irqsave() or spin_lock_irq().
Sounds like my idea behind the current scheme. Thanks for your input on this.
I have one implementation and I sent it to the mailing list. Could you please check if it works? If possible, try it on your DDE. It works for my pcnet32 driver.
Best regards, Zheng Da