PERFORCE change 31200 for review
Peter Wemm
peter at FreeBSD.org
Wed May 14 15:13:42 PDT 2003
http://perforce.freebsd.org/chv.cgi?CH=31200
Change 31200 by peter at peter_hammer on 2003/05/14 15:13:01
Dig out of a hole. Dont context switch the kernel gsbase.
Just preserve it across %gs loads, thats all we need.
Affected files ...
.. //depot/projects/hammer/sys/amd64/amd64/cpu_switch.S#6 edit
.. //depot/projects/hammer/sys/amd64/amd64/genassym.c#16 edit
.. //depot/projects/hammer/sys/amd64/amd64/machdep.c#36 edit
.. //depot/projects/hammer/sys/amd64/ia32/ia32_sysvec.c#7 edit
.. //depot/projects/hammer/sys/amd64/include/pcb.h#10 edit
Differences ...
==== //depot/projects/hammer/sys/amd64/amd64/cpu_switch.S#6 (text+ko) ====
@@ -106,12 +106,6 @@
pushfq /* PSL */
popq PCB_RFLAGS(%r8)
- /* Save kernel %gs.base */
- movl $MSR_GSBASE,%ecx
- rdmsr
- movl %eax,PCB_KGSBASE(%r8)
- movl %edx,PCB_KGSBASE+4(%r8)
-
/* Save userland %fs */
movl $MSR_FSBASE,%ecx
rdmsr
@@ -176,12 +170,11 @@
movl PCB_DS(%r8),%ds
movl PCB_ES(%r8),%es
movl PCB_FS(%r8),%fs
- movl PCB_GS(%r8),%gs
- /* Restore kernel %gs.base */
+ /* Restore userland %gs while preserving kernel gsbase */
movl $MSR_GSBASE,%ecx
- movl PCB_KGSBASE(%r8),%eax
- movl PCB_KGSBASE+4(%r8),%edx
+ rdmsr
+ movl PCB_GS(%r8),%gs
wrmsr
/* Restore userland %fs */
==== //depot/projects/hammer/sys/amd64/amd64/genassym.c#16 (text+ko) ====
@@ -125,7 +125,6 @@
ASSYM(PCB_RFLAGS, offsetof(struct pcb, pcb_rflags));
ASSYM(PCB_FSBASE, offsetof(struct pcb, pcb_fsbase));
ASSYM(PCB_GSBASE, offsetof(struct pcb, pcb_gsbase));
-ASSYM(PCB_KGSBASE, offsetof(struct pcb, pcb_kgsbase));
ASSYM(PCB_DS, offsetof(struct pcb, pcb_ds));
ASSYM(PCB_ES, offsetof(struct pcb, pcb_es));
ASSYM(PCB_FS, offsetof(struct pcb, pcb_fs));
==== //depot/projects/hammer/sys/amd64/amd64/machdep.c#36 (text+ko) ====
@@ -481,7 +481,6 @@
wrmsr(MSR_KGSBASE, 0); /* User value while we're in the kernel */
pcb->pcb_fsbase = 0;
pcb->pcb_gsbase = 0;
- pcb->pcb_kgsbase = rdmsr(MSR_GSBASE);
load_ds(_udatasel);
load_es(_udatasel);
load_fs(_udatasel);
@@ -1312,7 +1311,6 @@
/* setup proc 0's pcb */
thread0.td_pcb->pcb_flags = 0; /* XXXKSE */
thread0.td_pcb->pcb_cr3 = IdlePML4;
- thread0.td_pcb->pcb_kgsbase = (u_int64_t)pc;
thread0.td_frame = &proc0_tf;
}
==== //depot/projects/hammer/sys/amd64/ia32/ia32_sysvec.c#7 (text+ko) ====
@@ -246,7 +246,6 @@
wrmsr(MSR_KGSBASE, 0); /* User value while we're in the kernel */
pcb->pcb_fsbase = 0;
pcb->pcb_gsbase = 0;
- pcb->pcb_kgsbase = rdmsr(MSR_GSBASE);
load_ds(_udatasel);
load_es(_udatasel);
load_fs(_udatasel);
==== //depot/projects/hammer/sys/amd64/include/pcb.h#10 (text+ko) ====
@@ -59,7 +59,6 @@
register_t pcb_rflags;
register_t pcb_fsbase;
register_t pcb_gsbase;
- register_t pcb_kgsbase;
u_int32_t pcb_ds;
u_int32_t pcb_es;
u_int32_t pcb_fs;
More information about the p4-projects
mailing list