PERFORCE change 42590 for review

Peter Wemm peter at FreeBSD.org
Sun Nov 16 14:42:11 PST 2003


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

Change 42590 by peter at peter_overcee on 2003/11/16 14:41:46

	tidy up some #if's.  Note that I'm not using aliased gdt[]
	tables for each cpu.  The 'ltr' instuction (which we do only
	once on amd64) initiates a one-time copy from the selector
	to the hidden task register.  We do not need to preserve
	the GPROC0_SEL entry after the ltr finishes.  We only need
	to make sure that each cpu points to its own tss struct for its
	own tss_rsp0 value.

Affected files ...

.. //depot/projects/hammer/sys/amd64/amd64/mp_machdep.c#36 edit

Differences ...

==== //depot/projects/hammer/sys/amd64/amd64/mp_machdep.c#36 (text+ko) ====

@@ -310,13 +310,9 @@
 void
 init_secondary(void)
 {
+	struct pcpu *pc;
+	u_int64_t msr, cr0;
 	int cpu, gsel_tss;
-	u_int64_t msr;
-#if 1
-	int	x;
-#endif
-	u_int64_t cr0;
-	struct pcpu *pc;
 
 	/* Set by the startup code for us to use */
 	cpu = bootAP;
@@ -326,19 +322,8 @@
 	common_tss[cpu].tss_rsp0 = 0;   /* not used until after switch */
 
 	gdt_segs[GPROC0_SEL].ssd_base = (long) &common_tss[cpu];
-
-#if 1
-	for (x = 0; x < NGDT; x++)
-		if (x != GPROC0_SEL && x != (GPROC0_SEL + 1))
-			ssdtosd(&gdt_segs[x], &gdt[cpu * NGDT + x]);
-#endif
 	ssdtosyssd(&gdt_segs[GPROC0_SEL],
-	   (struct system_segment_descriptor *)&gdt[cpu * NGDT + GPROC0_SEL]);
-
-#if 1
-	r_gdt.rd_limit = NGDT * sizeof(gdt[0]) - 1;
-	r_gdt.rd_base = (long) &gdt[cpu * NGDT];
-#endif
+	   (struct system_segment_descriptor *)&gdt[GPROC0_SEL]);
 
 	lgdt(&r_gdt);			/* does magic intra-segment return */
 
@@ -355,15 +340,10 @@
 
 	wrmsr(MSR_FSBASE, 0);		/* User value */
 	wrmsr(MSR_GSBASE, (u_int64_t)pc);
-	wrmsr(MSR_KGSBASE, (u_int64_t)pc);		/* User value while we're in the kernel */
+	wrmsr(MSR_KGSBASE, (u_int64_t)pc);	/* XXX User value while we're in the kernel */
 
 	lidt(&r_idt);
 
-#if 1
-	/* Every 'ltr' changes the type from SDT_SYSTSS to SDT_SYSBSY */
-	((struct system_segment_descriptor *)&gdt[cpu * NGDT + GPROC0_SEL])->sd_type = SDT_SYSTSS;
-#endif
-
 	gsel_tss = GSEL(GPROC0_SEL, SEL_KPL);
 	ltr(gsel_tss);
 


More information about the p4-projects mailing list