FAILED: patch "[PATCH] xen/events: don't unmask an event channel when an eoi is" failed to apply to 4.4-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.4-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 25da4618af240fbec6112401498301a6f2bc9702 Mon Sep 17 00:00:00 2001
From: Juergen Gross <[email protected]>
Date: Sat, 6 Mar 2021 17:18:32 +0100
Subject: [PATCH] xen/events: don't unmask an event channel when an eoi is
pending
An event channel should be kept masked when an eoi is pending for it. When being migrated to another cpu it might be unmasked, though.
In order to avoid this keep three different flags for each event channel to be able to distinguish "normal" masking/unmasking from eoi related masking/unmasking and temporary masking. The event channel should only be able to generate an interrupt if all flags are cleared.
[boris -- corrected Fixed tag format]
drivers/xen/events/events_2l.c +0 -7
@@ -77,12 +77,6 @@ static bool evtchn_2l_is_pending(evtchn_port_t port)return sync_test_bit (port,BM (&s->evtchn_pending[0 ])); } -static bool evtchn_2l_test_and_set_mask (evtchn_port_t port) -{ -struct shared_info *s = HYPERVISOR_shared_info; -return sync_test_and_set_bit (port,BM (&s->evtchn_mask[0 ])); -} -static void evtchn_2l_mask (evtchn_port_t port) {struct shared_info *s = HYPERVISOR_shared_info;
@@ -376,7 +370,6 @@ static const struct evtchn_ops evtchn_ops_2l = { .clear_pending = evtchn_2l_clear_pending, .set_pending = evtchn_2l_set_pending, .is_pending = evtchn_2l_is_pending, - .test_and_set_mask = evtchn_2l_test_and_set_mask, .mask = evtchn_2l_mask, .unmask = evtchn_2l_unmask, .handle_events = evtchn_2l_handle_events,
drivers/xen/events/events_base.c +80 -21
208 lines not on this page · raw message
drivers/xen/events/events_fifo.c +0 -7
@@ -209,12 +209,6 @@ static bool evtchn_fifo_is_pending(evtchn_port_t port)return sync_test_bit (EVTCHN_FIFO_BIT (PENDING , word),BM (word)); } -static bool evtchn_fifo_test_and_set_mask (evtchn_port_t port) -{ -event_word_t *word =event_word_from_port (port); -return sync_test_and_set_bit (EVTCHN_FIFO_BIT (MASKED , word),BM (word)); -} -static void evtchn_fifo_mask (evtchn_port_t port) {event_word_t *word =event_word_from_port (port);
@@ -423,7 +417,6 @@ static const struct evtchn_ops evtchn_ops_fifo = { .clear_pending = evtchn_fifo_clear_pending, .set_pending = evtchn_fifo_set_pending, .is_pending = evtchn_fifo_is_pending, - .test_and_set_mask = evtchn_fifo_test_and_set_mask, .mask = evtchn_fifo_mask, .unmask = evtchn_fifo_unmask, .handle_events = evtchn_fifo_handle_events,
drivers/xen/events/events_internal.h +0 -6
@@ -21,7 +21,6 @@ struct evtchn_ops {void (*clear_pending)(evtchn_port_t port);void (*set_pending)(evtchn_port_t port);bool (*is_pending)(evtchn_port_t port); -bool (*test_and_set_mask)(evtchn_port_t port);void (*mask)(evtchn_port_t port);void (*unmask)(evtchn_port_t port);
@@ -84,11 +83,6 @@ static inline bool test_evtchn(evtchn_port_t port)return evtchn_ops->is_pending (port); } -static inline bool test_and_set_mask (evtchn_port_t port) -{ -return evtchn_ops->test_and_set_mask (port); -} -static inline void mask_evtchn (evtchn_port_t port) {return evtchn_ops->mask (port);