Hi,
So, if I can't call Linux interrupt handler within an RTAI handler, can
I use two independant handlers ; one from RTAI and the other from Linux?
I've a driver that uses Linux interrupt handler. Then, I want a
realtime process that is calling by the same interrupt. When I'm using
rt_request_global_irq() and doing nothing in my handler, the system
restart or all is ok ; it depends of the Linux driver I use.
How can I activate, if I can, Linux handler using the same irq? I've
used rt_pend_linux_irq() in my handler but it may crash too.
Pascal
Charest
Karim Yaghmour wrote:
>
> Hello Pascal,
>
> I beleive the problem comes from the fact that you are calling the
> Linux interrupt handler from within an RTAI handler. Since Linux
> interrupt handlers might call on lock mechanisms redirected by
> RTAI, this is where things get messy.
>
> Rather than using rt_request_global_irq(), try using rt_request_linux_irq().
> What this will do is add your handler to the list of handlers linux
> will call when the IRQ happens. Therefore, the normal handler gets
> called and so does yours. Your handler can then use RTAI locking
> mechanisms to do it's work.
>
> This is actually currently used from within the RTAI schedulers to
> try recovering lost jiffies (this is from start_rt_timer in the upscheduler):
> rt_request_linux_irq(TIMER_8254_IRQ, recover_jiffies, "rtai_sched", recover_jiffies);
>
> The recover_jiffies function now gets called every time a timer
> interrupt gets to Linux.
>
> J'espere que ca pourra vous aider ...
>
> Karim
>
> Pascal Charest wrote:
> >
> > Hi,
> >
> > I'm trying to catch interruptions with rtai and forcing the linux
> > interrupt handler, but I don't know how to do it correctly. In fact, I
> > want to use different drivers with my rt_process and to make them
> > realtime without changing their code. There is a example of what I want
> > to do :
> >
> > void handler(int irq)
> > {
> > ... forcing linux interrupt handler
> > ... doing my own work
> > }
> >
> > int init_module()
> > {
> > ...
> > rt_request_global_irq(IRQ, (void*)handler);
> > rt_startup_irq(IRQ);
> > ...
> > }
> >
> > When I try something, linux stops or the computer restarts when the
> > interrupt occurs ; it depends of the rt fonctions I use in my handler.
> > Do someone know how to do it?
> >
> > Thanks in advance,
> >
> > Pascal Charest
> > -- [rtl] ---
> > To unsubscribe:
> > echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
> > echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
> > ---
> > For more information on Real-Time Linux see:
> > http://www.rtlinux.org/rtlinux/
>
> --
> ===================================================
> Karim Yaghmour
> [EMAIL PROTECTED]
> Operating System Consultant
> (Linux kernel, real-time and distributed systems)
> ===================================================
> -- [rtl] ---
> To unsubscribe:
> echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
> echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
> ---
> For more information on Real-Time Linux see:
> http://www.rtlinux.org/rtlinux/
-- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
---
For more information on Real-Time Linux see:
http://www.rtlinux.org/rtlinux/