Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 22 Nov 2002 19:22:35 -0800 (PST)
From:      John Baldwin <jhb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 21393 for review
Message-ID:  <200211230322.gAN3MZcY013830@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=21393

Change 21393 by jhb@jhb_laptop on 2002/11/22 19:21:35

	Untested possible fix for P4 SMP problems:
	Only do one STARTUP IPI to start up AP processors.  According
	to the part of the ia32 vol3 manual I read today, a processor
	should only be sent one INIT IPI after a hardware reset, and
	the BIOS does that, not the OS.  I'll try and test this on
	PPro's and Pentium II Xeon's when I get a chance.

Affected files ...

.. //depot/projects/smpng/sys/i386/i386/mp_machdep.c#28 edit

Differences ...

==== //depot/projects/smpng/sys/i386/i386/mp_machdep.c#28 (text+ko) ====

@@ -2141,18 +2141,21 @@
 	/* used as a watchpoint to signal AP startup */
 	cpus = mp_ncpus;
 
+#if 0
 	/*
 	 * first we do an INIT/RESET IPI this INIT IPI might be run, reseting
 	 * and running the target CPU. OR this INIT IPI might be latched (P5
 	 * bug), CPU waiting for STARTUP IPI. OR this INIT IPI might be
 	 * ignored.
 	 */
+#endif
 
 	/* setup the address for the target AP */
 	icr_hi = lapic.icr_hi & ~APIC_ID_MASK;
 	icr_hi |= (physical_cpu << 24);
 	lapic.icr_hi = icr_hi;
 
+#if 0
 	/* do an INIT IPI: assert RESET */
 	icr_lo = lapic.icr_lo & 0xfff00000;
 	lapic.icr_lo = icr_lo | 0x0000c500;
@@ -2168,6 +2171,7 @@
 	u_sleep(10000);		/* wait ~10mS */
 	while (lapic.icr_lo & APIC_DELSTAT_MASK)
 		 /* spin */ ;
+#endif
 
 	/*
 	 * next we do a STARTUP IPI: the previous INIT IPI might still be
@@ -2184,6 +2188,7 @@
 		 /* spin */ ;
 	u_sleep(200);		/* wait ~200uS */
 
+#if 0
 	/*
 	 * finally we do a 2nd STARTUP IPI: this 2nd STARTUP IPI should run IF
 	 * the previous STARTUP IPI was cancelled by a latched INIT IPI. OR
@@ -2195,6 +2200,7 @@
 	while (lapic.icr_lo & APIC_DELSTAT_MASK)
 		 /* spin */ ;
 	u_sleep(200);		/* wait ~200uS */
+#endif
 
 	/* wait for it to start */
 	set_apic_timer(5000000);/* == 5 seconds */

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe p4-projects" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200211230322.gAN3MZcY013830>