clean up %fs %gs use
This commit is contained in:
parent
e97519a6d2
commit
7b644318dd
4 changed files with 5 additions and 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
|
||||
|
||||
|
|
2
proc.c
2
proc.c
|
@ -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
|
||||
|
|
5
x86.h
5
x86.h
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue