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.
This commit is contained in:
Marcel Moolenaar 2002-10-27 23:00:46 +00:00
parent d7da171b0d
commit 36cb272078

View File

@ -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);