summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarcel <marcel@FreeBSD.org>2002-10-27 23:00:46 +0000
committermarcel <marcel@FreeBSD.org>2002-10-27 23:00:46 +0000
commit63fd5e16a0a756cdbce248375cf04f37156ea1f2 (patch)
treeda0165c2f9052e6528d3ce563c07287ebdf416cf
parent97693299ea1fc11f86bb26db21267aaceef3f5ec (diff)
downloadFreeBSD-src-63fd5e16a0a756cdbce248375cf04f37156ea1f2.zip
FreeBSD-src-63fd5e16a0a756cdbce248375cf04f37156ea1f2.tar.gz
In ipi_send(), perform a mf instruction prior to initiating the IPI.
This guarantees that loads and stores emitted before the fence are made visible before the IPI becomes pended. Remove the mf.a instruction after initiating the IPI. There's no guarantee that the IPI becomes pended prior to subsequent reads or writes. Even if there was a guarantee, it would mostly be without any benefit.
-rw-r--r--sys/ia64/ia64/mp_machdep.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/ia64/ia64/mp_machdep.c b/sys/ia64/ia64/mp_machdep.c
index 68b86b6..eca8810 100644
--- a/sys/ia64/ia64/mp_machdep.c
+++ b/sys/ia64/ia64/mp_machdep.c
@@ -354,8 +354,8 @@ ipi_send(u_int64_t lid, int ipi)
vector = (u_int64_t)(ipi_vector[ipi] & 0xff);
CTR3(KTR_SMP, "ipi_send(%p, %ld), cpuid=%d", pipi, vector,
PCPU_GET(cpuid));
+ ia64_mf();
*pipi = vector;
- ia64_mf_a();
}
SYSINIT(start_aps, SI_SUB_SMP, SI_ORDER_FIRST, cpu_mp_unleash, NULL);
OpenPOWER on IntegriCloud