]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
drop some 6.1 patches that needed too many "fix ups" to warrent them being here
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 27 Oct 2025 11:50:56 +0000 (12:50 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 27 Oct 2025 11:50:56 +0000 (12:50 +0100)
queue-6.1/net-enetc-fix-the-deadlock-of-enetc_mdio_lock.patch [deleted file]
queue-6.1/net-ethernet-enetc-unlock-xdp_redirect-for-xdp-non-l.patch [deleted file]
queue-6.1/net-fec-add-initial-xdp-support.patch [deleted file]
queue-6.1/net-tree-wide-replace-xdp_do_flush_map-with-xdp_do_f.patch [deleted file]
queue-6.1/series

diff --git a/queue-6.1/net-enetc-fix-the-deadlock-of-enetc_mdio_lock.patch b/queue-6.1/net-enetc-fix-the-deadlock-of-enetc_mdio_lock.patch
deleted file mode 100644 (file)
index f5a91cb..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-From 18c00ec29df3d353de5407578e2bfe84f63c76dc Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 15 Oct 2025 10:14:27 +0800
-Subject: net: enetc: fix the deadlock of enetc_mdio_lock
-
-From: Jianpeng Chang <jianpeng.chang.cn@windriver.com>
-
-[ Upstream commit 50bd33f6b3922a6b760aa30d409cae891cec8fb5 ]
-
-After applying the workaround for err050089, the LS1028A platform
-experiences RCU stalls on RT kernel. This issue is caused by the
-recursive acquisition of the read lock enetc_mdio_lock. Here list some
-of the call stacks identified under the enetc_poll path that may lead to
-a deadlock:
-
-enetc_poll
-  -> enetc_lock_mdio
-  -> enetc_clean_rx_ring OR napi_complete_done
-     -> napi_gro_receive
-        -> enetc_start_xmit
-           -> enetc_lock_mdio
-           -> enetc_map_tx_buffs
-           -> enetc_unlock_mdio
-  -> enetc_unlock_mdio
-
-After enetc_poll acquires the read lock, a higher-priority writer attempts
-to acquire the lock, causing preemption. The writer detects that a
-read lock is already held and is scheduled out. However, readers under
-enetc_poll cannot acquire the read lock again because a writer is already
-waiting, leading to a thread hang.
-
-Currently, the deadlock is avoided by adjusting enetc_lock_mdio to prevent
-recursive lock acquisition.
-
-Fixes: 6d36ecdbc441 ("net: enetc: take the MDIO lock only once per NAPI poll cycle")
-Signed-off-by: Jianpeng Chang <jianpeng.chang.cn@windriver.com>
-Acked-by: Wei Fang <wei.fang@nxp.com>
-Link: https://patch.msgid.link/20251015021427.180757-1-jianpeng.chang.cn@windriver.com
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/freescale/enetc/enetc.c | 25 ++++++++++++++++----
- 1 file changed, 21 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c
-index 44ae1d2c34fd6..ed1db7f056e66 100644
---- a/drivers/net/ethernet/freescale/enetc/enetc.c
-+++ b/drivers/net/ethernet/freescale/enetc/enetc.c
-@@ -1225,6 +1225,8 @@ static int enetc_clean_rx_ring(struct enetc_bdr *rx_ring,
-       /* next descriptor to process */
-       i = rx_ring->next_to_clean;
-+      enetc_lock_mdio();
-+
-       while (likely(rx_frm_cnt < work_limit)) {
-               union enetc_rx_bd *rxbd;
-               struct sk_buff *skb;
-@@ -1260,7 +1262,9 @@ static int enetc_clean_rx_ring(struct enetc_bdr *rx_ring,
-               rx_byte_cnt += skb->len + ETH_HLEN;
-               rx_frm_cnt++;
-+              enetc_unlock_mdio();
-               napi_gro_receive(napi, skb);
-+              enetc_lock_mdio();
-       }
-       rx_ring->next_to_clean = i;
-@@ -1268,6 +1272,8 @@ static int enetc_clean_rx_ring(struct enetc_bdr *rx_ring,
-       rx_ring->stats.packets += rx_frm_cnt;
-       rx_ring->stats.bytes += rx_byte_cnt;
-+      enetc_unlock_mdio();
-+
-       return rx_frm_cnt;
- }
-@@ -1572,6 +1578,8 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring,
-       /* next descriptor to process */
-       i = rx_ring->next_to_clean;
-+      enetc_lock_mdio();
-+
-       while (likely(rx_frm_cnt < work_limit)) {
-               union enetc_rx_bd *rxbd, *orig_rxbd;
-               int orig_i, orig_cleaned_cnt;
-@@ -1631,7 +1639,9 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring,
-                       if (unlikely(!skb))
-                               goto out;
-+                      enetc_unlock_mdio();
-                       napi_gro_receive(napi, skb);
-+                      enetc_lock_mdio();
-                       break;
-               case XDP_TX:
-                       tx_ring = priv->xdp_tx_ring[rx_ring->index];
-@@ -1660,7 +1670,9 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring,
-                       }
-                       break;
-               case XDP_REDIRECT:
-+                      enetc_unlock_mdio();
-                       err = xdp_do_redirect(rx_ring->ndev, &xdp_buff, prog);
-+                      enetc_lock_mdio();
-                       if (unlikely(err)) {
-                               enetc_xdp_drop(rx_ring, orig_i, i);
-                               rx_ring->stats.xdp_redirect_failures++;
-@@ -1680,8 +1692,11 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring,
-       rx_ring->stats.packets += rx_frm_cnt;
-       rx_ring->stats.bytes += rx_byte_cnt;
--      if (xdp_redirect_frm_cnt)
-+      if (xdp_redirect_frm_cnt) {
-+              enetc_unlock_mdio();
-               xdp_do_flush();
-+              enetc_lock_mdio();
-+      }
-       if (xdp_tx_frm_cnt)
-               enetc_update_tx_ring_tail(tx_ring);
-@@ -1690,6 +1705,8 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring,
-               enetc_refill_rx_ring(rx_ring, enetc_bd_unused(rx_ring) -
-                                    rx_ring->xdp.xdp_tx_in_flight);
-+      enetc_unlock_mdio();
-+
-       return rx_frm_cnt;
- }
-@@ -1708,6 +1725,7 @@ static int enetc_poll(struct napi_struct *napi, int budget)
-       for (i = 0; i < v->count_tx_rings; i++)
-               if (!enetc_clean_tx_ring(&v->tx_ring[i], budget))
-                       complete = false;
-+      enetc_unlock_mdio();
-       prog = rx_ring->xdp.prog;
-       if (prog)
-@@ -1719,10 +1737,8 @@ static int enetc_poll(struct napi_struct *napi, int budget)
-       if (work_done)
-               v->rx_napi_work = true;
--      if (!complete) {
--              enetc_unlock_mdio();
-+      if (!complete)
-               return budget;
--      }
-       napi_complete_done(napi, work_done);
-@@ -1731,6 +1747,7 @@ static int enetc_poll(struct napi_struct *napi, int budget)
-       v->rx_napi_work = false;
-+      enetc_lock_mdio();
-       /* enable interrupts */
-       enetc_wr_reg_hot(v->rbier, ENETC_RBIER_RXTIE);
--- 
-2.51.0
-
diff --git a/queue-6.1/net-ethernet-enetc-unlock-xdp_redirect-for-xdp-non-l.patch b/queue-6.1/net-ethernet-enetc-unlock-xdp_redirect-for-xdp-non-l.patch
deleted file mode 100644 (file)
index db5019d..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-From ecf10ad02f186ebfcc966a9d82e6e3fc29e70f58 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 4 Jan 2023 14:57:10 +0100
-Subject: net: ethernet: enetc: unlock XDP_REDIRECT for XDP non-linear buffers
-
-From: Lorenzo Bianconi <lorenzo@kernel.org>
-
-[ Upstream commit 8feb020f92a559f5a73a55c7337a3e51f19a2dc9 ]
-
-Even if full XDP_REDIRECT is not supported yet for non-linear XDP buffers
-since we allow redirecting just into CPUMAPs, unlock XDP_REDIRECT for
-S/G XDP buffer and rely on XDP stack to properly take care of the
-frames.
-
-Tested-by: Vladimir Oltean <vladimir.oltean@nxp.com>
-Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
-Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Stable-dep-of: 50bd33f6b392 ("net: enetc: fix the deadlock of enetc_mdio_lock")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/freescale/enetc/enetc.c | 24 ++++++++------------
- 1 file changed, 10 insertions(+), 14 deletions(-)
-
-diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c
-index bf49c07c8b513..4b4cc64724932 100644
---- a/drivers/net/ethernet/freescale/enetc/enetc.c
-+++ b/drivers/net/ethernet/freescale/enetc/enetc.c
-@@ -1460,6 +1460,16 @@ static void enetc_add_rx_buff_to_xdp(struct enetc_bdr *rx_ring, int i,
-       /* To be used for XDP_TX */
-       rx_swbd->len = size;
-+      if (!xdp_buff_has_frags(xdp_buff)) {
-+              xdp_buff_set_frags_flag(xdp_buff);
-+              shinfo->xdp_frags_size = size;
-+      } else {
-+              shinfo->xdp_frags_size += size;
-+      }
-+
-+      if (page_is_pfmemalloc(rx_swbd->page))
-+              xdp_buff_set_frag_pfmemalloc(xdp_buff);
-+
-       skb_frag_off_set(frag, rx_swbd->page_offset);
-       skb_frag_size_set(frag, size);
-       __skb_frag_set_page(frag, rx_swbd->page);
-@@ -1650,20 +1660,6 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring,
-                       }
-                       break;
-               case XDP_REDIRECT:
--                      /* xdp_return_frame does not support S/G in the sense
--                       * that it leaks the fragments (__xdp_return should not
--                       * call page_frag_free only for the initial buffer).
--                       * Until XDP_REDIRECT gains support for S/G let's keep
--                       * the code structure in place, but dead. We drop the
--                       * S/G frames ourselves to avoid memory leaks which
--                       * would otherwise leave the kernel OOM.
--                       */
--                      if (unlikely(cleaned_cnt - orig_cleaned_cnt != 1)) {
--                              enetc_xdp_drop(rx_ring, orig_i, i);
--                              rx_ring->stats.xdp_redirect_sg++;
--                              break;
--                      }
--
-                       err = xdp_do_redirect(rx_ring->ndev, &xdp_buff, prog);
-                       if (unlikely(err)) {
-                               enetc_xdp_drop(rx_ring, orig_i, i);
--- 
-2.51.0
-
diff --git a/queue-6.1/net-fec-add-initial-xdp-support.patch b/queue-6.1/net-fec-add-initial-xdp-support.patch
deleted file mode 100644 (file)
index ce8a89f..0000000
+++ /dev/null
@@ -1,390 +0,0 @@
-From 47a3f48d7721f3132f9f1d0eae94edb0167b09ca Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 31 Oct 2022 13:53:50 -0500
-Subject: net: fec: add initial XDP support
-
-From: Shenwei Wang <shenwei.wang@nxp.com>
-
-[ Upstream commit 6d6b39f180b83dfe1e938382b68dd1e6cb51363c ]
-
-This patch adds the initial XDP support to Freescale driver. It supports
-XDP_PASS, XDP_DROP and XDP_REDIRECT actions. Upcoming patches will add
-support for XDP_TX and Zero Copy features.
-
-As the patch is rather large, the part of codes to collect the
-statistics is separated and will prepare a dedicated patch for that
-part.
-
-I just tested with the application of xdpsock.
-  -- Native here means running command of "xdpsock -i eth0"
-  -- SKB-Mode means running command of "xdpsock -S -i eth0"
-
-The following are the testing result relating to XDP mode:
-
-root@imx8qxpc0mek:~/bpf# ./xdpsock -i eth0
- sock0@eth0:0 rxdrop xdp-drv
-                   pps            pkts           1.00
-rx                 371347         2717794
-tx                 0              0
-
-root@imx8qxpc0mek:~/bpf# ./xdpsock -S -i eth0
- sock0@eth0:0 rxdrop xdp-skb
-                   pps            pkts           1.00
-rx                 202229         404528
-tx                 0              0
-
-root@imx8qxpc0mek:~/bpf# ./xdp2 eth0
-proto 0:     496708 pkt/s
-proto 0:     505469 pkt/s
-proto 0:     505283 pkt/s
-proto 0:     505443 pkt/s
-proto 0:     505465 pkt/s
-
-root@imx8qxpc0mek:~/bpf# ./xdp2 -S eth0
-proto 0:          0 pkt/s
-proto 17:     118778 pkt/s
-proto 17:     118989 pkt/s
-proto 0:          1 pkt/s
-proto 17:     118987 pkt/s
-proto 0:          0 pkt/s
-proto 17:     118943 pkt/s
-proto 17:     118976 pkt/s
-proto 0:          1 pkt/s
-proto 17:     119006 pkt/s
-proto 0:          0 pkt/s
-proto 17:     119071 pkt/s
-proto 17:     119092 pkt/s
-
-Signed-off-by: Shenwei Wang <shenwei.wang@nxp.com>
-Reported-by: kernel test robot <lkp@intel.com>
-Link: https://lore.kernel.org/r/20221031185350.2045675-1-shenwei.wang@nxp.com
-Signed-off-by: Paolo Abeni <pabeni@redhat.com>
-Stable-dep-of: 50bd33f6b392 ("net: enetc: fix the deadlock of enetc_mdio_lock")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/freescale/fec.h      |   4 +-
- drivers/net/ethernet/freescale/fec_main.c | 224 +++++++++++++++++++++-
- 2 files changed, 226 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h
-index 33f84a30e1671..6bdf7c98c3651 100644
---- a/drivers/net/ethernet/freescale/fec.h
-+++ b/drivers/net/ethernet/freescale/fec.h
-@@ -348,7 +348,6 @@ struct bufdesc_ex {
-  */
- #define FEC_ENET_XDP_HEADROOM (XDP_PACKET_HEADROOM)
--
- #define FEC_ENET_RX_PAGES     256
- #define FEC_ENET_RX_FRSIZE    (PAGE_SIZE - FEC_ENET_XDP_HEADROOM \
-               - SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))
-@@ -661,6 +660,9 @@ struct fec_enet_private {
-       struct imx_sc_ipc *ipc_handle;
-+      /* XDP BPF Program */
-+      struct bpf_prog *xdp_prog;
-+
-       u64 ethtool_stats[];
- };
-diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
-index ca271d7a388b4..5c72d229d3b6f 100644
---- a/drivers/net/ethernet/freescale/fec_main.c
-+++ b/drivers/net/ethernet/freescale/fec_main.c
-@@ -89,6 +89,11 @@ static const u16 fec_enet_vlan_pri_to_queue[8] = {0, 0, 1, 1, 1, 2, 2, 2};
- #define FEC_ENET_OPD_V        0xFFF0
- #define FEC_MDIO_PM_TIMEOUT  100 /* ms */
-+#define FEC_ENET_XDP_PASS          0
-+#define FEC_ENET_XDP_CONSUMED      BIT(0)
-+#define FEC_ENET_XDP_TX            BIT(1)
-+#define FEC_ENET_XDP_REDIR         BIT(2)
-+
- struct fec_devinfo {
-       u32 quirks;
- };
-@@ -443,13 +448,14 @@ static int
- fec_enet_create_page_pool(struct fec_enet_private *fep,
-                         struct fec_enet_priv_rx_q *rxq, int size)
- {
-+      struct bpf_prog *xdp_prog = READ_ONCE(fep->xdp_prog);
-       struct page_pool_params pp_params = {
-               .order = 0,
-               .flags = PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV,
-               .pool_size = size,
-               .nid = dev_to_node(&fep->pdev->dev),
-               .dev = &fep->pdev->dev,
--              .dma_dir = DMA_FROM_DEVICE,
-+              .dma_dir = xdp_prog ? DMA_BIDIRECTIONAL : DMA_FROM_DEVICE,
-               .offset = FEC_ENET_XDP_HEADROOM,
-               .max_len = FEC_ENET_RX_FRSIZE,
-       };
-@@ -1610,6 +1616,59 @@ static void fec_enet_update_cbd(struct fec_enet_priv_rx_q *rxq,
-       bdp->cbd_bufaddr = cpu_to_fec32(phys_addr);
- }
-+static u32
-+fec_enet_run_xdp(struct fec_enet_private *fep, struct bpf_prog *prog,
-+               struct xdp_buff *xdp, struct fec_enet_priv_rx_q *rxq, int index)
-+{
-+      unsigned int sync, len = xdp->data_end - xdp->data;
-+      u32 ret = FEC_ENET_XDP_PASS;
-+      struct page *page;
-+      int err;
-+      u32 act;
-+
-+      act = bpf_prog_run_xdp(prog, xdp);
-+
-+      /* Due xdp_adjust_tail: DMA sync for_device cover max len CPU touch */
-+      sync = xdp->data_end - xdp->data_hard_start - FEC_ENET_XDP_HEADROOM;
-+      sync = max(sync, len);
-+
-+      switch (act) {
-+      case XDP_PASS:
-+              ret = FEC_ENET_XDP_PASS;
-+              break;
-+
-+      case XDP_REDIRECT:
-+              err = xdp_do_redirect(fep->netdev, xdp, prog);
-+              if (!err) {
-+                      ret = FEC_ENET_XDP_REDIR;
-+              } else {
-+                      ret = FEC_ENET_XDP_CONSUMED;
-+                      page = virt_to_head_page(xdp->data);
-+                      page_pool_put_page(rxq->page_pool, page, sync, true);
-+              }
-+              break;
-+
-+      default:
-+              bpf_warn_invalid_xdp_action(fep->netdev, prog, act);
-+              fallthrough;
-+
-+      case XDP_TX:
-+              bpf_warn_invalid_xdp_action(fep->netdev, prog, act);
-+              fallthrough;
-+
-+      case XDP_ABORTED:
-+              fallthrough;    /* handle aborts by dropping packet */
-+
-+      case XDP_DROP:
-+              ret = FEC_ENET_XDP_CONSUMED;
-+              page = virt_to_head_page(xdp->data);
-+              page_pool_put_page(rxq->page_pool, page, sync, true);
-+              break;
-+      }
-+
-+      return ret;
-+}
-+
- /* During a receive, the bd_rx.cur points to the current incoming buffer.
-  * When we update through the ring, if the next incoming buffer has
-  * not been given to the system, we just set the empty indicator,
-@@ -1631,6 +1690,9 @@ fec_enet_rx_queue(struct net_device *ndev, int budget, u16 queue_id)
-       u16     vlan_tag;
-       int     index = 0;
-       bool    need_swap = fep->quirks & FEC_QUIRK_SWAP_FRAME;
-+      struct bpf_prog *xdp_prog = READ_ONCE(fep->xdp_prog);
-+      u32 ret, xdp_result = FEC_ENET_XDP_PASS;
-+      struct xdp_buff xdp;
-       struct page *page;
- #ifdef CONFIG_M532x
-@@ -1642,6 +1704,7 @@ fec_enet_rx_queue(struct net_device *ndev, int budget, u16 queue_id)
-        * These get messed up if we get called due to a busy condition.
-        */
-       bdp = rxq->bd.cur;
-+      xdp_init_buff(&xdp, PAGE_SIZE, &rxq->xdp_rxq);
-       while (!((status = fec16_to_cpu(bdp->cbd_sc)) & BD_ENET_RX_EMPTY)) {
-@@ -1691,6 +1754,17 @@ fec_enet_rx_queue(struct net_device *ndev, int budget, u16 queue_id)
-               prefetch(page_address(page));
-               fec_enet_update_cbd(rxq, bdp, index);
-+              if (xdp_prog) {
-+                      xdp_buff_clear_frags_flag(&xdp);
-+                      xdp_prepare_buff(&xdp, page_address(page),
-+                                       FEC_ENET_XDP_HEADROOM, pkt_len, false);
-+
-+                      ret = fec_enet_run_xdp(fep, xdp_prog, &xdp, rxq, index);
-+                      xdp_result |= ret;
-+                      if (ret != FEC_ENET_XDP_PASS)
-+                              goto rx_processing_done;
-+              }
-+
-               /* The packet length includes FCS, but we don't want to
-                * include that when passing upstream as it messes up
-                * bridging applications.
-@@ -1794,6 +1868,10 @@ fec_enet_rx_queue(struct net_device *ndev, int budget, u16 queue_id)
-               writel(0, rxq->bd.reg_desc_active);
-       }
-       rxq->bd.cur = bdp;
-+
-+      if (xdp_result & FEC_ENET_XDP_REDIR)
-+              xdp_do_flush_map();
-+
-       return pkt_received;
- }
-@@ -3604,6 +3682,148 @@ static u16 fec_enet_select_queue(struct net_device *ndev, struct sk_buff *skb,
-       return fec_enet_vlan_pri_to_queue[vlan_tag >> 13];
- }
-+static int fec_enet_bpf(struct net_device *dev, struct netdev_bpf *bpf)
-+{
-+      struct fec_enet_private *fep = netdev_priv(dev);
-+      bool is_run = netif_running(dev);
-+      struct bpf_prog *old_prog;
-+
-+      switch (bpf->command) {
-+      case XDP_SETUP_PROG:
-+              if (is_run) {
-+                      napi_disable(&fep->napi);
-+                      netif_tx_disable(dev);
-+              }
-+
-+              old_prog = xchg(&fep->xdp_prog, bpf->prog);
-+              fec_restart(dev);
-+
-+              if (is_run) {
-+                      napi_enable(&fep->napi);
-+                      netif_tx_start_all_queues(dev);
-+              }
-+
-+              if (old_prog)
-+                      bpf_prog_put(old_prog);
-+
-+              return 0;
-+
-+      case XDP_SETUP_XSK_POOL:
-+              return -EOPNOTSUPP;
-+
-+      default:
-+              return -EOPNOTSUPP;
-+      }
-+}
-+
-+static int
-+fec_enet_xdp_get_tx_queue(struct fec_enet_private *fep, int cpu)
-+{
-+      int index = cpu;
-+
-+      if (unlikely(index < 0))
-+              index = 0;
-+
-+      while (index >= fep->num_tx_queues)
-+              index -= fep->num_tx_queues;
-+
-+      return index;
-+}
-+
-+static int fec_enet_txq_xmit_frame(struct fec_enet_private *fep,
-+                                 struct fec_enet_priv_tx_q *txq,
-+                                 struct xdp_frame *frame)
-+{
-+      unsigned int index, status, estatus;
-+      struct bufdesc *bdp, *last_bdp;
-+      dma_addr_t dma_addr;
-+      int entries_free;
-+
-+      entries_free = fec_enet_get_free_txdesc_num(txq);
-+      if (entries_free < MAX_SKB_FRAGS + 1) {
-+              netdev_err(fep->netdev, "NOT enough BD for SG!\n");
-+              return NETDEV_TX_OK;
-+      }
-+
-+      /* Fill in a Tx ring entry */
-+      bdp = txq->bd.cur;
-+      last_bdp = bdp;
-+      status = fec16_to_cpu(bdp->cbd_sc);
-+      status &= ~BD_ENET_TX_STATS;
-+
-+      index = fec_enet_get_bd_index(bdp, &txq->bd);
-+
-+      dma_addr = dma_map_single(&fep->pdev->dev, frame->data,
-+                                frame->len, DMA_TO_DEVICE);
-+      if (dma_mapping_error(&fep->pdev->dev, dma_addr))
-+              return FEC_ENET_XDP_CONSUMED;
-+
-+      status |= (BD_ENET_TX_INTR | BD_ENET_TX_LAST);
-+      if (fep->bufdesc_ex)
-+              estatus = BD_ENET_TX_INT;
-+
-+      bdp->cbd_bufaddr = cpu_to_fec32(dma_addr);
-+      bdp->cbd_datlen = cpu_to_fec16(frame->len);
-+
-+      if (fep->bufdesc_ex) {
-+              struct bufdesc_ex *ebdp = (struct bufdesc_ex *)bdp;
-+
-+              if (fep->quirks & FEC_QUIRK_HAS_AVB)
-+                      estatus |= FEC_TX_BD_FTYPE(txq->bd.qid);
-+
-+              ebdp->cbd_bdu = 0;
-+              ebdp->cbd_esc = cpu_to_fec32(estatus);
-+      }
-+
-+      index = fec_enet_get_bd_index(last_bdp, &txq->bd);
-+      txq->tx_skbuff[index] = NULL;
-+
-+      /* Send it on its way.  Tell FEC it's ready, interrupt when done,
-+       * it's the last BD of the frame, and to put the CRC on the end.
-+       */
-+      status |= (BD_ENET_TX_READY | BD_ENET_TX_TC);
-+      bdp->cbd_sc = cpu_to_fec16(status);
-+
-+      /* If this was the last BD in the ring, start at the beginning again. */
-+      bdp = fec_enet_get_nextdesc(last_bdp, &txq->bd);
-+
-+      txq->bd.cur = bdp;
-+
-+      return 0;
-+}
-+
-+static int fec_enet_xdp_xmit(struct net_device *dev,
-+                           int num_frames,
-+                           struct xdp_frame **frames,
-+                           u32 flags)
-+{
-+      struct fec_enet_private *fep = netdev_priv(dev);
-+      struct fec_enet_priv_tx_q *txq;
-+      int cpu = smp_processor_id();
-+      struct netdev_queue *nq;
-+      unsigned int queue;
-+      int i;
-+
-+      queue = fec_enet_xdp_get_tx_queue(fep, cpu);
-+      txq = fep->tx_queue[queue];
-+      nq = netdev_get_tx_queue(fep->netdev, queue);
-+
-+      __netif_tx_lock(nq, cpu);
-+
-+      for (i = 0; i < num_frames; i++)
-+              fec_enet_txq_xmit_frame(fep, txq, frames[i]);
-+
-+      /* Make sure the update to bdp and tx_skbuff are performed. */
-+      wmb();
-+
-+      /* Trigger transmission start */
-+      writel(0, txq->bd.reg_desc_active);
-+
-+      __netif_tx_unlock(nq);
-+
-+      return num_frames;
-+}
-+
- static const struct net_device_ops fec_netdev_ops = {
-       .ndo_open               = fec_enet_open,
-       .ndo_stop               = fec_enet_close,
-@@ -3615,6 +3835,8 @@ static const struct net_device_ops fec_netdev_ops = {
-       .ndo_set_mac_address    = fec_set_mac_address,
-       .ndo_eth_ioctl          = fec_enet_ioctl,
-       .ndo_set_features       = fec_set_features,
-+      .ndo_bpf                = fec_enet_bpf,
-+      .ndo_xdp_xmit           = fec_enet_xdp_xmit,
- };
- static const unsigned short offset_des_active_rxq[] = {
--- 
-2.51.0
-
diff --git a/queue-6.1/net-tree-wide-replace-xdp_do_flush_map-with-xdp_do_f.patch b/queue-6.1/net-tree-wide-replace-xdp_do_flush_map-with-xdp_do_f.patch
deleted file mode 100644 (file)
index 37b14da..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-From 20abbd7880cfc00ffcf960a25d3d7cd5ac0fb978 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 8 Sep 2023 16:32:14 +0200
-Subject: net: Tree wide: Replace xdp_do_flush_map() with xdp_do_flush().
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-
-[ Upstream commit 7f04bd109d4c358a12b125bc79a6f0eac2e915ec ]
-
-xdp_do_flush_map() is deprecated and new code should use xdp_do_flush()
-instead.
-
-Replace xdp_do_flush_map() with xdp_do_flush().
-
-Cc: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
-Cc: Clark Wang <xiaoning.wang@nxp.com>
-Cc: Claudiu Manoil <claudiu.manoil@nxp.com>
-Cc: David Arinzon <darinzon@amazon.com>
-Cc: Edward Cree <ecree.xilinx@gmail.com>
-Cc: Felix Fietkau <nbd@nbd.name>
-Cc: Grygorii Strashko <grygorii.strashko@ti.com>
-Cc: Jassi Brar <jaswinder.singh@linaro.org>
-Cc: Jesse Brandeburg <jesse.brandeburg@intel.com>
-Cc: John Crispin <john@phrozen.org>
-Cc: Leon Romanovsky <leon@kernel.org>
-Cc: Lorenzo Bianconi <lorenzo@kernel.org>
-Cc: Louis Peens <louis.peens@corigine.com>
-Cc: Marcin Wojtas <mw@semihalf.com>
-Cc: Mark Lee <Mark-MC.Lee@mediatek.com>
-Cc: Matthias Brugger <matthias.bgg@gmail.com>
-Cc: NXP Linux Team <linux-imx@nxp.com>
-Cc: Noam Dagan <ndagan@amazon.com>
-Cc: Russell King <linux@armlinux.org.uk>
-Cc: Saeed Bishara <saeedb@amazon.com>
-Cc: Saeed Mahameed <saeedm@nvidia.com>
-Cc: Sean Wang <sean.wang@mediatek.com>
-Cc: Shay Agroskin <shayagr@amazon.com>
-Cc: Shenwei Wang <shenwei.wang@nxp.com>
-Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
-Cc: Tony Nguyen <anthony.l.nguyen@intel.com>
-Cc: Vladimir Oltean <vladimir.oltean@nxp.com>
-Cc: Wei Fang <wei.fang@nxp.com>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Acked-by: Arthur Kiyanovski <akiyano@amazon.com>
-Acked-by: Toke Høiland-Jørgensen <toke@redhat.com>
-Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
-Acked-by: Martin Habets <habetsm.xilinx@gmail.com>
-Acked-by: Jesper Dangaard Brouer <hawk@kernel.org>
-Link: https://lore.kernel.org/r/20230908143215.869913-2-bigeasy@linutronix.de
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Stable-dep-of: 50bd33f6b392 ("net: enetc: fix the deadlock of enetc_mdio_lock")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/amazon/ena/ena_netdev.c     | 2 +-
- drivers/net/ethernet/freescale/enetc/enetc.c     | 2 +-
- drivers/net/ethernet/freescale/fec_main.c        | 2 +-
- drivers/net/ethernet/intel/i40e/i40e_txrx.c      | 2 +-
- drivers/net/ethernet/intel/ice/ice_txrx_lib.c    | 2 +-
- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c    | 2 +-
- drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c     | 2 +-
- drivers/net/ethernet/marvell/mvneta.c            | 2 +-
- drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c  | 2 +-
- drivers/net/ethernet/mediatek/mtk_eth_soc.c      | 2 +-
- drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c | 2 +-
- drivers/net/ethernet/netronome/nfp/nfd3/xsk.c    | 2 +-
- drivers/net/ethernet/sfc/efx_channels.c          | 2 +-
- drivers/net/ethernet/sfc/siena/efx_channels.c    | 2 +-
- drivers/net/ethernet/socionext/netsec.c          | 2 +-
- drivers/net/ethernet/ti/cpsw_priv.c              | 2 +-
- 16 files changed, 16 insertions(+), 16 deletions(-)
-
-diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
-index 77fa4c35f2331..af03e307451c2 100644
---- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
-+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
-@@ -1828,7 +1828,7 @@ static int ena_clean_rx_irq(struct ena_ring *rx_ring, struct napi_struct *napi,
-       }
-       if (xdp_flags & ENA_XDP_REDIRECT)
--              xdp_do_flush_map();
-+              xdp_do_flush();
-       return work_done;
-diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c
-index 4b4cc64724932..44ae1d2c34fd6 100644
---- a/drivers/net/ethernet/freescale/enetc/enetc.c
-+++ b/drivers/net/ethernet/freescale/enetc/enetc.c
-@@ -1681,7 +1681,7 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring,
-       rx_ring->stats.bytes += rx_byte_cnt;
-       if (xdp_redirect_frm_cnt)
--              xdp_do_flush_map();
-+              xdp_do_flush();
-       if (xdp_tx_frm_cnt)
-               enetc_update_tx_ring_tail(tx_ring);
-diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
-index 5c72d229d3b6f..b352b89d096bf 100644
---- a/drivers/net/ethernet/freescale/fec_main.c
-+++ b/drivers/net/ethernet/freescale/fec_main.c
-@@ -1870,7 +1870,7 @@ fec_enet_rx_queue(struct net_device *ndev, int budget, u16 queue_id)
-       rxq->bd.cur = bdp;
-       if (xdp_result & FEC_ENET_XDP_REDIR)
--              xdp_do_flush_map();
-+              xdp_do_flush();
-       return pkt_received;
- }
-diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
-index 2ede35ba3919b..a428d57c1da52 100644
---- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c
-+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
-@@ -2392,7 +2392,7 @@ void i40e_update_rx_stats(struct i40e_ring *rx_ring,
- void i40e_finalize_xdp_rx(struct i40e_ring *rx_ring, unsigned int xdp_res)
- {
-       if (xdp_res & I40E_XDP_REDIR)
--              xdp_do_flush_map();
-+              xdp_do_flush();
-       if (xdp_res & I40E_XDP_TX) {
-               struct i40e_ring *xdp_ring =
-diff --git a/drivers/net/ethernet/intel/ice/ice_txrx_lib.c b/drivers/net/ethernet/intel/ice/ice_txrx_lib.c
-index d137b98d78eb6..48eac14fe991a 100644
---- a/drivers/net/ethernet/intel/ice/ice_txrx_lib.c
-+++ b/drivers/net/ethernet/intel/ice/ice_txrx_lib.c
-@@ -358,7 +358,7 @@ int ice_xmit_xdp_buff(struct xdp_buff *xdp, struct ice_tx_ring *xdp_ring)
- void ice_finalize_xdp_rx(struct ice_tx_ring *xdp_ring, unsigned int xdp_res)
- {
-       if (xdp_res & ICE_XDP_REDIR)
--              xdp_do_flush_map();
-+              xdp_do_flush();
-       if (xdp_res & ICE_XDP_TX) {
-               if (static_branch_unlikely(&ice_xdp_locking_key))
-diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
-index 086cc25730338..d036dc190396c 100644
---- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
-+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
-@@ -2429,7 +2429,7 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
-       }
-       if (xdp_xmit & IXGBE_XDP_REDIR)
--              xdp_do_flush_map();
-+              xdp_do_flush();
-       if (xdp_xmit & IXGBE_XDP_TX) {
-               struct ixgbe_ring *ring = ixgbe_determine_xdp_ring(adapter);
-diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c
-index 7ef82c30e8571..9fdd19acf2242 100644
---- a/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c
-+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c
-@@ -351,7 +351,7 @@ int ixgbe_clean_rx_irq_zc(struct ixgbe_q_vector *q_vector,
-       }
-       if (xdp_xmit & IXGBE_XDP_REDIR)
--              xdp_do_flush_map();
-+              xdp_do_flush();
-       if (xdp_xmit & IXGBE_XDP_TX) {
-               struct ixgbe_ring *ring = ixgbe_determine_xdp_ring(adapter);
-diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
-index eb4ebaa1c92ff..0cc277fe33f5b 100644
---- a/drivers/net/ethernet/marvell/mvneta.c
-+++ b/drivers/net/ethernet/marvell/mvneta.c
-@@ -2514,7 +2514,7 @@ static int mvneta_rx_swbm(struct napi_struct *napi,
-               mvneta_xdp_put_buff(pp, rxq, &xdp_buf, -1);
-       if (ps.xdp_redirect)
--              xdp_do_flush_map();
-+              xdp_do_flush();
-       if (ps.rx_packets)
-               mvneta_update_stats(pp, &ps);
-diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
-index ec69bb90f5740..79516673811bd 100644
---- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
-+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
-@@ -4052,7 +4052,7 @@ static int mvpp2_rx(struct mvpp2_port *port, struct napi_struct *napi,
-       }
-       if (xdp_ret & MVPP2_XDP_REDIR)
--              xdp_do_flush_map();
-+              xdp_do_flush();
-       if (ps.rx_packets) {
-               struct mvpp2_pcpu_stats *stats = this_cpu_ptr(port->stats);
-diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-index 3f2f725ccceb3..b2ec1f183271d 100644
---- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -1989,7 +1989,7 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
-       net_dim(&eth->rx_dim, dim_sample);
-       if (xdp_flush)
--              xdp_do_flush_map();
-+              xdp_do_flush();
-       return done;
- }
-diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c b/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c
-index 20507ef2f9569..e6612d1c3749c 100644
---- a/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c
-+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c
-@@ -677,7 +677,7 @@ void mlx5e_xdp_rx_poll_complete(struct mlx5e_rq *rq)
-       mlx5e_xmit_xdp_doorbell(xdpsq);
-       if (test_bit(MLX5E_RQ_FLAG_XDP_REDIRECT, rq->flags)) {
--              xdp_do_flush_map();
-+              xdp_do_flush();
-               __clear_bit(MLX5E_RQ_FLAG_XDP_REDIRECT, rq->flags);
-       }
- }
-diff --git a/drivers/net/ethernet/netronome/nfp/nfd3/xsk.c b/drivers/net/ethernet/netronome/nfp/nfd3/xsk.c
-index 5d9db8c2a5b43..45be6954d5aae 100644
---- a/drivers/net/ethernet/netronome/nfp/nfd3/xsk.c
-+++ b/drivers/net/ethernet/netronome/nfp/nfd3/xsk.c
-@@ -256,7 +256,7 @@ nfp_nfd3_xsk_rx(struct nfp_net_rx_ring *rx_ring, int budget,
-       nfp_net_xsk_rx_ring_fill_freelist(r_vec->rx_ring);
-       if (xdp_redir)
--              xdp_do_flush_map();
-+              xdp_do_flush();
-       if (tx_ring->wr_ptr_add)
-               nfp_net_tx_xmit_more_flush(tx_ring);
-diff --git a/drivers/net/ethernet/sfc/efx_channels.c b/drivers/net/ethernet/sfc/efx_channels.c
-index 27d00ffac68f4..506163c977fa0 100644
---- a/drivers/net/ethernet/sfc/efx_channels.c
-+++ b/drivers/net/ethernet/sfc/efx_channels.c
-@@ -1281,7 +1281,7 @@ static int efx_poll(struct napi_struct *napi, int budget)
-       spent = efx_process_channel(channel, budget);
--      xdp_do_flush_map();
-+      xdp_do_flush();
-       if (spent < budget) {
-               if (efx_channel_has_rx_queue(channel) &&
-diff --git a/drivers/net/ethernet/sfc/siena/efx_channels.c b/drivers/net/ethernet/sfc/siena/efx_channels.c
-index 1776f7f8a7a90..a7346e965bfe7 100644
---- a/drivers/net/ethernet/sfc/siena/efx_channels.c
-+++ b/drivers/net/ethernet/sfc/siena/efx_channels.c
-@@ -1285,7 +1285,7 @@ static int efx_poll(struct napi_struct *napi, int budget)
-       spent = efx_process_channel(channel, budget);
--      xdp_do_flush_map();
-+      xdp_do_flush();
-       if (spent < budget) {
-               if (efx_channel_has_rx_queue(channel) &&
-diff --git a/drivers/net/ethernet/socionext/netsec.c b/drivers/net/ethernet/socionext/netsec.c
-index b130e978366c1..f4b516906abdb 100644
---- a/drivers/net/ethernet/socionext/netsec.c
-+++ b/drivers/net/ethernet/socionext/netsec.c
-@@ -780,7 +780,7 @@ static void netsec_finalize_xdp_rx(struct netsec_priv *priv, u32 xdp_res,
-                                  u16 pkts)
- {
-       if (xdp_res & NETSEC_XDP_REDIR)
--              xdp_do_flush_map();
-+              xdp_do_flush();
-       if (xdp_res & NETSEC_XDP_TX)
-               netsec_xdp_ring_tx_db(priv, pkts);
-diff --git a/drivers/net/ethernet/ti/cpsw_priv.c b/drivers/net/ethernet/ti/cpsw_priv.c
-index 758295c898ac9..7b861e1027b9b 100644
---- a/drivers/net/ethernet/ti/cpsw_priv.c
-+++ b/drivers/net/ethernet/ti/cpsw_priv.c
-@@ -1359,7 +1359,7 @@ int cpsw_run_xdp(struct cpsw_priv *priv, int ch, struct xdp_buff *xdp,
-                *  particular hardware is sharing a common queue, so the
-                *  incoming device might change per packet.
-                */
--              xdp_do_flush_map();
-+              xdp_do_flush();
-               break;
-       default:
-               bpf_warn_invalid_xdp_action(ndev, prog, act);
--- 
-2.51.0
-
index 081c5544e13d5ce104eb5fcdd043386a767f6ef5..021a218cde1b6a8c74812f19b725b270aa2b2bb2 100644 (file)
@@ -80,10 +80,6 @@ powerpc-32-remove-page_kernel_text-to-fix-startup-fa.patch
 smb-server-let-smb_direct_flush_send_list-invalidate.patch
 net-mlx5e-return-1-instead-of-0-in-invalid-case-in-m.patch
 rtnetlink-allow-deleting-fdb-entries-in-user-namespa.patch
-net-fec-add-initial-xdp-support.patch
-net-ethernet-enetc-unlock-xdp_redirect-for-xdp-non-l.patch
-net-tree-wide-replace-xdp_do_flush_map-with-xdp_do_f.patch
-net-enetc-fix-the-deadlock-of-enetc_mdio_lock.patch
 net-enetc-correct-the-value-of-enetc_rxb_truesize.patch
 dpaa2-eth-fix-the-pointer-passed-to-ptr_align-on-tx-.patch
 arm64-mm-avoid-always-making-pte-dirty-in-pte_mkwrit.patch