On Tue, 2010-08-10 at 15:33 +0200, Gilles Chanteperdrix wrote:
> Bob Feretich wrote:
> >   Gunther,
> > Thank you for the information.
> > No, the my hardware interrupt line is not being shared by other devices. 
> > So I really don't want it to be considered "shared". However, my concern 
> > was on how driver IRQ request calls are handled.
> > 
> > If a driver invokes request_irq() without the SHARED flag, I would 
> > expect Linux to reject subsequent request_irq() calls for the same IRQ 
> > made by other drivers. Similarly, if the first driver invokes 
> > request_irq() with the SHARED flag, I would expect Linux to accept 
> > subsequent request_irq() calls for the same IRQ made by other drivers 
> > if-and-only-if the other requests are made with the SHARED flag.
> > 
> > My temporary fix for the problem I encountered required me to request 
> > the same IRQ from Linux via request_irq() and then from Xenomai via 
> > rtdm_irq_request(). I had expected the Xenomai request to fail. However, 
> > that expectation assumed that there are interlocks between the 
> > environments. I perceived problems in either case. If there are no 
> > interlocks, then both a real-time driver and a non-real-time driver may 
> > be loaded to service the same IRQ and be ignorant of each other. This 
> > would probably be bad.
> > 
> > If there are interlocks...
> > Then for a non-shared IRQ, the first driver to request the IRQ would 
> > receive it. All other requestors, regardless of whether they are Xenomai 
> > or Linux would be refused.
> 
> Ok. Adeos 101.
> 
> Xenomai and Linux are living in different Adeos domains, each with its
> own interrupt handlers. The domains are organized in a pipeline. When an
> interrupt is received, it goes down the pipeline until a domain accepts
> it. The domain which accepts it may choose to propagate it or not to the
> next domain. So, there is nothing wrong with registering an interrupt
> handler for each domain. However, if the Xenomai domain interrupt
> handler decides not to propagate the interrupt to the Linux domain,
> Linux will simply never receive any interrupt.
> 
> The SHARED flag applies to interrupts in the same domain, and are
> handled outside of the Adeos realm.
> 
> The timer interrupt, on the other hand, propagates the interrupt when it
> sees fit, so that Linux timer handling is called. Both solutions are
> allowed.
> 
> The reason why it is impossible to share an interrupt between two
> different drivers, unaware of each other, living in Xenomai and Linux
> domain is that it destroys the determinism. But even that can be made to
> work if we make a Xenomai domain driver for the Linux domain interrupt,
> aware of that Linux domain driver:
> https://mail.gna.org/public/xenomai-core/2008-07/msg00025.html
> 
> > For a shared IRQ, the rules get much more complex. I believe that the 
> > first driver to request the IRQ would receive it, but if the driver 
> > specified the SHARED flag sharing would restricted the environment of 
> > that first driver. Requests made from the other environment should be 
> > rejected whether or not they specify SHARED.
> > Since my temporary fix (requesting and receiving a non-shared IRQ in 
> > both the Linux and Xenomai environments) worked, if proved that there 
> > were no interlocks. Phillippe stated that this is a flaw in the current 
> > version of Xenomai.
> 
> No, you misunderstood Philippe. What is a flaw in the current version of
> Xenomai is the fact that rtdm_request_irq does not configure the GPIO
> registers to set the GPIO interrupt to edge/level triggered, rising,
> falling, etc... The fact that the same interrupt can be requested in
> Xenomai domain and in Linux domain is perfectly normal, fits in the
> Adeos architecture, and is even needed for handling the timer interrupt
> on several architectures including arm.

Ack.

> 
> 

-- 
Philippe.



_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to