Fabrice ... try this

Read this message carefully.

   Sergio said it works...


regards
   Phil Wilshire

Sergio Biasi wrote:
> 
> Hi RTusers,
> I'm writing my thesis project using RT 1.1 with 2.0.36 linux kernel. All
> goes well and fine, but... I have a question. I've tried to use RTfifo
> between kernel modules and it doesn't work. The rtf_put() in the first
> module puts, but the handler in the other module doesn't handle. Before
> attempting a new solution (I use shared memory too) I would know if I'm
> missing something.
> Thanks a lot
>         Sergio
> 
Sergio is correct.
The rtf_put command will put data into the fifo from the RT side of
things.
Then it will call

        if (clear_bit(1, &RTF_SLEEPS(minor))) {
                queue_task_rt(&RTF_WAKE_UP_TASK(minor), &tq_rt);
        }

this will trigger the RTF_WAKE_UP_TASK on the tq_rt wait queue.

So only things put on that queue can be woken up.

the rtf_read is the user level task that reads data.
If a blocking read is asked for it does this.

                while (RTF_EMPTY(minor) /* || RTF_LOCK(minor) */ ) {
                        if (current->signal & ~current->blocked)
                                return -ERESTARTSYS;
                        set_bit(1, &RTF_SLEEPS(minor));
                        interruptible_sleep_on(&RTF_WAIT(minor));
                }

THis will allow the task to handle signals but also put the task to
sleep until called by the rtf_put call above...

Net result 
The RT Handler is NOT called after a fifo put from the RT Task
The user task is called....


If you want to use such a mechanism to get rt tasks to talk to each
other look at semaphores/rt_ipc.c and the message queue options.

If you are feeling brave add this code to the end of the rtf_put 

ie instead of
...
      }
      return count;
}
...
add in here

...
      }
      if (RTF_HANDLER(minor)) {
                if ((result = (*RTF_HANDLER(minor)) (minor)) < 0) {
                        return result;
                }
     return count;
}
...
But back every thing up first and stand by with the fire hose.

Thanks for making me clarify this.


( Read the Source Luke... ;->> )


   All the best
     Phil Wilshire

--- [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/

Reply via email to