Re: IRQ Sharing

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Remy Bohmer
Date: Tuesday, February 6, 2007 - 12:31 pm

Hello Jorge,

AFAIK, if the lines are really hardwired, you can never seperate them,
as there is no way to detect which device generated the interrupt,
other than executing the interrupt handler of both devices. Only the
driver can tell by checking the interrupt status registers of the
device.
A piece of hardware that has no knowledge about the devices, can not
distinguish the source, you have to look in the device registers to
check if that device has generated the interrupt.

But, Interrupt lines that are NOT hardwired to each other, can still
be mapped (e.g. by BIOS) to the same virtual interrupt lines. In that
case they can be seperated by configuring the hardware. But, if you
already use the LAPIC and IOAPIC, my experience is that the lines are
already seperated as much as possible, but you have to verify that.

I had similar problems in the past, and as I am using the RT-kernel, I
have threaded interrupts. I implemented a real-interrupt tophalf
(IRQF_NODELAY flag) that is capable of detecting the source of the
interrupt, and wakes the corresponding high-priority kernel thread
that handles the interrupt. All within a few microseconds latency.

When it comes to sharing with other devices I have made the choice to
close down 1 USB controller that shared the interrupt with my
IO-board. USB still works in my case, but 1 onboard
controller/connector is dead)

Kind Regards,

Remy


2007/2/6, Jorge Almeida <j-almeida@criticalsoftware.com>:
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
IRQ Sharing, Jorge Almeida, (Tue Feb 6, 11:01 am)
Re: IRQ Sharing, Remy Bohmer, (Tue Feb 6, 11:43 am)
Re: IRQ Sharing, Jorge Almeida, (Tue Feb 6, 11:54 am)
Re: IRQ Sharing, Remy Bohmer, (Tue Feb 6, 12:31 pm)