FAILED: patch "[PATCH] xen/events: reset active flag for lateeoi events later" failed to apply to 4.19-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 3de218ff39b9e3f0d453fe3154f12a174de44b25 Mon Sep 17 00:00:00 2001
From: Juergen Gross <[email protected]>
Date: Wed, 23 Jun 2021 15:09:13 +0200
Subject: [PATCH] xen/events: reset active flag for lateeoi events later
In order to avoid a race condition for user events when changing cpu affinity reset the active flag only when EOI-ing the event.
This is working fine as all user events are lateeoi events. Note that lateeoi_ack_mask_dynirq() is not modified as there is no explicit call to xen_irq_lateeoi() expected later.
drivers/xen/events/events_base.c +10 -1
@@ -642,6 +642,9 @@ static void xen_irq_lateeoi_locked(struct irq_info *info, bool spurious) } info->eoi_time =0 ; + +/* is_active hasn't been reset yet, do it now. */ +smp_store_release (&info->is_active,0 );do_unmask (info,EVT_MASK_REASON_EOI_PENDING ); }
@@ -811,6 +814,7 @@ static void xen_evtchn_close(evtchn_port_t port)BUG (); } +/* Not called for lateeoi events. */ static void event_handler_exit (struct irq_info *info) {smp_store_release (&info->is_active,0 );
@@ -1883,7 +1887,12 @@ 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); +/* +* Don't call event_handler_exit(). +* Need to keep is_active non-zero in order to ignore re-raised +* events after cpu affinity changes while a lateeoi is pending. +*/ +clear_evtchn (evtchn); } }