Hi all,
I'm trying to understand how some of the new code in RTL 3.0 works -
specifically with the get_linux_current(...) code introduced in pre6d.
This is called from the psc.o module to implement the user space calls
via the rtl_sigaction functionality.
I know it's probably bleeding obvious, but I can't figure out where
rtl_sched[cpu_id].rtlinux_task.stack
gets initialised so that this works (from rtl_sched.c):
int *sp = rtl_get_linux_thread(rtl_getcpuid())->stack;
return (struct task_struct *)((ulong)sp & (ulong)~8191UL);
I was expecting to see a rtl_init_stack(...) or something to set this up
in the rtl_sched init_module(). Can someone help?
This is my first attempt at understanding heavy duty magic like this, so
sorry about the gumby question.
regards to all,
Stuart Warren
code snippets from rtl_sched.c...
static inline pthread_t rtl_get_linux_thread(int cpu_id){
return &(rtl_sched[cpu_id].rtl_linux_task);
}
struct task_struct *get_linux_current(void)
{
#if !defined(__i386__)
return current;
#else
if ( RTL_CURRENT == rtl_get_linux_thread(rtl_getcpuid()) )
{
return current;
}
else
{
int *sp = rtl_get_linux_thread(rtl_getcpuid())->stack;
return (struct task_struct *)((ulong)sp & (ulong)~8191UL);
}
#endif
}
-- [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/