From 3756e5afbf96279571234780fea2752db6dc9ce4 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 20 Dec 2021 14:16:03 +0100 Subject: [PATCH] 5.4-stable patches added patches: revert-xsk-do-not-sleep-in-poll-when-need_wakeup-set.patch --- ...t-sleep-in-poll-when-need_wakeup-set.patch | 46 +++++++++++++++++++ queue-5.4/series | 1 + 2 files changed, 47 insertions(+) create mode 100644 queue-5.4/revert-xsk-do-not-sleep-in-poll-when-need_wakeup-set.patch diff --git a/queue-5.4/revert-xsk-do-not-sleep-in-poll-when-need_wakeup-set.patch b/queue-5.4/revert-xsk-do-not-sleep-in-poll-when-need_wakeup-set.patch new file mode 100644 index 00000000000..2f2ba44fe35 --- /dev/null +++ b/queue-5.4/revert-xsk-do-not-sleep-in-poll-when-need_wakeup-set.patch @@ -0,0 +1,46 @@ +From 0706a78f31c4217ca144f630063ec9561a21548d Mon Sep 17 00:00:00 2001 +From: Magnus Karlsson +Date: Fri, 17 Dec 2021 15:56:46 +0100 +Subject: Revert "xsk: Do not sleep in poll() when need_wakeup set" + +From: Magnus Karlsson + +commit 0706a78f31c4217ca144f630063ec9561a21548d upstream. + +This reverts commit bd0687c18e635b63233dc87f38058cd728802ab4. + +This patch causes a Tx only workload to go to sleep even when it does +not have to, leading to misserable performance in skb mode. It fixed +one rare problem but created a much worse one, so this need to be +reverted while I try to craft a proper solution to the original +problem. + +Fixes: bd0687c18e63 ("xsk: Do not sleep in poll() when need_wakeup set") +Signed-off-by: Magnus Karlsson +Signed-off-by: Daniel Borkmann +Link: https://lore.kernel.org/bpf/20211217145646.26449-1-magnus.karlsson@gmail.com +Signed-off-by: Greg Kroah-Hartman +--- + net/xdp/xsk.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/net/xdp/xsk.c ++++ b/net/xdp/xsk.c +@@ -434,6 +434,8 @@ static __poll_t xsk_poll(struct file *fi + struct xdp_sock *xs = xdp_sk(sk); + struct xdp_umem *umem; + ++ sock_poll_wait(file, sock, wait); ++ + if (unlikely(!xsk_is_bound(xs))) + return mask; + +@@ -445,8 +447,6 @@ static __poll_t xsk_poll(struct file *fi + else + /* Poll needs to drive Tx also in copy mode */ + __xsk_sendmsg(sk); +- } else { +- sock_poll_wait(file, sock, wait); + } + + if (xs->rx && !xskq_empty_desc(xs->rx)) diff --git a/queue-5.4/series b/queue-5.4/series index 7bea02a0904..bc9ad2a3765 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -63,3 +63,4 @@ scsi-scsi_debug-sanity-check-block-descriptor-length-in-resp_mode_select.patch rcu-mark-accesses-to-rcu_state.n_force_qs.patch mac80211-fix-regression-in-ssn-handling-of-addba-tx.patch net-sched-fix-suspicious-rcu-usage-while-accessing-tcf_tunnel_info.patch +revert-xsk-do-not-sleep-in-poll-when-need_wakeup-set.patch -- 2.47.3