Vcore TLS desc in procdata (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 31 Jul 2013 18:47:14 +0000 (11:47 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 31 Jul 2013 18:47:14 +0000 (11:47 -0700)
commit8b326cb4f249f269de9ee7d563869100ba8e9073
tree132bb6e82c6759c5f9f884da95ccec66a63b1c99
parent83d09d7eb1346115c91245d00c564f0302f93dae
Vcore TLS desc in procdata (XCC)

Userspace now tells the kernel what TLS descriptor to use for each vcore.  The
main reason is that when making a new context, the kernel would zero the TLS
base, and then userspace would quickly set it to the vcore's TLS.  On amd64,
this incurs an extra syscall (for now), and on i686, it's an extra 70ns for the
lousy-LDT mangling.  This change allows the kernel to quickly set the TLS base
(and optionally not change it if it is already correct).

Note that only amd64 uses this option in the kernel; riscv and i686 still
handle this in userspace, but also expose their tlsdesc to the kernel.

The other benefit to this is debugging - it's often helpful for me to have
access to this from the kernel.

As a historic note, this isn't the first arch-dependent tidbit in procdata.
The transition_stack (vcore's stack) was added to procdata since sparc couldn't
handle not having a stack (x86 was just loading %sp in assembly before _start).
12 files changed:
kern/arch/riscv/process.c
kern/arch/x86/process32.c
kern/arch/x86/process64.c
kern/include/process.h
kern/include/ros/event.h
kern/src/elf.c
kern/src/process.c
tests/microb_test.c
tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/start.c
user/parlib/include/vcore.h
user/parlib/uthread.c
user/parlib/vcore.c