|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] xen/events: fix setting irq affinity
On 12.04.2021 08:28, Juergen Gross wrote:
> The backport of upstream patch 25da4618af240fbec61 ("xen/events: don't
> unmask an event channel when an eoi is pending") introduced a
> regression for stable kernels 5.10 and older: setting IRQ affinity for
> IRQs related to interdomain events would no longer work, as moving the
> IRQ to its new cpu was not included in the irq_ack callback for those
> events.
>
> Fix that by adding the needed call.
>
> Note that kernels 5.11 and later don't need the explicit moving of the
> IRQ to the target cpu in the irq_ack callback, due to a rework of the
> affinity setting in kernel 5.11.
>
> Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
> ---
> This patch should be applied to all stable kernel branches up to
> (including) linux-5.10.y, where upstream patch 25da4618af240fbec61 has
> been added.
>
> Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
This looks functionally correct to me, so:
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
But I have remarks / questions:
> --- a/drivers/xen/events/events_base.c
> +++ b/drivers/xen/events/events_base.c
> @@ -1809,7 +1809,7 @@ static void lateeoi_ack_dynirq(struct irq_data *data)
>
> if (VALID_EVTCHN(evtchn)) {
> do_mask(info, EVT_MASK_REASON_EOI_PENDING);
> - event_handler_exit(info);
> + ack_dynirq(data);
> }
> }
>
> @@ -1820,7 +1820,7 @@ static void lateeoi_mask_ack_dynirq(struct irq_data
> *data)
>
> if (VALID_EVTCHN(evtchn)) {
> do_mask(info, EVT_MASK_REASON_EXPLICIT);
> - event_handler_exit(info);
> + ack_dynirq(data);
> }
> }
>
Can EVT_MASK_REASON_EOI_{PENDING,EXPLICIT} be cleared in a way racing
event_handler_exit() and (if it was called directly from here)
irq_move_masked_irq()? If not, the extra do_mask() / do_unmask() pair
(granted living on an "unlikely" path) could be avoided.
Even leaving aside the extra overhead in ack_dynirq()'s unlikely code
path, there's now some extra (redundant) processing. I guess this is
assumed to be within noise?
Possibly related, but first of all seeing the redundancy between
eoi_pirq() and ack_dynirq(): Wouldn't it make sense to break out the
common part into a helper? (Really the former could simply call the
latter as it seems.)
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |