| From c44b849cee8c3ac587da3b0980e01f77500d158c Mon Sep 17 00:00:00 2001 |
| From: Juergen Gross <jgross@suse.com> |
| Date: Mon, 7 Sep 2020 15:47:29 +0200 |
| Subject: xen/events: switch user event channels to lateeoi model |
| |
| From: Juergen Gross <jgross@suse.com> |
| |
| commit c44b849cee8c3ac587da3b0980e01f77500d158c upstream. |
| |
| Instead of disabling the irq when an event is received and enabling |
| it again when handled by the user process use the lateeoi model. |
| |
| This is part of XSA-332. |
| |
| Cc: stable@vger.kernel.org |
| Reported-by: Julien Grall <julien@xen.org> |
| Signed-off-by: Juergen Gross <jgross@suse.com> |
| Tested-by: Stefano Stabellini <sstabellini@kernel.org> |
| Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> |
| Reviewed-by: Jan Beulich <jbeulich@suse.com> |
| Reviewed-by: Wei Liu <wl@xen.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/xen/evtchn.c | 7 +++---- |
| 1 file changed, 3 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/xen/evtchn.c |
| +++ b/drivers/xen/evtchn.c |
| @@ -167,7 +167,6 @@ static irqreturn_t evtchn_interrupt(int |
| "Interrupt for port %u, but apparently not enabled; per-user %p\n", |
| evtchn->port, u); |
| |
| - disable_irq_nosync(irq); |
| evtchn->enabled = false; |
| |
| spin_lock(&u->ring_prod_lock); |
| @@ -293,7 +292,7 @@ static ssize_t evtchn_write(struct file |
| evtchn = find_evtchn(u, port); |
| if (evtchn && !evtchn->enabled) { |
| evtchn->enabled = true; |
| - enable_irq(irq_from_evtchn(port)); |
| + xen_irq_lateeoi(irq_from_evtchn(port), 0); |
| } |
| } |
| |
| @@ -393,8 +392,8 @@ static int evtchn_bind_to_user(struct pe |
| if (rc < 0) |
| goto err; |
| |
| - rc = bind_evtchn_to_irqhandler(port, evtchn_interrupt, 0, |
| - u->name, evtchn); |
| + rc = bind_evtchn_to_irqhandler_lateeoi(port, evtchn_interrupt, 0, |
| + u->name, evtchn); |
| if (rc < 0) |
| goto err; |
| |