|
Juergen Gross |
e88a4f |
From: Juergen Gross <jgross@suse.com>
|
|
Juergen Gross |
e88a4f |
Date: Mon, 12 Apr 2021 07:50:03 +0200
|
|
Juergen Gross |
e88a4f |
Subject: [PATCH] xen/events: fix setting irq affinity
|
|
Juergen Gross |
e88a4f |
Patch-mainline: Never, only applies to backports to 5.10 and older
|
|
Juergen Gross |
e88a4f |
References: bsc#1184583 XSA-332 CVE-2020-27673
|
|
Juergen Gross |
e88a4f |
|
|
Juergen Gross |
e88a4f |
The backport of upstream patch 25da4618af240fbec61 ("xen/events: don't
|
|
Juergen Gross |
e88a4f |
unmask an event channel when an eoi is pending") introduced a
|
|
Juergen Gross |
e88a4f |
regression for stable kernels 5.10 and older: setting IRQ affinity for
|
|
Juergen Gross |
e88a4f |
IRQs related to interdomain events would no longer work, as moving the
|
|
Juergen Gross |
e88a4f |
IRQ to its new cpu was not included in the irq_ack callback for those
|
|
Juergen Gross |
e88a4f |
events.
|
|
Juergen Gross |
e88a4f |
|
|
Juergen Gross |
e88a4f |
Fix that by adding the needed call.
|
|
Juergen Gross |
e88a4f |
|
|
Juergen Gross |
e88a4f |
Note that kernels 5.11 and later don't need the explicit moving of the
|
|
Juergen Gross |
e88a4f |
IRQ to the target cpu in the irq_ack callback, due to a rework of the
|
|
Juergen Gross |
e88a4f |
affinity setting in kernel 5.11.
|
|
Juergen Gross |
e88a4f |
|
|
Juergen Gross |
e88a4f |
Signed-off-by: Juergen Gross <jgross@suse.com>
|
|
Juergen Gross |
e88a4f |
---
|
|
Juergen Gross |
e88a4f |
drivers/xen/events/events_base.c | 4 ++--
|
|
Juergen Gross |
e88a4f |
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
Juergen Gross |
e88a4f |
|
|
Juergen Gross |
e88a4f |
diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
|
|
Juergen Gross |
e88a4f |
index 7bd03f6e0422..ee5269331406 100644
|
|
Juergen Gross |
e88a4f |
--- a/drivers/xen/events/events_base.c
|
|
Juergen Gross |
e88a4f |
+++ b/drivers/xen/events/events_base.c
|
|
Juergen Gross |
e88a4f |
@@ -1809,7 +1809,7 @@ static void lateeoi_ack_dynirq(struct irq_data *data)
|
|
Juergen Gross |
e88a4f |
|
|
Juergen Gross |
e88a4f |
if (VALID_EVTCHN(evtchn)) {
|
|
Juergen Gross |
e88a4f |
do_mask(info, EVT_MASK_REASON_EOI_PENDING);
|
|
Juergen Gross |
e88a4f |
- event_handler_exit(info);
|
|
Juergen Gross |
e88a4f |
+ ack_dynirq(data);
|
|
Juergen Gross |
e88a4f |
}
|
|
Juergen Gross |
e88a4f |
}
|
|
Juergen Gross |
e88a4f |
|
|
Juergen Gross |
e88a4f |
@@ -1820,7 +1820,7 @@ static void lateeoi_mask_ack_dynirq(struct irq_data *data)
|
|
Juergen Gross |
e88a4f |
|
|
Juergen Gross |
e88a4f |
if (VALID_EVTCHN(evtchn)) {
|
|
Juergen Gross |
e88a4f |
do_mask(info, EVT_MASK_REASON_EXPLICIT);
|
|
Juergen Gross |
e88a4f |
- event_handler_exit(info);
|
|
Juergen Gross |
e88a4f |
+ ack_dynirq(data);
|
|
Juergen Gross |
e88a4f |
}
|
|
Juergen Gross |
e88a4f |
}
|
|
Juergen Gross |
e88a4f |
|
|
Juergen Gross |
e88a4f |
--
|
|
Juergen Gross |
e88a4f |
2.26.2
|
|
Juergen Gross |
e88a4f |
|