cvs commit: src/sys/i386/include tls.h src/gnu/usr.bin/cc34/cc_prep/config dragonfly-spec.h src/gnu/usr.bin/cc34/cc_prep/config/i386 dragonfly.h src/lib/csu/i386 crt1.c src/lib/libc/gen tls.c src/lib/libc/i386/sys cerror.S src/lib/libc/include libc_private.h ...
Matthew Dillon
dillon at apollo.backplane.com
Wed May 11 18:25:35 PDT 2005
:We still have a problem not discussed yet, maybe too hurry here ?
:if we want to put user critical section pointer into the tcb,
:and used by rtld to block user signal handler, what rtld should
:do now ? we have deadlock problem if current thread held reader
:lock, and later it catches a signal and in signal handler it tries
:to access a __thread variable which causes additional tls data
:block to be allocated which needs writer lock. If rtld does not
:setup initial tls, then in rlock or wlock, it has to check if
:tls was setup or not, it will be diffcult because it does not know
:when libc will setup initial tls. What I am thinking is:
:in wlock_acquire() or rlock_acquire, rtld will access critical
:pointer in tcb, and use an atomic operation:
: struct *tcb = tls_get_tcb();
: atomic_inc_int(&tcb->tcb_critical, 1);
: ...
:
:in wlock_release() or rlock_release():
: atomic_inc_int(&tcb->tcb_critical, -1);
: if (tcb->tcb_critical == 0x80000000)
: getpid(); // trigger signal handler.
:
:David Xu
Well, I wasn't really planning on putting the user critical
section data in the TCB... but now that you bring it up I
don't see why we couldn't do it.
Basically the way I intend to implement the userland critical
section is by creating two procedures in the syscall layer
to enter and exit the userland critical section. That is, as
far as userland is concerned these would be system calls.
But the actual implementation in the syscall layer would not
have to make an actual system call. I was thinking that it
would 'register' a bit of shared memory (not necessarily
TCB related) that both it and the kernel could mess around
with.
There are other reasons for my wanting to do things this way.
There are a ton of things we can put in such a shared
memory segment. The pid, a copy of the current creds,
the current time of day (tick resolution or seconds resolution
only of course), and so on and so forth. For this sort
of use to be portable the userland program and libraries should
not be allowed to directly access the data but instead would
access it via 'fake' system calls in the syscall layer.
-Matt
Matthew Dillon
<dillon at xxxxxxxxxxxxx>
More information about the Commits
mailing list