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/

Reply via email to