PERFORCE change 149440 for review

Peter Wemm peter at FreeBSD.org
Mon Sep 8 20:28:23 UTC 2008


http://perforce.freebsd.org/chv.cgi?CH=149440

Change 149440 by peter at peter_overcee on 2008/09/08 20:27:38

	revert fsbase/gsbase tweaks.  OBE.

Affected files ...

.. //depot/projects/hammer/sys/amd64/amd64/cpu_switch.S#49 edit
.. //depot/projects/hammer/sys/amd64/amd64/genassym.c#55 edit
.. //depot/projects/hammer/sys/amd64/amd64/machdep.c#172 edit
.. //depot/projects/hammer/sys/amd64/amd64/sys_machdep.c#28 edit
.. //depot/projects/hammer/sys/amd64/amd64/vm_machdep.c#93 edit
.. //depot/projects/hammer/sys/amd64/ia32/ia32_signal.c#27 edit
.. //depot/projects/hammer/sys/amd64/include/pcpu.h#32 edit
.. //depot/projects/hammer/sys/amd64/linux32/linux32_machdep.c#24 edit
.. //depot/projects/hammer/sys/amd64/linux32/linux32_sysvec.c#22 edit

Differences ...

==== //depot/projects/hammer/sys/amd64/amd64/cpu_switch.S#49 (text+ko) ====

@@ -84,7 +84,6 @@
 	movq	TD_PCB(%rsi),%r8		/* newtd->td_proc */
 	movq	PCB_CR3(%r8),%rdx
 	movq	%rdx,%cr3			/* new address space */
-	movq    TD_PCB(%rsi),%r8
 	jmp	swact
 END(cpu_throw)
 
@@ -191,33 +190,27 @@
 
 	/* Skip loading user fsbase/gsbase for kthreads */
 	testl	$TDP_KTHREAD,TD_PFLAGS(%rsi)
-	jnz	do_tss
+	jnz	do_kthread
 
 	testl	$PCB_32BIT,PCB_FLAGS(%r8)
 	jnz	load_seg
 done_load_seg:
-	movq	PCPU(FSBASE),%r10
-	movq	PCPU(GSBASE),%r11
 
-	cmpq	PCB_FSBASE(%r8),%r10
+	cmpq	PCB_FSBASE(%r8),%r9
 	jz	1f
 	/* Restore userland %fs */
 	movl	$MSR_FSBASE,%ecx
 	movl	PCB_FSBASE(%r8),%eax
 	movl	PCB_FSBASE+4(%r8),%edx
 	wrmsr
-	movq	PCB_FSBASE(%r8),%rax
-	movq	%rax,PCPU(FSBASE)
 1:
-	cmpq	PCB_GSBASE(%r8),%r11
+	cmpq	PCB_GSBASE(%r8),%r10
 	jz	2f
 	/* Restore userland %gs */
 	movl	$MSR_KGSBASE,%ecx
 	movl	PCB_GSBASE(%r8),%eax
 	movl	PCB_GSBASE+4(%r8),%edx
 	wrmsr
-	movq	PCB_GSBASE(%r8),%rax
-	movq	%rax,PCPU(GSBASE)
 2:
 
 do_tss:

==== //depot/projects/hammer/sys/amd64/amd64/genassym.c#55 (text+ko) ====

@@ -199,8 +199,6 @@
 ASSYM(PC_TSSP, offsetof(struct pcpu, pc_tssp));
 ASSYM(PC_RSP0, offsetof(struct pcpu, pc_rsp0));
 ASSYM(PC_GS32P, offsetof(struct pcpu, pc_gs32p));
-ASSYM(PC_FSBASE, offsetof(struct pcpu, pc_fsbase));
-ASSYM(PC_GSBASE, offsetof(struct pcpu, pc_gsbase));
  
 ASSYM(LA_VER, offsetof(struct LAPIC, version));
 ASSYM(LA_TPR, offsetof(struct LAPIC, tpr));

==== //depot/projects/hammer/sys/amd64/amd64/machdep.c#172 (text+ko) ====

@@ -732,8 +732,6 @@
 	critical_enter();
 	wrmsr(MSR_FSBASE, 0);
 	wrmsr(MSR_KGSBASE, 0);	/* User value while we're in the kernel */
-	PCPU_SET(fsbase, 0);
-	PCPU_SET(gsbase, 0);
 	pcb->pcb_fsbase = 0;
 	pcb->pcb_gsbase = 0;
 	critical_exit();

==== //depot/projects/hammer/sys/amd64/amd64/sys_machdep.c#28 (text+ko) ====

