diff options
author | marcel <marcel@FreeBSD.org> | 2002-10-27 23:00:46 +0000 |
---|---|---|
committer | marcel <marcel@FreeBSD.org> | 2002-10-27 23:00:46 +0000 |
commit | 63fd5e16a0a756cdbce248375cf04f37156ea1f2 (patch) | |
tree | da0165c2f9052e6528d3ce563c07287ebdf416cf /sys/ia64 | |
parent | 97693299ea1fc11f86bb26db21267aaceef3f5ec (diff) | |
download | FreeBSD-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.c | 2 |
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); |