summaryrefslogtreecommitdiffstats
path: root/sys/ia64
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 /sys/ia64
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.
Diffstat (limited to 'sys/ia64')
-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