static void gicv3_send_sgi(enum gic_sgi sgi, enum gic_sgi_mode mode,
const cpumask_t *cpumask)
{
+ /*
+ * Ensure that stores to Normal memory are visible to the other CPUs
+ * before issuing the IPI.
+ */
+ dsb(st);
+
switch ( mode )
{
case SGI_TARGET_OTHERS:
{
ASSERT(sgi < 16); /* There are only 16 SGIs */
- /*
- * Ensure that stores to Normal memory are visible to the other CPUs
- * before issuing the IPI.
- * Matches the read barrier in do_sgi.
- */
- dsb(sy);
gic_hw_ops->send_SGI(sgi, SGI_TARGET_LIST, cpumask);
}
{
ASSERT(sgi < 16); /* There are only 16 SGIs */
- /*
- * Ensure that stores to Normal memory are visible to the other CPUs
- * before issuing the IPI.
- * Matches the read barrier in do_sgi.
- */
- dsb(sy);
gic_hw_ops->send_SGI(sgi, SGI_TARGET_SELF, NULL);
}
{
ASSERT(sgi < 16); /* There are only 16 SGIs */
- /*
- * Ensure that stores to Normal memory are visible to the other CPUs
- * before issuing the IPI.
- * Matches the read barrier in do_sgi.
- */
- dsb(sy);
gic_hw_ops->send_SGI(sgi, SGI_TARGET_OTHERS, NULL);
}