summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2012-08-13 16:33:22 +0000
committerjhb <jhb@FreeBSD.org>2012-08-13 16:33:22 +0000
commit6c62ea1c5136b13bea147d023af84b777d4219b0 (patch)
treedffa4b3ba1514b706b11288a41a6c17e80249d99
parent7ecec8f444e379720362d09cb89c3660a74f13a1 (diff)
downloadFreeBSD-src-6c62ea1c5136b13bea147d023af84b777d4219b0.zip
FreeBSD-src-6c62ea1c5136b13bea147d023af84b777d4219b0.tar.gz
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.
-rw-r--r--sys/amd64/amd64/mp_machdep.c3
-rw-r--r--sys/i386/i386/mp_machdep.c3
2 files changed, 4 insertions, 2 deletions
diff --git a/sys/amd64/amd64/mp_machdep.c b/sys/amd64/amd64/mp_machdep.c
index aa8d217..e8e7cb3 100644
--- a/sys/amd64/amd64/mp_machdep.c
+++ b/sys/amd64/amd64/mp_machdep.c
@@ -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
diff --git a/sys/i386/i386/mp_machdep.c b/sys/i386/i386/mp_machdep.c
index 727c05d..ee488e6 100644
--- a/sys/i386/i386/mp_machdep.c
+++ b/sys/i386/i386/mp_machdep.c
@@ -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
OpenPOWER on IntegriCloud