All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [Xenomai-help] Sharing interrupts between several RT pci devices and non RT devices
@ 2007-02-16 13:08 Steffen Mehlfeld
  0 siblings, 0 replies; 5+ messages in thread
From: Steffen Mehlfeld @ 2007-02-16 13:08 UTC (permalink / raw)
  To: xenomai

Jan Kiszka wrote:

> For the sake of cleanness: XN_xxx flags are for internal use only (skins
> like RTDM do so), you are expected to work with RTDM_IRQTYPE_xxx here.

done so.

> > Another solution would be not to share interrupts between rt and
> non-rt-devices, but i have no clue how to do this, as i'm new to the whole driver
> development thing. As far as i understand, the PCI-BIOS tells each device
> via config-space which irq it has to use. Therefore it's pointless to call
> rtdm_irq_request() with a irq-line other than that from config-space, as it
> uses the irq from config-space anyway. 
> > Is there a way to specify which irq a pci device should use?
> 
> If the physical IRQs end up on the same line physical line, you have
> lost. Then you can only write a special stub driver for your non-RT
> device, that works over RTDM, detects if the event is for that device,
> shuts the IRQ up inside the hardware (there is always some kind of mask
> register), and signals the arrival e.g. via rtdm_nrtsig to the Linux
> handler. When Linux is able to execute its driver, it can analyse the
> IRQ reason and take the measures to finally re-enable IRQs on that
> device again.
> 
> That's of course still slower than an unshared IRQ design, but it is
> deterministic even when you face an unpredictable non-RT IRQ load.

That won't work for me, because the cards are supposed to run on lots of different machines, with lots of different devices and therefore device-drivers that may share the irq-line with this rt-device.

On my development machine, the cards irq-line depends on the presence of other pci-cards, on the used pci-slot and some other parameters i can't figure out (sometimes it's on 9, 10, 11, ...). 

Is there no known way how to influence this (maybe via config-space)?

Anyway, thanks a lot for the useful information (thanks to Dmitry Adamushko also),

Steffen


^ permalink raw reply	[flat|nested] 5+ messages in thread
* [Xenomai-help] Sharing interrupts between several RT pci devices and non RT devices
@ 2007-02-16  8:19 Steffen Mehlfeld
  2007-02-16  9:04 ` Jan Kiszka
  2007-02-16  9:20 ` Dmitry Adamushko
  0 siblings, 2 replies; 5+ messages in thread
From: Steffen Mehlfeld @ 2007-02-16  8:19 UTC (permalink / raw)
  To: xenomai

Hi,

I'm trying to run several pci cards in rt mode. Therefore I call rtdm_irq_request() with the flags XN_ISR_SHARED | XN_ISR_EDGE. 

In the ISR I check the interrupt status register of the pci-card. If the irq was caused by that card, i handle it and return RTDM_IRQ_HANDLED. If not, I return XN_ISR_NONE, which I understand means 'not my interrupt, try the next registered ISR'.

This works fine as long as my pci-cards have their own interrupt line. But when the PCI-BIOS let them share the interrupt line with something like the ethernet-card (which runs in non-rt mode) the problems starts. Of course the ethernet-card gets no more interrupts and stops working.

To solve this I'd have to propagate the irq to the linux domain, when i figure out that the irq wasn't called by one of my cards (i can detect this with global flags in the kernel module).
But as soon as i start returning XN_ISR_PROPAGATE from the isr, i get the message "Xenomai: xnintr_edge_shirq_handler(): failed to get the IRQ9 line free.", which i think doesn't mean, that all is going well. 

The api documentation tells not to return XN_ISR_PROPAGATE if you share irqs amongst rt devices, which i think is reasonable if you don't know, wether all rt-devices already checked their ir-flags. 
But isn't there a way to propagate the irq to linux, if i'm sure that it belongs there?

Another solution would be not to share interrupts between rt and non-rt-devices, but i have no clue how to do this, as i'm new to the whole driver development thing. As far as i understand, the PCI-BIOS tells each device via config-space which irq it has to use. Therefore it's pointless to call rtdm_irq_request() with a irq-line other than that from config-space, as it uses the irq from config-space anyway. 
Is there a way to specify which irq a pci device should use?


Btw, I'm using kernel 2.6.19.1 on a x86 machine with xenomai 2.4-devel.

With kind regards,
Steffen Mehlfeld


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2007-02-16 17:40 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-02-16 13:08 [Xenomai-help] Sharing interrupts between several RT pci devices and non RT devices Steffen Mehlfeld
  -- strict thread matches above, loose matches on Subject: below --
2007-02-16  8:19 Steffen Mehlfeld
2007-02-16  9:04 ` Jan Kiszka
     [not found]   ` <20070216130634.216140@domain.hid>
2007-02-16 17:40     ` Jan Kiszka
2007-02-16  9:20 ` Dmitry Adamushko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.