From b4ca08c8b8a177bde1bcc743e82ff8c5e3407eb4 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 24 Jan 2022 14:20:49 +0100 Subject: [PATCH] 4.14-stable patches added patches: dmaengine-at_xdmac-don-t-start-transactions-at-tx_submit-level.patch libcxgb-don-t-accidentally-set-rto_onlink-in-cxgb_find_route.patch net-axienet-fix-number-of-tx-ring-slots-for-available-check.patch netns-add-schedule-point-in-ops_exit_list.patch --- ...tart-transactions-at-tx_submit-level.patch | 53 +++++++++++++++++++ ...ly-set-rto_onlink-in-cxgb_find_route.patch | 44 +++++++++++++++ ...of-tx-ring-slots-for-available-check.patch | 41 ++++++++++++++ ...-add-schedule-point-in-ops_exit_list.patch | 47 ++++++++++++++++ queue-4.14/series | 4 ++ 5 files changed, 189 insertions(+) create mode 100644 queue-4.14/dmaengine-at_xdmac-don-t-start-transactions-at-tx_submit-level.patch create mode 100644 queue-4.14/libcxgb-don-t-accidentally-set-rto_onlink-in-cxgb_find_route.patch create mode 100644 queue-4.14/net-axienet-fix-number-of-tx-ring-slots-for-available-check.patch create mode 100644 queue-4.14/netns-add-schedule-point-in-ops_exit_list.patch diff --git a/queue-4.14/dmaengine-at_xdmac-don-t-start-transactions-at-tx_submit-level.patch b/queue-4.14/dmaengine-at_xdmac-don-t-start-transactions-at-tx_submit-level.patch new file mode 100644 index 00000000000..81021996262 --- /dev/null +++ b/queue-4.14/dmaengine-at_xdmac-don-t-start-transactions-at-tx_submit-level.patch @@ -0,0 +1,53 @@ +From bccfb96b59179d4f96cbbd1ddff8fac6d335eae4 Mon Sep 17 00:00:00 2001 +From: Tudor Ambarus +Date: Wed, 15 Dec 2021 13:01:04 +0200 +Subject: dmaengine: at_xdmac: Don't start transactions at tx_submit level + +From: Tudor Ambarus + +commit bccfb96b59179d4f96cbbd1ddff8fac6d335eae4 upstream. + +tx_submit is supposed to push the current transaction descriptor to a +pending queue, waiting for issue_pending() to be called. issue_pending() +must start the transfer, not tx_submit(), thus remove +at_xdmac_start_xfer() from at_xdmac_tx_submit(). Clients of at_xdmac that +assume that tx_submit() starts the transfer must be updated and call +dma_async_issue_pending() if they miss to call it (one example is +atmel_serial). + +As the at_xdmac_start_xfer() is now called only from +at_xdmac_advance_work() when !at_xdmac_chan_is_enabled(), the +at_xdmac_chan_is_enabled() check is no longer needed in +at_xdmac_start_xfer(), thus remove it. + +Fixes: e1f7c9eee707 ("dmaengine: at_xdmac: creation of the atmel eXtended DMA Controller driver") +Signed-off-by: Tudor Ambarus +Link: https://lore.kernel.org/r/20211215110115.191749-2-tudor.ambarus@microchip.com +Signed-off-by: Vinod Koul +Signed-off-by: Greg Kroah-Hartman +--- + drivers/dma/at_xdmac.c | 6 ------ + 1 file changed, 6 deletions(-) + +--- a/drivers/dma/at_xdmac.c ++++ b/drivers/dma/at_xdmac.c +@@ -344,9 +344,6 @@ static void at_xdmac_start_xfer(struct a + + dev_vdbg(chan2dev(&atchan->chan), "%s: desc 0x%p\n", __func__, first); + +- if (at_xdmac_chan_is_enabled(atchan)) +- return; +- + /* Set transfer as active to not try to start it again. */ + first->active_xfer = true; + +@@ -430,9 +427,6 @@ static dma_cookie_t at_xdmac_tx_submit(s + dev_vdbg(chan2dev(tx->chan), "%s: atchan 0x%p, add desc 0x%p to xfers_list\n", + __func__, atchan, desc); + list_add_tail(&desc->xfer_node, &atchan->xfers_list); +- if (list_is_singular(&atchan->xfers_list)) +- at_xdmac_start_xfer(atchan, desc); +- + spin_unlock_irqrestore(&atchan->lock, irqflags); + return cookie; + } diff --git a/queue-4.14/libcxgb-don-t-accidentally-set-rto_onlink-in-cxgb_find_route.patch b/queue-4.14/libcxgb-don-t-accidentally-set-rto_onlink-in-cxgb_find_route.patch new file mode 100644 index 00000000000..8da60fd020d --- /dev/null +++ b/queue-4.14/libcxgb-don-t-accidentally-set-rto_onlink-in-cxgb_find_route.patch @@ -0,0 +1,44 @@ +From a915deaa9abe4fb3a440312c954253a6a733608e Mon Sep 17 00:00:00 2001 +From: Guillaume Nault +Date: Mon, 10 Jan 2022 14:43:11 +0100 +Subject: libcxgb: Don't accidentally set RTO_ONLINK in cxgb_find_route() + +From: Guillaume Nault + +commit a915deaa9abe4fb3a440312c954253a6a733608e upstream. + +Mask the ECN bits before calling ip_route_output_ports(). The tos +variable might be passed directly from an IPv4 header, so it may have +the last ECN bit set. This interferes with the route lookup process as +ip_route_output_key_hash() interpretes this bit specially (to restrict +the route scope). + +Found by code inspection, compile tested only. + +Fixes: 804c2f3e36ef ("libcxgb,iw_cxgb4,cxgbit: add cxgb_find_route()") +Signed-off-by: Guillaume Nault +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/chelsio/libcxgb/libcxgb_cm.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/net/ethernet/chelsio/libcxgb/libcxgb_cm.c ++++ b/drivers/net/ethernet/chelsio/libcxgb/libcxgb_cm.c +@@ -32,6 +32,7 @@ + + #include + #include ++#include + #include + #include + +@@ -99,7 +100,7 @@ cxgb_find_route(struct cxgb4_lld_info *l + + rt = ip_route_output_ports(&init_net, &fl4, NULL, peer_ip, local_ip, + peer_port, local_port, IPPROTO_TCP, +- tos, 0); ++ tos & ~INET_ECN_MASK, 0); + if (IS_ERR(rt)) + return NULL; + n = dst_neigh_lookup(&rt->dst, &peer_ip); diff --git a/queue-4.14/net-axienet-fix-number-of-tx-ring-slots-for-available-check.patch b/queue-4.14/net-axienet-fix-number-of-tx-ring-slots-for-available-check.patch new file mode 100644 index 00000000000..c2d9119be00 --- /dev/null +++ b/queue-4.14/net-axienet-fix-number-of-tx-ring-slots-for-available-check.patch @@ -0,0 +1,41 @@ +From aba57a823d2985a2cc8c74a2535f3a88e68d9424 Mon Sep 17 00:00:00 2001 +From: Robert Hancock +Date: Tue, 18 Jan 2022 15:41:30 -0600 +Subject: net: axienet: fix number of TX ring slots for available check + +From: Robert Hancock + +commit aba57a823d2985a2cc8c74a2535f3a88e68d9424 upstream. + +The check for the number of available TX ring slots was off by 1 since a +slot is required for the skb header as well as each fragment. This could +result in overwriting a TX ring slot that was still in use. + +Fixes: 8a3b7a252dca9 ("drivers/net/ethernet/xilinx: added Xilinx AXI Ethernet driver") +Signed-off-by: Robert Hancock +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c ++++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c +@@ -682,7 +682,7 @@ axienet_start_xmit(struct sk_buff *skb, + num_frag = skb_shinfo(skb)->nr_frags; + cur_p = &lp->tx_bd_v[lp->tx_bd_tail]; + +- if (axienet_check_tx_bd_space(lp, num_frag)) { ++ if (axienet_check_tx_bd_space(lp, num_frag + 1)) { + if (netif_queue_stopped(ndev)) + return NETDEV_TX_BUSY; + +@@ -692,7 +692,7 @@ axienet_start_xmit(struct sk_buff *skb, + smp_mb(); + + /* Space might have just been freed - check again */ +- if (axienet_check_tx_bd_space(lp, num_frag)) ++ if (axienet_check_tx_bd_space(lp, num_frag + 1)) + return NETDEV_TX_BUSY; + + netif_wake_queue(ndev); diff --git a/queue-4.14/netns-add-schedule-point-in-ops_exit_list.patch b/queue-4.14/netns-add-schedule-point-in-ops_exit_list.patch new file mode 100644 index 00000000000..c099ac7bf25 --- /dev/null +++ b/queue-4.14/netns-add-schedule-point-in-ops_exit_list.patch @@ -0,0 +1,47 @@ +From 2836615aa22de55b8fca5e32fe1b27a67cda625e Mon Sep 17 00:00:00 2001 +From: Eric Dumazet +Date: Tue, 18 Jan 2022 03:43:40 -0800 +Subject: netns: add schedule point in ops_exit_list() + +From: Eric Dumazet + +commit 2836615aa22de55b8fca5e32fe1b27a67cda625e upstream. + +When under stress, cleanup_net() can have to dismantle +netns in big numbers. ops_exit_list() currently calls +many helpers [1] that have no schedule point, and we can +end up with soft lockups, particularly on hosts +with many cpus. + +Even for moderate amount of netns processed by cleanup_net() +this patch avoids latency spikes. + +[1] Some of these helpers like fib_sync_up() and fib_sync_down_dev() +are very slow because net/ipv4/fib_semantics.c uses host-wide hash tables, +and ifindex is used as the only input of two hash functions. + ifindexes tend to be the same for all netns (lo.ifindex==1 per instance) + This will be fixed in a separate patch. + +Fixes: 72ad937abd0a ("net: Add support for batching network namespace cleanups") +Signed-off-by: Eric Dumazet +Cc: Eric W. Biederman +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + net/core/net_namespace.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/net/core/net_namespace.c ++++ b/net/core/net_namespace.c +@@ -138,8 +138,10 @@ static void ops_exit_list(const struct p + { + struct net *net; + if (ops->exit) { +- list_for_each_entry(net, net_exit_list, exit_list) ++ list_for_each_entry(net, net_exit_list, exit_list) { + ops->exit(net); ++ cond_resched(); ++ } + } + if (ops->exit_batch) + ops->exit_batch(net_exit_list); diff --git a/queue-4.14/series b/queue-4.14/series index 71743bbc489..5eebd46e4a6 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -169,3 +169,7 @@ net-fsl-xgmac_mdio-fix-incorrect-iounmap-when-removing-module.patch parisc-pdc_stable-fix-memory-leak-in-pdcs_register_pathentries.patch af_unix-annote-lockless-accesses-to-unix_tot_inflight-gc_in_progress.patch net-axienet-wait-for-phyrstcmplt-after-core-reset.patch +net-axienet-fix-number-of-tx-ring-slots-for-available-check.patch +netns-add-schedule-point-in-ops_exit_list.patch +libcxgb-don-t-accidentally-set-rto_onlink-in-cxgb_find_route.patch +dmaengine-at_xdmac-don-t-start-transactions-at-tx_submit-level.patch -- 2.47.3