Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 Jul 2003 17:00:13 -0400 (EDT)
From:      John Baldwin <jhb@FreeBSD.org>
To:        Marcel Moolenaar <marcel@xcllnt.net>
Cc:        cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/lib/libthr/arch/alpha/alpha _curthread.c
Message-ID:  <XFMail.20030724170013.jhb@FreeBSD.org>
In-Reply-To: <20030724191943.GA1028@dhcp01.pn.xcllnt.net>

next in thread | previous in thread | raw e-mail | index | archive | help

On 24-Jul-2003 Marcel Moolenaar wrote:
> On Thu, Jul 24, 2003 at 03:08:32PM -0400, John Baldwin wrote:
>> 
>> On 24-Jul-2003 Marcel Moolenaar wrote:
>> > marcel      2003/07/24 00:51:49 PDT
>> > 
>> >   FreeBSD src repository
>> > 
>> >   Modified files:
>> >     lib/libthr/arch/alpha/alpha _curthread.c 
>> >   Log:
>> >   Implement _get_curthread and _set_curthread. We use GCCs builtin
>> >   function this, which expands to PAL calls (rduniq and wruniq).
>> >   This needs adjustment when TLS is implemented.
>> 
>> This trashes SMP since we use the per-CPU unique value already
>> to maintain the per-cpu data pointer.
> 
> Writing to the per-CPU unique value is an unprivileged operation.
> You cannot possibly use that for in-kernel use without saving and
> restoring it on kernel exit/entry. Which is what needs to be done.

There is a chicken and egg problem.  We use the unique value to
initialize the per-cpu pointer on kernel entry.  We only have one
such beast, and in the kernel we cache it in a register that userland
gets to clobber (and frequently does).  If you can think of a better
way to store the per-cpu pointer such that kernel entry can load it
into the register go for it.

Read some code:

syscall(...)
{
        ...
        /*
         * Find our per-cpu globals.
         */
#ifdef SMP
        s = intr_disable();
#endif
        pcpup = (struct pcpu *) alpha_pal_rdval();
        td = curthread;
#ifdef SMP
        td->td_md.md_kernnest++;
        intr_restore(s);
#endif
        ...
}

-- 

John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.20030724170013.jhb>