[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: irq handling in DDE Linux26
From: |
Da Zheng |
Subject: |
Re: irq handling in DDE Linux26 |
Date: |
Sat, 08 May 2010 23:19:08 +0800 |
User-agent: |
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.9) Gecko/20100317 Thunderbird/3.0.4 |
On 10-5-7 下午4:31, Samuel Thibault wrote:
> Hello,
>
> Da Zheng, le Fri 07 May 2010 00:53:20 +0800, a écrit :
>> In ne2k-pci, an example in DDE Linux26, when a packet is transmitted by the
>> driver, disable_irq_nosync_lockdep_irqsave() is called to disable irq. Then
>> it
>> triggers a send and calls enable_irq_lockdep_irqrestore().
>
>> Should the interrupt handler delays interrupts instead of ignoring
>> them silently when the interrupt line is disabled?
>
> See __enable_irq in the linux source code:
>
> check_irq_resend(desc, irq);
>
> which re-sends the irq if it has been set to pending while it was
> disabled.
OK, I see. Thanks. I kind of understand how irq is handled by Linux. It seems
DDE Linux26 might lose some edge-triggered interrupts when irq is disabled since
it doesn't set irq pending.
A stupid question: when disable_irq_nosync is called, IRQ_DISABLED is set in the
irq descriptor in the Linux kernel and the corresponding hardirq line should be
masked as well (at least, it seems the kernel for x86 does so). How can
handle_edge_irq be called? or this can only happen on SMP as only the hardirq
line in the local CPU is masked?
Zheng Da