| From 4d3fe31bd993ef504350989786858aefdb877daa Mon Sep 17 00:00:00 2001 |
| From: Juergen Gross <jgross@suse.com> |
| Date: Mon, 7 Sep 2020 15:47:27 +0200 |
| Subject: xen/events: add a proper barrier to 2-level uevent unmasking |
| |
| From: Juergen Gross <jgross@suse.com> |
| |
| commit 4d3fe31bd993ef504350989786858aefdb877daa upstream. |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/xen/events/events_2l.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- 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 |
| |
| BUG_ON(!irqs_disabled()); |
| |
| + smp_wmb(); /* All writes before unmask must be visible. */ |
| + |
| if (unlikely((cpu != cpu_from_evtchn(port)))) |
| do_hypercall = 1; |
| else { |