x86_64: GS base work
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 28 Jun 2013 00:08:21 +0000 (17:08 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 28 Jun 2013 00:22:12 +0000 (17:22 -0700)
commit91b1e3b828e8645533de949644582241566e3e66
tree80894691998fb1f70479f70cd3bff4c869b51cb4
parent858b0f64e75df4f07d9060e0957d1c88973976a9
x86_64: GS base work

The kernel uses GS base to point to pcpu info, and will make sure this is set
up on entry.  It's also important to reset KERN_GS_BASE before we reenable
interrupts.  The assumption is that on entry from any trap/irq, that the
correct kernel GS base is in KERN_GS_BASE.

We don't actually need to swapgs in trap and irq code, but it'll make it easier
to save the user contexts directly into pcpui->cur_tf in the future.

Also note that we're not even going to bother saving and restoring fs and gs -
just the base registers.  This also goes for ds and es, meaning it is possible
for one application to see the ds of a previous program running on that core.
AFAIK, the hardware just ignores DS and ES's internal registers, so if a
program randomly sets DS, it shouldn't hurt the kernel or another process.
kern/arch/x86/cpuinfo.c
kern/arch/x86/entry64.S
kern/arch/x86/process64.c
kern/arch/x86/ros/trapframe64.h
kern/arch/x86/smp_boot.c
kern/arch/x86/trap.c
kern/arch/x86/trap64.c
kern/arch/x86/trapentry64.S
kern/arch/x86/x86.h