summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuergen Gross <jgross@suse.com>2020-09-07 16:47:27 +0300
committerJuergen Gross <jgross@suse.com>2020-10-20 11:21:56 +0300
commit4d3fe31bd993ef504350989786858aefdb877daa (patch)
treedac6d35619f36e8e1c82572e84806e708251af5b
parent073d0552ead5bfc7a3a9c01de590e924f11b5dd2 (diff)
downloadlinux-4d3fe31bd993ef504350989786858aefdb877daa.tar.xz
xen/events: add a proper barrier to 2-level uevent unmasking
A follow-up patch will require certain write to happen before an event channel is unmasked. While the memory barrier is not strictly necessary for all the callers, the main one will need it. In order to avoid an extra memory barrier when using fifo event channels, mandate evtchn_unmask() to provide write ordering. The 2-level event handling unmask operation is missing an appropriate barrier, so add it. Fifo event channels are fine in this regard due to using sync_cmpxchg(). This is part of XSA-332. Cc: stable@vger.kernel.org Suggested-by: Julien Grall <julien@xen.org> Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Julien Grall <jgrall@amazon.com> Reviewed-by: Wei Liu <wl@xen.org>
-rw-r--r--drivers/xen/events/events_2l.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/xen/events/events_2l.c b/drivers/xen/events/events_2l.c
index 64df919a2111..e1af5e093ff4 100644
--- a/drivers/xen/events/events_2l.c
+++ b/drivers/xen/events/events_2l.c
@@ -91,6 +91,8 @@ static void evtchn_2l_unmask(evtchn_port_t port)
BUG_ON(!irqs_disabled());
+ smp_wmb(); /* All writes before unmask must be visible. */
+
if (unlikely((cpu != cpu_from_evtchn(port))))
do_hypercall = 1;
else {