svn commit: r239235 - in head/sys: amd64/amd64 i386/i386

John Baldwin jhb at FreeBSD.org
Mon Aug 13 16:33:22 UTC 2012


Author: jhb
Date: Mon Aug 13 16:33:22 2012
New Revision: 239235
URL: http://svn.freebsd.org/changeset/base/239235

Log:
  Add a 10 millisecond delay after sending the initial INIT IPI.  This
  matches the algorithm in the MP specification (1.4).  Previously we
  were sending out the deassert INIT IPI immediately after the initial
  INIT IPI was sent.

Modified:
  head/sys/amd64/amd64/mp_machdep.c
  head/sys/i386/i386/mp_machdep.c

Modified: head/sys/amd64/amd64/mp_machdep.c
==============================================================================
--- head/sys/amd64/amd64/mp_machdep.c	Mon Aug 13 16:03:30 2012	(r239234)
+++ head/sys/amd64/amd64/mp_machdep.c	Mon Aug 13 16:33:22 2012	(r239235)
@@ -1048,14 +1048,15 @@ ipi_startup(int apic_id, int vector)
 
 	/* wait for pending status end */
 	lapic_ipi_wait(-1);
+	DELAY(10000);		/* wait ~10mS */
 
 	/* do an INIT IPI: deassert RESET */
 	lapic_ipi_raw(APIC_DEST_ALLESELF | APIC_TRIGMOD_LEVEL |
 	    APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_INIT, 0);
 
 	/* wait for pending status end */
-	DELAY(10000);		/* wait ~10mS */
 	lapic_ipi_wait(-1);
+	DELAY(10000);		/* wait ~10mS */
 
 	/*
 	 * next we do a STARTUP IPI: the previous INIT IPI might still be

Modified: head/sys/i386/i386/mp_machdep.c
==============================================================================
--- head/sys/i386/i386/mp_machdep.c	Mon Aug 13 16:03:30 2012	(r239234)
+++ head/sys/i386/i386/mp_machdep.c	Mon Aug 13 16:33:22 2012	(r239235)
@@ -1148,14 +1148,15 @@ ipi_startup(int apic_id, int vector)
 
 	/* wait for pending status end */
 	lapic_ipi_wait(-1);
+	DELAY(10000);		/* wait ~10mS */
 
 	/* do an INIT IPI: deassert RESET */
 	lapic_ipi_raw(APIC_DEST_ALLESELF | APIC_TRIGMOD_LEVEL |
 	    APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_INIT, 0);
 
 	/* wait for pending status end */
-	DELAY(10000);		/* wait ~10mS */
 	lapic_ipi_wait(-1);
+	DELAY(10000);		/* wait ~10mS */
 
 	/*
 	 * next we do a STARTUP IPI: the previous INIT IPI might still be


More information about the svn-src-head mailing list