Hello.
Benjamin Herrenschmidt wrote:
I must not that this whole ack() vs eoi() stuff is misleading. For example,
in 8259 driver, mask_ack() method actually sends EOI to PIC, not ACK's an IRQ
-- the actual ACK is implicit on x86 and is used to read the interrupt vector
form 8259 on PPC. So, IMO, there probably should only have been either ack()
or eoi() method in the first place. Though I'm not familiar with ARM from
which genirq stuff originated...
They are different concepts. Ack clears the event on the PIC, it's
tyically necessary for resetting the edge detection logic for edge
interrupts and has to happen before the handler is called.
I know 8259. :-)
It also resets the corresponding IRQ bit in IRR, and sets it in ISR where
it's then cleared on EOI command.
On MPIC or XICS, this is implicit by reading the vector. On some more
dumb controllers, this has to be done explicitely.
This is not implicit -- CPU has to read INTACK reg. on OpenPIC. Really
implicit method is in action on x86 where CPU issues dual ACK bus cycle to get
the vector form 8259...
EOI is a more "high level" thing that some "intelligent" PICs that
automatically raise the priority do to restore the priority to what it
was before the interrupt occured.
Thank you, I know. Even 8259 has the notion of priority and EOI works the
same way here.
Ben.
WBR, Sergei
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]