Hi, Are you sure about that Edge-triggered interrupts are gone and that most hardware doesn't use edge triggers ? For example, on my x86_64, I get 9 edge interrupts: 0: 127 0 IO-APIC-edge timer 1: 3 0 IO-APIC-edge i8042 4: 1 1 IO-APIC-edge 8: 0 1 IO-APIC-edge rtc0 12: 1 3 IO-APIC-edge i8042 14: 0 0 IO-APIC-edge ata_piix 15: 0 0 IO-APIC-edge ata_piix 43: 30897 7 PCI-MSI-edge em1 44: 306 308 PCI-MSI-edge snd_hda_intel Also I remember I saw in a book about Kernel that edge interrupts are more common than level interrupts. rgs Kevin On Thu, Mar 7, 2013 at 6:53 PM, <Valdis.Kletnieks@vt.edu> wrote:
On Thu, 07 Mar 2013 17:17:19 +0200, Kevin Wilson said:
Does this mean that once you are disabling interrupts, these interrupts are lost ? even later, when we will enable interrupts, the interrupts from the past that should have been created (but interrupts were disabled at that time interval) are in fact lost?
Level-triggered interruots will go off once interrupts are re-enabled, assuming that the device has kept the level set and not given up and timed out.
Edge-trittered interrupts are gone. That's part of why most hardware doesn't use edge triggers - it's just too hard to guarantee proper device driver operation.
Also, in common usage, "disabled interrupts" means that you're not listening to *any* interrupts, while "masked" means "we're not listening to *this* interrupt source, even if we *are* accepting interrupts from other sources".
The difference is that sometimes the CPU is doing stuff that it would be potentially screwed if *any* interrupt happened, so we disable them. Other times we're busy inside a device driver, and we're in a critical section for that device - but it's safe for other devices to interrupt. So to improve latency we mask off just the one interrupt not all of them.