@@ -73,7 +73,6 @@
 		if (!error) {
 			critical_enter();
 			wrmsr(MSR_FSBASE, i386base);
-			PCPU_SET(fsbase, i386base);
 			pcb->pcb_fsbase = i386base;
 			critical_exit();
 		}
@@ -87,7 +86,6 @@
 		if (!error) {
 			critical_enter();
 			wrmsr(MSR_KGSBASE, i386base);
-			PCPU_SET(gsbase, i386base);
 			pcb->pcb_gsbase = i386base;
 			critical_exit();
 		}
@@ -102,7 +100,6 @@
 			if (a64base < VM_MAXUSER_ADDRESS) {
 				critical_enter();
 				wrmsr(MSR_FSBASE, a64base);
-				PCPU_SET(fsbase, a64base);
 				pcb->pcb_fsbase = a64base;
 				critical_exit();
 			} else {
@@ -121,7 +118,6 @@
 			if (a64base < VM_MAXUSER_ADDRESS) {
 				critical_enter();
 				wrmsr(MSR_KGSBASE, a64base);
-				PCPU_SET(gsbase, a64base);
 				pcb->pcb_gsbase = a64base;
 				critical_exit();
 			} else {

==== //depot/projects/hammer/sys/amd64/amd64/vm_machdep.c#93 (text+ko) ====

@@ -374,7 +374,6 @@
 			critical_enter();
 			td->td_pcb->pcb_gsbase = (register_t)tls_base;
 			wrmsr(MSR_KGSBASE, td->td_pcb->pcb_gsbase);
-			PCPU_SET(gsbase, td->td_pcb->pcb_gsbase);
 			critical_exit();
 		} else {
 			td->td_pcb->pcb_gsbase = (register_t)tls_base;
@@ -386,7 +385,6 @@
 		critical_enter();
 		td->td_pcb->pcb_fsbase = (register_t)tls_base;
 		wrmsr(MSR_FSBASE, td->td_pcb->pcb_fsbase);
-		PCPU_SET(fsbase, td->td_pcb->pcb_fsbase);
 		critical_exit();
 	} else {
 		td->td_pcb->pcb_fsbase = (register_t)tls_base;

==== //depot/projects/hammer/sys/amd64/ia32/ia32_signal.c#27 (text+ko) ====

@@ -718,8 +718,6 @@
 	critical_enter();
 	wrmsr(MSR_FSBASE, 0);
 	wrmsr(MSR_KGSBASE, 0);	/* User value while we're in the kernel */
-	PCPU_SET(fsbase, 0);
-	PCPU_SET(gsbase, 0);
 	pcb->pcb_fsbase = 0;
 	pcb->pcb_gsbase = 0;
 	critical_exit();

==== //depot/projects/hammer/sys/amd64/include/pcpu.h#32 (text+ko) ====

@@ -49,9 +49,7 @@
 	register_t pc_scratch_rsp;	/* User %rsp in syscall */	\
 	u_int	pc_apic_id;						\
 	u_int   pc_acpi_id;		/* ACPI CPU id */		\
-	struct user_segment_descriptor	*pc_gs32p;			\
-	register_t pc_fsbase;		/* User values of fsbase */	\
-	register_t pc_gsbase		/* User values of gsbase */
+	struct user_segment_descriptor	*pc_gs32p
 
 #ifdef _KERNEL
 #define PCPU_MD_ALIGN	__aligned(64)	/* use unique cache line per entry */

==== //depot/projects/hammer/sys/amd64/linux32/linux32_machdep.c#24 (text+ko) ====

@@ -1354,7 +1354,6 @@
 	td->td_pcb->pcb_gs32sd = *PCPU_GET(gs32p) = sd;
 	td->td_pcb->pcb_flags |= PCB_32BIT | PCB_GS32BIT;
 	wrmsr(MSR_KGSBASE, td->td_pcb->pcb_gsbase);
-	PCPU_SET(gsbase, td->td_pcb->pcb_gsbase);
 	critical_exit();
 
 	return (0);

==== //depot/projects/hammer/sys/amd64/linux32/linux32_sysvec.c#22 (text+ko) ====

@@ -820,8 +820,6 @@
 	critical_enter();
 	wrmsr(MSR_FSBASE, 0);
 	wrmsr(MSR_KGSBASE, 0);	/* User value while we're in the kernel */
-	PCPU_SET(fsbase, 0);
-	PCPU_SET(gsbase, 0);
 	pcb->pcb_fsbase = 0;
 	pcb->pcb_gsbase = 0;
 	critical_exit();


More information about the p4-projects mailing list