diff options
author | rsc <rsc> | 2009-05-31 01:12:08 +0000 |
---|---|---|
committer | rsc <rsc> | 2009-05-31 01:12:08 +0000 |
commit | 7b644318dd3b17fe5ec0229db956119986082738 (patch) | |
tree | 1e60a8628081eb2833a58d73903ff1fd7f6a1bbe | |
parent | e97519a6d2efd56eb5b5ff2e4c4b20048a33c7af (diff) | |
download | xv6-labs-7b644318dd3b17fe5ec0229db956119986082738.tar.gz xv6-labs-7b644318dd3b17fe5ec0229db956119986082738.tar.bz2 xv6-labs-7b644318dd3b17fe5ec0229db956119986082738.zip |
clean up %fs %gs use
-rw-r--r-- | bootasm.S | 3 | ||||
-rw-r--r-- | proc.c | 2 | ||||
-rw-r--r-- | trapasm.S | 3 | ||||
-rw-r--r-- | x86.h | 5 |
4 files changed, 5 insertions, 8 deletions
@@ -7,7 +7,6 @@ #define SEG_KCODE 1 // kernel code #define SEG_KDATA 2 // kernel data+stack -#define SEG_KCPU 3 // kernel per-cpu data #define CR0_PE 1 // protected mode enable bit @@ -63,7 +62,7 @@ start32: movw %ax, %ds # -> DS: Data Segment movw %ax, %es # -> ES: Extra Segment movw %ax, %ss # -> SS: Stack Segment - movw $(SEG_KCPU<<3), %ax # Our per-cpu segment selector + movw $0, %ax # Zero segments not ready for use movw %ax, %fs # -> FS movw %ax, %gs # -> GS @@ -93,9 +93,9 @@ ksegment(void) c1->gdt[SEG_UDATA] = SEG_NULL; c1->gdt[SEG_TSS] = SEG_NULL; lgdt(c1->gdt, sizeof(c1->gdt)); + loadfsgs(SEG_KCPU << 3); // Initialize cpu-local variables. - setgs(SEG_KCPU << 3); c = c1; cp = 0; } @@ -13,10 +13,7 @@ alltraps: pushal # Set up data and per-cpu segments. - # Can find out KDATA from %ss. - # Assume that KCPU is KDATA+1. movw $(SEG_KDATA<<3), %ax - movw %ss, %ax movw %ax, %ds movw %ax, %es movw $(SEG_KCPU<<3), %ax @@ -104,9 +104,10 @@ xchg(volatile uint *addr, uint newval) } static inline void -setgs(ushort gs) +loadfsgs(ushort v) { - asm volatile("movw %0, %%gs" : : "r" (gs)); + asm volatile("movw %0, %%fs" : : "r" (v)); + asm volatile("movw %0, %%gs" : : "r" (v)); } static inline void |