]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
drop some bnxt patches from 6.6.
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 3 Jul 2025 10:36:34 +0000 (12:36 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 3 Jul 2025 10:36:34 +0000 (12:36 +0200)
follow-on fixes could not be applied, so drop them all.

queue-6.6/bnxt-properly-flush-xdp-redirect-lists.patch [deleted file]
queue-6.6/bnxt_en-add-completion-ring-pointer-in-tx-and-rx-rin.patch [deleted file]
queue-6.6/bnxt_en-allow-some-tx-packets-to-be-unprocessed-in-n.patch [deleted file]
queue-6.6/bnxt_en-fix-tx-ring-indexing-logic.patch [deleted file]
queue-6.6/bnxt_en-modify-tx-ring-indexing-logic.patch [deleted file]
queue-6.6/bnxt_en-new-encoding-for-the-tx-opaque-field.patch [deleted file]
queue-6.6/bnxt_en-put-the-tx-producer-information-in-the-tx-bd.patch [deleted file]
queue-6.6/bnxt_en-refactor-bnxt_hwrm_set_coal.patch [deleted file]
queue-6.6/bnxt_en-refactor-bnxt_tx_int.patch [deleted file]
queue-6.6/bnxt_en-support-up-to-8-tx-rings-per-msix.patch [deleted file]
queue-6.6/series

diff --git a/queue-6.6/bnxt-properly-flush-xdp-redirect-lists.patch b/queue-6.6/bnxt-properly-flush-xdp-redirect-lists.patch
deleted file mode 100644 (file)
index ea0427a..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-From 9c15e0c70d5937b492e7e0e5236dc20f24f7329e Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 23 Jun 2025 09:06:38 -0700
-Subject: bnxt: properly flush XDP redirect lists
-
-From: Yan Zhai <yan@cloudflare.com>
-
-[ Upstream commit 9caca6ac0e26cd20efd490d8b3b2ffb1c7c00f6f ]
-
-We encountered following crash when testing a XDP_REDIRECT feature
-in production:
-
-[56251.579676] list_add corruption. next->prev should be prev (ffff93120dd40f30), but was ffffb301ef3a6740. (next=ffff93120dd
-40f30).
-[56251.601413] ------------[ cut here ]------------
-[56251.611357] kernel BUG at lib/list_debug.c:29!
-[56251.621082] Oops: invalid opcode: 0000 [#1] PREEMPT SMP NOPTI
-[56251.632073] CPU: 111 UID: 0 PID: 0 Comm: swapper/111 Kdump: loaded Tainted: P           O       6.12.33-cloudflare-2025.6.
-3 #1
-[56251.653155] Tainted: [P]=PROPRIETARY_MODULE, [O]=OOT_MODULE
-[56251.663877] Hardware name: MiTAC GC68B-B8032-G11P6-GPU/S8032GM-HE-CFR, BIOS V7.020.B10-sig 01/22/2025
-[56251.682626] RIP: 0010:__list_add_valid_or_report+0x4b/0xa0
-[56251.693203] Code: 0e 48 c7 c7 68 e7 d9 97 e8 42 16 fe ff 0f 0b 48 8b 52 08 48 39 c2 74 14 48 89 f1 48 c7 c7 90 e7 d9 97 48
- 89 c6 e8 25 16 fe ff <0f> 0b 4c 8b 02 49 39 f0 74 14 48 89 d1 48 c7 c7 e8 e7 d9 97 4c 89
-[56251.725811] RSP: 0018:ffff93120dd40b80 EFLAGS: 00010246
-[56251.736094] RAX: 0000000000000075 RBX: ffffb301e6bba9d8 RCX: 0000000000000000
-[56251.748260] RDX: 0000000000000000 RSI: ffff9149afda0b80 RDI: ffff9149afda0b80
-[56251.760349] RBP: ffff9131e49c8000 R08: 0000000000000000 R09: ffff93120dd40a18
-[56251.772382] R10: ffff9159cf2ce1a8 R11: 0000000000000003 R12: ffff911a80850000
-[56251.784364] R13: ffff93120fbc7000 R14: 0000000000000010 R15: ffff9139e7510e40
-[56251.796278] FS:  0000000000000000(0000) GS:ffff9149afd80000(0000) knlGS:0000000000000000
-[56251.809133] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
-[56251.819561] CR2: 00007f5e85e6f300 CR3: 00000038b85e2006 CR4: 0000000000770ef0
-[56251.831365] PKRU: 55555554
-[56251.838653] Call Trace:
-[56251.845560]  <IRQ>
-[56251.851943]  cpu_map_enqueue.cold+0x5/0xa
-[56251.860243]  xdp_do_redirect+0x2d9/0x480
-[56251.868388]  bnxt_rx_xdp+0x1d8/0x4c0 [bnxt_en]
-[56251.877028]  bnxt_rx_pkt+0x5f7/0x19b0 [bnxt_en]
-[56251.885665]  ? cpu_max_write+0x1e/0x100
-[56251.893510]  ? srso_alias_return_thunk+0x5/0xfbef5
-[56251.902276]  __bnxt_poll_work+0x190/0x340 [bnxt_en]
-[56251.911058]  bnxt_poll+0xab/0x1b0 [bnxt_en]
-[56251.919041]  ? srso_alias_return_thunk+0x5/0xfbef5
-[56251.927568]  ? srso_alias_return_thunk+0x5/0xfbef5
-[56251.935958]  ? srso_alias_return_thunk+0x5/0xfbef5
-[56251.944250]  __napi_poll+0x2b/0x160
-[56251.951155]  bpf_trampoline_6442548651+0x79/0x123
-[56251.959262]  __napi_poll+0x5/0x160
-[56251.966037]  net_rx_action+0x3d2/0x880
-[56251.973133]  ? srso_alias_return_thunk+0x5/0xfbef5
-[56251.981265]  ? srso_alias_return_thunk+0x5/0xfbef5
-[56251.989262]  ? __hrtimer_run_queues+0x162/0x2a0
-[56251.996967]  ? srso_alias_return_thunk+0x5/0xfbef5
-[56252.004875]  ? srso_alias_return_thunk+0x5/0xfbef5
-[56252.012673]  ? bnxt_msix+0x62/0x70 [bnxt_en]
-[56252.019903]  handle_softirqs+0xcf/0x270
-[56252.026650]  irq_exit_rcu+0x67/0x90
-[56252.032933]  common_interrupt+0x85/0xa0
-[56252.039498]  </IRQ>
-[56252.044246]  <TASK>
-[56252.048935]  asm_common_interrupt+0x26/0x40
-[56252.055727] RIP: 0010:cpuidle_enter_state+0xb8/0x420
-[56252.063305] Code: dc 01 00 00 e8 f9 79 3b ff e8 64 f7 ff ff 49 89 c5 0f 1f 44 00 00 31 ff e8 a5 32 3a ff 45 84 ff 0f 85 ae
- 01 00 00 fb 45 85 f6 <0f> 88 88 01 00 00 48 8b 04 24 49 63 ce 4c 89 ea 48 6b f1 68 48 29
-[56252.088911] RSP: 0018:ffff93120c97fe98 EFLAGS: 00000202
-[56252.096912] RAX: ffff9149afd80000 RBX: ffff9141d3a72800 RCX: 0000000000000000
-[56252.106844] RDX: 00003329176c6b98 RSI: ffffffe36db3fdc7 RDI: 0000000000000000
-[56252.116733] RBP: 0000000000000002 R08: 0000000000000002 R09: 000000000000004e
-[56252.126652] R10: ffff9149afdb30c4 R11: 071c71c71c71c71c R12: ffffffff985ff860
-[56252.136637] R13: 00003329176c6b98 R14: 0000000000000002 R15: 0000000000000000
-[56252.146667]  ? cpuidle_enter_state+0xab/0x420
-[56252.153909]  cpuidle_enter+0x2d/0x40
-[56252.160360]  do_idle+0x176/0x1c0
-[56252.166456]  cpu_startup_entry+0x29/0x30
-[56252.173248]  start_secondary+0xf7/0x100
-[56252.179941]  common_startup_64+0x13e/0x141
-[56252.186886]  </TASK>
-
-From the crash dump, we found that the cpu_map_flush_list inside
-redirect info is partially corrupted: its list_head->next points to
-itself, but list_head->prev points to a valid list of unflushed bq
-entries.
-
-This turned out to be a result of missed XDP flush on redirect lists. By
-digging in the actual source code, we found that
-commit 7f0a168b0441 ("bnxt_en: Add completion ring pointer in TX and RX
-ring structures") incorrectly overwrites the event mask for XDP_REDIRECT
-in bnxt_rx_xdp. We can stably reproduce this crash by returning XDP_TX
-and XDP_REDIRECT randomly for incoming packets in a naive XDP program.
-Properly propagate the XDP_REDIRECT events back fixes the crash.
-
-Fixes: a7559bc8c17c ("bnxt: support transmit and free of aggregation buffers")
-Tested-by: Andrew Rzeznik <arzeznik@cloudflare.com>
-Signed-off-by: Yan Zhai <yan@cloudflare.com>
-Acked-by: Jesper Dangaard Brouer <hawk@kernel.org>
-Reviewed-by: Michael Chan <michael.chan@broadcom.com>
-Reviewed-by: Andy Gospodarek <gospo@broadcom.com>
-Link: https://patch.msgid.link/aFl7jpCNzscumuN2@debian.debian
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-index 2ada8345180dc..27328864d3053 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-@@ -2509,6 +2509,7 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
- {
-       struct bnxt_napi *bnapi = cpr->bnapi;
-       u32 raw_cons = cpr->cp_raw_cons;
-+      bool flush_xdp = false;
-       u32 cons;
-       int rx_pkts = 0;
-       u8 event = 0;
-@@ -2553,6 +2554,8 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
-                       else
-                               rc = bnxt_force_rx_discard(bp, cpr, &raw_cons,
-                                                          &event);
-+                      if (event & BNXT_REDIRECT_EVENT)
-+                              flush_xdp = true;
-                       if (likely(rc >= 0))
-                               rx_pkts += rc;
-                       /* Increment rx_pkts when rc is -ENOMEM to count towards
-@@ -2580,7 +2583,7 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
-               }
-       }
--      if (event & BNXT_REDIRECT_EVENT) {
-+      if (flush_xdp) {
-               xdp_do_flush();
-               event &= ~BNXT_REDIRECT_EVENT;
-       }
--- 
-2.39.5
-
diff --git a/queue-6.6/bnxt_en-add-completion-ring-pointer-in-tx-and-rx-rin.patch b/queue-6.6/bnxt_en-add-completion-ring-pointer-in-tx-and-rx-rin.patch
deleted file mode 100644 (file)
index 6ee7299..0000000
+++ /dev/null
@@ -1,284 +0,0 @@
-From 1f23f4cdbbb520fd63295d62eafaeb610ba48e70 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 13 Nov 2023 16:16:10 -0800
-Subject: bnxt_en: Add completion ring pointer in TX and RX ring structures
-
-From: Michael Chan <michael.chan@broadcom.com>
-
-[ Upstream commit 7f0a168b0441ef7fd6b46563efb2706c58ac2a4c ]
-
-From the TX or RX ring structure, we need to find the corresponding
-completion ring during initialization.  On P5 chips, we use the MSIX/napi
-entry to locate the completion ring because there is only one RX/TX
-ring per MSIX.  To allow multiple TX rings for each MSIX, we need
-to add a direct pointer from the TX ring and RX ring structures.
-This also simplifies the existing logic.
-
-Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
-Signed-off-by: Michael Chan <michael.chan@broadcom.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Stable-dep-of: 9caca6ac0e26 ("bnxt: properly flush XDP redirect lists")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/broadcom/bnxt/bnxt.c     | 43 +++++++++++--------
- drivers/net/ethernet/broadcom/bnxt/bnxt.h     | 11 ++++-
- drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 12 +++---
- 3 files changed, 40 insertions(+), 26 deletions(-)
-
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-index 5b137747937ac..7e1f4b3adb2c9 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-@@ -332,16 +332,16 @@ static void bnxt_sched_reset_rxr(struct bnxt *bp, struct bnxt_rx_ring_info *rxr)
- }
- void bnxt_sched_reset_txr(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
--                        int idx)
-+                        u16 curr)
- {
-       struct bnxt_napi *bnapi = txr->bnapi;
-       if (bnapi->tx_fault)
-               return;
--      netdev_err(bp->dev, "Invalid Tx completion (ring:%d tx_pkts:%d cons:%u prod:%u i:%d)",
--                 txr->txq_index, bnapi->tx_pkts,
--                 txr->tx_cons, txr->tx_prod, idx);
-+      netdev_err(bp->dev, "Invalid Tx completion (ring:%d tx_hw_cons:%u cons:%u prod:%u curr:%u)",
-+                 txr->txq_index, txr->tx_hw_cons,
-+                 txr->tx_cons, txr->tx_prod, curr);
-       WARN_ON_ONCE(1);
-       bnapi->tx_fault = 1;
-       bnxt_queue_sp_work(bp, BNXT_RESET_TASK_SP_EVENT);
-@@ -691,13 +691,13 @@ static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
- {
-       struct bnxt_tx_ring_info *txr = bnapi->tx_ring;
-       struct netdev_queue *txq = netdev_get_tx_queue(bp->dev, txr->txq_index);
-+      u16 hw_cons = txr->tx_hw_cons;
-       u16 cons = txr->tx_cons;
-       struct pci_dev *pdev = bp->pdev;
--      int nr_pkts = bnapi->tx_pkts;
--      int i;
-       unsigned int tx_bytes = 0;
-+      int tx_pkts = 0;
--      for (i = 0; i < nr_pkts; i++) {
-+      while (cons != hw_cons) {
-               struct bnxt_sw_tx_bd *tx_buf;
-               struct sk_buff *skb;
-               int j, last;
-@@ -708,10 +708,11 @@ static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
-               tx_buf->skb = NULL;
-               if (unlikely(!skb)) {
--                      bnxt_sched_reset_txr(bp, txr, i);
-+                      bnxt_sched_reset_txr(bp, txr, cons);
-                       return;
-               }
-+              tx_pkts++;
-               tx_bytes += skb->len;
-               if (tx_buf->is_push) {
-@@ -748,10 +749,10 @@ static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
-               dev_consume_skb_any(skb);
-       }
--      bnapi->tx_pkts = 0;
-+      bnapi->events &= ~BNXT_TX_CMP_EVENT;
-       WRITE_ONCE(txr->tx_cons, cons);
--      __netif_txq_completed_wake(txq, nr_pkts, tx_bytes,
-+      __netif_txq_completed_wake(txq, tx_pkts, tx_bytes,
-                                  bnxt_tx_avail(bp, txr), bp->tx_wake_thresh,
-                                  READ_ONCE(txr->dev_state) == BNXT_DEV_STATE_CLOSING);
- }
-@@ -2492,14 +2493,15 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
- {
-       struct bnxt_napi *bnapi = cpr->bnapi;
-       u32 raw_cons = cpr->cp_raw_cons;
-+      struct bnxt_tx_ring_info *txr;
-       u32 cons;
--      int tx_pkts = 0;
-       int rx_pkts = 0;
-       u8 event = 0;
-       struct tx_cmp *txcmp;
-       cpr->has_more_work = 0;
-       cpr->had_work_done = 1;
-+      txr = bnapi->tx_ring;
-       while (1) {
-               int rc;
-@@ -2514,9 +2516,15 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
-                */
-               dma_rmb();
-               if (TX_CMP_TYPE(txcmp) == CMP_TYPE_TX_L2_CMP) {
--                      tx_pkts++;
-+                      u32 opaque = txcmp->tx_cmp_opaque;
-+                      u16 tx_freed;
-+
-+                      event |= BNXT_TX_CMP_EVENT;
-+                      txr->tx_hw_cons = TX_OPAQUE_PROD(bp, opaque);
-+                      tx_freed = (txr->tx_hw_cons - txr->tx_cons) &
-+                                 bp->tx_ring_mask;
-                       /* return full budget so NAPI will complete. */
--                      if (unlikely(tx_pkts >= bp->tx_wake_thresh)) {
-+                      if (unlikely(tx_freed >= bp->tx_wake_thresh)) {
-                               rx_pkts = budget;
-                               raw_cons = NEXT_RAW_CMP(raw_cons);
-                               if (budget)
-@@ -2570,7 +2578,6 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
-       }
-       cpr->cp_raw_cons = raw_cons;
--      bnapi->tx_pkts += tx_pkts;
-       bnapi->events |= event;
-       return rx_pkts;
- }
-@@ -2578,7 +2585,7 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
- static void __bnxt_poll_work_done(struct bnxt *bp, struct bnxt_napi *bnapi,
-                                 int budget)
- {
--      if (bnapi->tx_pkts && !bnapi->tx_fault)
-+      if ((bnapi->events & BNXT_TX_CMP_EVENT) && !bnapi->tx_fault)
-               bnapi->tx_int(bp, bnapi, budget);
-       if ((bnapi->events & BNXT_RX_EVENT) && !(bnapi->in_reset)) {
-@@ -2591,7 +2598,7 @@ static void __bnxt_poll_work_done(struct bnxt *bp, struct bnxt_napi *bnapi,
-               bnxt_db_write(bp, &rxr->rx_agg_db, rxr->rx_agg_prod);
-       }
--      bnapi->events = 0;
-+      bnapi->events &= BNXT_TX_CMP_EVENT;
- }
- static int bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
-@@ -4421,6 +4428,7 @@ static void bnxt_clear_ring_indices(struct bnxt *bp)
-               if (txr) {
-                       txr->tx_prod = 0;
-                       txr->tx_cons = 0;
-+                      txr->tx_hw_cons = 0;
-               }
-               rxr = bnapi->rx_ring;
-@@ -4430,6 +4438,7 @@ static void bnxt_clear_ring_indices(struct bnxt *bp)
-                       rxr->rx_sw_agg_prod = 0;
-                       rxr->rx_next_cons = 0;
-               }
-+              bnapi->events = 0;
-       }
- }
-@@ -9434,8 +9443,6 @@ static void bnxt_enable_napi(struct bnxt *bp)
-               cpr = &bnapi->cp_ring;
-               bnapi->in_reset = false;
--              bnapi->tx_pkts = 0;
--
-               if (bnapi->rx_ring) {
-                       INIT_WORK(&cpr->dim.work, bnxt_dim_work);
-                       cpr->dim.mode = DIM_CQ_PERIOD_MODE_START_FROM_EQE;
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
-index 39b09e49db9e3..fd2122d9ecc3d 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
-@@ -68,6 +68,12 @@ struct tx_bd {
- #define SET_TX_OPAQUE(bp, idx, bds)                                   \
-       (((bds) << TX_OPAQUE_BDS_SHIFT) | ((idx) & (bp)->tx_ring_mask))
-+#define TX_OPAQUE_IDX(opq)    ((opq) & TX_OPAQUE_IDX_MASK)
-+#define TX_OPAQUE_BDS(opq)    (((opq) & TX_OPAQUE_BDS_MASK) >>        \
-+                               TX_OPAQUE_BDS_SHIFT)
-+#define TX_OPAQUE_PROD(bp, opq)       ((TX_OPAQUE_IDX(opq) + TX_OPAQUE_BDS(opq)) &\
-+                               (bp)->tx_ring_mask)
-+
- struct tx_bd_ext {
-       __le32 tx_bd_hsize_lflags;
-       #define TX_BD_FLAGS_TCP_UDP_CHKSUM                      (1 << 0)
-@@ -715,6 +721,7 @@ struct nqe_cn {
- #define BNXT_AGG_EVENT                2
- #define BNXT_TX_EVENT         4
- #define BNXT_REDIRECT_EVENT   8
-+#define BNXT_TX_CMP_EVENT     0x10
- struct bnxt_sw_tx_bd {
-       union {
-@@ -807,6 +814,7 @@ struct bnxt_tx_ring_info {
-       struct bnxt_napi        *bnapi;
-       u16                     tx_prod;
-       u16                     tx_cons;
-+      u16                     tx_hw_cons;
-       u16                     txq_index;
-       u8                      kick_pending;
-       struct bnxt_db_info     tx_db;
-@@ -1033,7 +1041,6 @@ struct bnxt_napi {
-       void                    (*tx_int)(struct bnxt *, struct bnxt_napi *,
-                                         int budget);
--      int                     tx_pkts;
-       u8                      events;
-       u8                      tx_fault:1;
-@@ -2360,7 +2367,7 @@ int bnxt_reserve_rings(struct bnxt *bp, bool irq_re_init);
- void bnxt_tx_disable(struct bnxt *bp);
- void bnxt_tx_enable(struct bnxt *bp);
- void bnxt_sched_reset_txr(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
--                        int idx);
-+                        u16 curr);
- void bnxt_report_link(struct bnxt *bp);
- int bnxt_update_link(struct bnxt *bp, bool chng_link_state);
- int bnxt_hwrm_set_pause(struct bnxt *);
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-index 37d155312f150..0c9dca6d9c352 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-@@ -122,17 +122,17 @@ void bnxt_tx_int_xdp(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
- {
-       struct bnxt_tx_ring_info *txr = bnapi->tx_ring;
-       struct bnxt_rx_ring_info *rxr = bnapi->rx_ring;
-+      u16 tx_hw_cons = txr->tx_hw_cons;
-       bool rx_doorbell_needed = false;
--      int nr_pkts = bnapi->tx_pkts;
-       struct bnxt_sw_tx_bd *tx_buf;
-       u16 tx_cons = txr->tx_cons;
-       u16 last_tx_cons = tx_cons;
--      int i, j, frags;
-+      int j, frags;
-       if (!budget)
-               return;
--      for (i = 0; i < nr_pkts; i++) {
-+      while (tx_cons != tx_hw_cons) {
-               tx_buf = &txr->tx_buf_ring[tx_cons];
-               if (tx_buf->action == XDP_REDIRECT) {
-@@ -157,13 +157,13 @@ void bnxt_tx_int_xdp(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
-                               page_pool_recycle_direct(rxr->page_pool, tx_buf->page);
-                       }
-               } else {
--                      bnxt_sched_reset_txr(bp, txr, i);
-+                      bnxt_sched_reset_txr(bp, txr, tx_cons);
-                       return;
-               }
-               tx_cons = NEXT_TX(tx_cons);
-       }
--      bnapi->tx_pkts = 0;
-+      bnapi->events &= ~BNXT_TX_CMP_EVENT;
-       WRITE_ONCE(txr->tx_cons, tx_cons);
-       if (rx_doorbell_needed) {
-               tx_buf = &txr->tx_buf_ring[last_tx_cons];
-@@ -268,7 +268,7 @@ bool bnxt_rx_xdp(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, u16 cons,
-       case XDP_TX:
-               rx_buf = &rxr->rx_buf_ring[cons];
-               mapping = rx_buf->mapping - bp->rx_dma_offset;
--              *event = 0;
-+              *event &= BNXT_TX_CMP_EVENT;
-               if (unlikely(xdp_buff_has_frags(&xdp))) {
-                       struct skb_shared_info *sinfo = xdp_get_shared_info_from_buff(&xdp);
--- 
-2.39.5
-
diff --git a/queue-6.6/bnxt_en-allow-some-tx-packets-to-be-unprocessed-in-n.patch b/queue-6.6/bnxt_en-allow-some-tx-packets-to-be-unprocessed-in-n.patch
deleted file mode 100644 (file)
index 9069db9..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-From eb246d2a49015e74e4d760c5bfdc6276492a2848 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 28 Jun 2024 12:29:58 -0700
-Subject: bnxt_en: Allow some TX packets to be unprocessed in NAPI
-
-From: Michael Chan <michael.chan@broadcom.com>
-
-[ Upstream commit ba0155f1e9fca8e5c59c840cf5451101b8360fe6 ]
-
-The driver's current logic will always free all the TX SKBs up to
-txr->tx_hw_cons within NAPI.  In the next patches, we'll be adding
-logic to handle TX timestamp completion and we may need to hold
-some remaining TX SKBs if we don't have the timestamp completions
-yet.
-
-Modify __bnxt_poll_work_done() to clear each event bit separately to
-allow bnapi->tx_int() to decide whether to clear BNXT_TX_CMP_EVENT or
-not.  bnapi->tx_int() will not clear BNXT_TX_CMP_EVENT if some TX
-SKBs are held waiting for TX timestamps.  Note that legacy chips will
-never hold any SKBs this way.  The SKB is always deferred to the PTP
-worker slow path to retrieve the timestamp from firmware.  On the new
-P7 chips, the timestamp is returned by the hardware directly and we
-can retrieve it directly from NAPI.
-
-Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
-Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
-Signed-off-by: Michael Chan <michael.chan@broadcom.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Stable-dep-of: 9caca6ac0e26 ("bnxt: properly flush XDP redirect lists")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 21 +++++++++++++++------
- 1 file changed, 15 insertions(+), 6 deletions(-)
-
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-index 143425e7a3029..2ada8345180dc 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-@@ -687,7 +687,8 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
-       return NETDEV_TX_OK;
- }
--static void __bnxt_tx_int(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
-+/* Returns true if some remaining TX packets not processed. */
-+static bool __bnxt_tx_int(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
-                         int budget)
- {
-       struct netdev_queue *txq = netdev_get_tx_queue(bp->dev, txr->txq_index);
-@@ -709,7 +710,7 @@ static void __bnxt_tx_int(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
-               if (unlikely(!skb)) {
-                       bnxt_sched_reset_txr(bp, txr, cons);
--                      return;
-+                      return false;
-               }
-               tx_pkts++;
-@@ -754,18 +755,22 @@ static void __bnxt_tx_int(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
-       __netif_txq_completed_wake(txq, tx_pkts, tx_bytes,
-                                  bnxt_tx_avail(bp, txr), bp->tx_wake_thresh,
-                                  READ_ONCE(txr->dev_state) == BNXT_DEV_STATE_CLOSING);
-+
-+      return false;
- }
- static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
- {
-       struct bnxt_tx_ring_info *txr;
-+      bool more = false;
-       int i;
-       bnxt_for_each_napi_tx(i, bnapi, txr) {
-               if (txr->tx_hw_cons != RING_TX(bp, txr->tx_cons))
--                      __bnxt_tx_int(bp, txr, budget);
-+                      more |= __bnxt_tx_int(bp, txr, budget);
-       }
--      bnapi->events &= ~BNXT_TX_CMP_EVENT;
-+      if (!more)
-+              bnapi->events &= ~BNXT_TX_CMP_EVENT;
- }
- static struct page *__bnxt_alloc_rx_page(struct bnxt *bp, dma_addr_t *mapping,
-@@ -2575,8 +2580,10 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
-               }
-       }
--      if (event & BNXT_REDIRECT_EVENT)
-+      if (event & BNXT_REDIRECT_EVENT) {
-               xdp_do_flush();
-+              event &= ~BNXT_REDIRECT_EVENT;
-+      }
-       if (event & BNXT_TX_EVENT) {
-               struct bnxt_tx_ring_info *txr = bnapi->tx_ring[0];
-@@ -2586,6 +2593,7 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
-               wmb();
-               bnxt_db_write_relaxed(bp, &txr->tx_db, prod);
-+              event &= ~BNXT_TX_EVENT;
-       }
-       cpr->cp_raw_cons = raw_cons;
-@@ -2603,13 +2611,14 @@ static void __bnxt_poll_work_done(struct bnxt *bp, struct bnxt_napi *bnapi,
-               struct bnxt_rx_ring_info *rxr = bnapi->rx_ring;
-               bnxt_db_write(bp, &rxr->rx_db, rxr->rx_prod);
-+              bnapi->events &= ~BNXT_RX_EVENT;
-       }
-       if (bnapi->events & BNXT_AGG_EVENT) {
-               struct bnxt_rx_ring_info *rxr = bnapi->rx_ring;
-               bnxt_db_write(bp, &rxr->rx_agg_db, rxr->rx_agg_prod);
-+              bnapi->events &= ~BNXT_AGG_EVENT;
-       }
--      bnapi->events &= BNXT_TX_CMP_EVENT;
- }
- static int bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
--- 
-2.39.5
-
diff --git a/queue-6.6/bnxt_en-fix-tx-ring-indexing-logic.patch b/queue-6.6/bnxt_en-fix-tx-ring-indexing-logic.patch
deleted file mode 100644 (file)
index e62ea18..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-From 8343c0046958e92447b923f3bf464e047c6d39ac Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 11 Dec 2023 16:51:12 -0800
-Subject: bnxt_en: Fix TX ring indexing logic
-
-From: Michael Chan <michael.chan@broadcom.com>
-
-[ Upstream commit 18fe0a383cca78cfb183f83f947e75bebc7b3a20 ]
-
-Two spots were missed when modifying the TX ring indexing logic.
-The use of unmasked TX index in bnxt_tx_int() will cause unnecessary
-__bnxt_tx_int() calls.  The same issue in bnxt_tx_int_xdp() can
-result in illegal array index.
-
-Fixes: 6d1add95536b ("bnxt_en: Modify TX ring indexing logic.")
-Signed-off-by: Michael Chan <michael.chan@broadcom.com>
-Link: https://lore.kernel.org/r/20231212005122.2401-4-michael.chan@broadcom.com
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Stable-dep-of: 9caca6ac0e26 ("bnxt: properly flush XDP redirect lists")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/broadcom/bnxt/bnxt.c     | 2 +-
- drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-index 8ef8d51f4c709..143425e7a3029 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-@@ -762,7 +762,7 @@ static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
-       int i;
-       bnxt_for_each_napi_tx(i, bnapi, txr) {
--              if (txr->tx_hw_cons != txr->tx_cons)
-+              if (txr->tx_hw_cons != RING_TX(bp, txr->tx_cons))
-                       __bnxt_tx_int(bp, txr, budget);
-       }
-       bnapi->events &= ~BNXT_TX_CMP_EVENT;
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-index 5e45fdd0d596f..20fb7cc2edd02 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-@@ -166,7 +166,7 @@ void bnxt_tx_int_xdp(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
-       bnapi->events &= ~BNXT_TX_CMP_EVENT;
-       WRITE_ONCE(txr->tx_cons, tx_cons);
-       if (rx_doorbell_needed) {
--              tx_buf = &txr->tx_buf_ring[last_tx_cons];
-+              tx_buf = &txr->tx_buf_ring[RING_TX(bp, last_tx_cons)];
-               bnxt_db_write(bp, &rxr->rx_db, tx_buf->rx_prod);
-       }
--- 
-2.39.5
-
diff --git a/queue-6.6/bnxt_en-modify-tx-ring-indexing-logic.patch b/queue-6.6/bnxt_en-modify-tx-ring-indexing-logic.patch
deleted file mode 100644 (file)
index c30eb6f..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-From f0ef6ad45c34505b1d670300db57d945b4bd4e4d Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 20 Nov 2023 15:44:02 -0800
-Subject: bnxt_en: Modify TX ring indexing logic.
-
-From: Michael Chan <michael.chan@broadcom.com>
-
-[ Upstream commit 6d1add95536bafe585c500ad8114af7ed4225a0f ]
-
-Change the TX ring logic so that the index increments unbounded and
-mask it only when needed.
-
-Modify the existing macros so that the index is not masked.  Add a
-new macro RING_TX() to mask it only when needed to get the index of
-txr->tx_buf_ring[].
-
-Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
-Signed-off-by: Michael Chan <michael.chan@broadcom.com>
-Link: https://lore.kernel.org/r/20231120234405.194542-11-michael.chan@broadcom.com
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Stable-dep-of: 9caca6ac0e26 ("bnxt: properly flush XDP redirect lists")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/broadcom/bnxt/bnxt.c     | 22 +++++++++----------
- drivers/net/ethernet/broadcom/bnxt/bnxt.h     |  5 +++--
- drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 14 ++++++------
- 3 files changed, 21 insertions(+), 20 deletions(-)
-
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-index 65cc301b0993b..8ef8d51f4c709 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-@@ -431,9 +431,9 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
-       len = skb_headlen(skb);
-       last_frag = skb_shinfo(skb)->nr_frags;
--      txbd = &txr->tx_desc_ring[TX_RING(prod)][TX_IDX(prod)];
-+      txbd = &txr->tx_desc_ring[TX_RING(bp, prod)][TX_IDX(prod)];
--      tx_buf = &txr->tx_buf_ring[prod];
-+      tx_buf = &txr->tx_buf_ring[RING_TX(bp, prod)];
-       tx_buf->skb = skb;
-       tx_buf->nr_frags = last_frag;
-@@ -521,7 +521,7 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
-               txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, txr, prod, 2);
-               prod = NEXT_TX(prod);
-               tx_push->tx_bd_opaque = txbd->tx_bd_opaque;
--              txbd = &txr->tx_desc_ring[TX_RING(prod)][TX_IDX(prod)];
-+              txbd = &txr->tx_desc_ring[TX_RING(bp, prod)][TX_IDX(prod)];
-               memcpy(txbd, tx_push1, sizeof(*txbd));
-               prod = NEXT_TX(prod);
-               tx_push->doorbell =
-@@ -567,7 +567,7 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
-       prod = NEXT_TX(prod);
-       txbd1 = (struct tx_bd_ext *)
--              &txr->tx_desc_ring[TX_RING(prod)][TX_IDX(prod)];
-+              &txr->tx_desc_ring[TX_RING(bp, prod)][TX_IDX(prod)];
-       txbd1->tx_bd_hsize_lflags = lflags;
-       if (skb_is_gso(skb)) {
-@@ -607,7 +607,7 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
-               skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
-               prod = NEXT_TX(prod);
--              txbd = &txr->tx_desc_ring[TX_RING(prod)][TX_IDX(prod)];
-+              txbd = &txr->tx_desc_ring[TX_RING(bp, prod)][TX_IDX(prod)];
-               len = skb_frag_size(frag);
-               mapping = skb_frag_dma_map(&pdev->dev, frag, 0, len,
-@@ -616,7 +616,7 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
-               if (unlikely(dma_mapping_error(&pdev->dev, mapping)))
-                       goto tx_dma_error;
--              tx_buf = &txr->tx_buf_ring[prod];
-+              tx_buf = &txr->tx_buf_ring[RING_TX(bp, prod)];
-               dma_unmap_addr_set(tx_buf, mapping, mapping);
-               txbd->tx_bd_haddr = cpu_to_le64(mapping);
-@@ -661,7 +661,7 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
-       /* start back at beginning and unmap skb */
-       prod = txr->tx_prod;
--      tx_buf = &txr->tx_buf_ring[prod];
-+      tx_buf = &txr->tx_buf_ring[RING_TX(bp, prod)];
-       dma_unmap_single(&pdev->dev, dma_unmap_addr(tx_buf, mapping),
-                        skb_headlen(skb), DMA_TO_DEVICE);
-       prod = NEXT_TX(prod);
-@@ -669,7 +669,7 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
-       /* unmap remaining mapped pages */
-       for (i = 0; i < last_frag; i++) {
-               prod = NEXT_TX(prod);
--              tx_buf = &txr->tx_buf_ring[prod];
-+              tx_buf = &txr->tx_buf_ring[RING_TX(bp, prod)];
-               dma_unmap_page(&pdev->dev, dma_unmap_addr(tx_buf, mapping),
-                              skb_frag_size(&skb_shinfo(skb)->frags[i]),
-                              DMA_TO_DEVICE);
-@@ -697,12 +697,12 @@ static void __bnxt_tx_int(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
-       u16 cons = txr->tx_cons;
-       int tx_pkts = 0;
--      while (cons != hw_cons) {
-+      while (RING_TX(bp, cons) != hw_cons) {
-               struct bnxt_sw_tx_bd *tx_buf;
-               struct sk_buff *skb;
-               int j, last;
--              tx_buf = &txr->tx_buf_ring[cons];
-+              tx_buf = &txr->tx_buf_ring[RING_TX(bp, cons)];
-               cons = NEXT_TX(cons);
-               skb = tx_buf->skb;
-               tx_buf->skb = NULL;
-@@ -726,7 +726,7 @@ static void __bnxt_tx_int(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
-               for (j = 0; j < last; j++) {
-                       cons = NEXT_TX(cons);
--                      tx_buf = &txr->tx_buf_ring[cons];
-+                      tx_buf = &txr->tx_buf_ring[RING_TX(bp, cons)];
-                       dma_unmap_page(
-                               &pdev->dev,
-                               dma_unmap_addr(tx_buf, mapping),
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
-index 0ebe51bcf8e6f..fe180e6095b32 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
-@@ -682,7 +682,7 @@ struct nqe_cn {
- #define RX_RING(x)    (((x) & ~(RX_DESC_CNT - 1)) >> (BNXT_PAGE_SHIFT - 4))
- #define RX_IDX(x)     ((x) & (RX_DESC_CNT - 1))
--#define TX_RING(x)    (((x) & ~(TX_DESC_CNT - 1)) >> (BNXT_PAGE_SHIFT - 4))
-+#define TX_RING(bp, x)        (((x) & (bp)->tx_ring_mask) >> (BNXT_PAGE_SHIFT - 4))
- #define TX_IDX(x)     ((x) & (TX_DESC_CNT - 1))
- #define CP_RING(x)    (((x) & ~(CP_DESC_CNT - 1)) >> (BNXT_PAGE_SHIFT - 4))
-@@ -713,7 +713,8 @@ struct nqe_cn {
- #define NEXT_RX_AGG(idx)      (((idx) + 1) & bp->rx_agg_ring_mask)
--#define NEXT_TX(idx)          (((idx) + 1) & bp->tx_ring_mask)
-+#define RING_TX(bp, idx)      ((idx) & (bp)->tx_ring_mask)
-+#define NEXT_TX(idx)          ((idx) + 1)
- #define ADV_RAW_CMP(idx, n)   ((idx) + (n))
- #define NEXT_RAW_CMP(idx)     ADV_RAW_CMP(idx, 1)
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-index c3fb7f9b081ed..5e45fdd0d596f 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-@@ -42,12 +42,12 @@ struct bnxt_sw_tx_bd *bnxt_xmit_bd(struct bnxt *bp,
-       /* fill up the first buffer */
-       prod = txr->tx_prod;
--      tx_buf = &txr->tx_buf_ring[prod];
-+      tx_buf = &txr->tx_buf_ring[RING_TX(bp, prod)];
-       tx_buf->nr_frags = num_frags;
-       if (xdp)
-               tx_buf->page = virt_to_head_page(xdp->data);
--      txbd = &txr->tx_desc_ring[TX_RING(prod)][TX_IDX(prod)];
-+      txbd = &txr->tx_desc_ring[TX_RING(bp, prod)][TX_IDX(prod)];
-       flags = (len << TX_BD_LEN_SHIFT) |
-               ((num_frags + 1) << TX_BD_FLAGS_BD_CNT_SHIFT) |
-               bnxt_lhint_arr[len >> 9];
-@@ -66,10 +66,10 @@ struct bnxt_sw_tx_bd *bnxt_xmit_bd(struct bnxt *bp,
-               WRITE_ONCE(txr->tx_prod, prod);
-               /* first fill up the first buffer */
--              frag_tx_buf = &txr->tx_buf_ring[prod];
-+              frag_tx_buf = &txr->tx_buf_ring[RING_TX(bp, prod)];
-               frag_tx_buf->page = skb_frag_page(frag);
--              txbd = &txr->tx_desc_ring[TX_RING(prod)][TX_IDX(prod)];
-+              txbd = &txr->tx_desc_ring[TX_RING(bp, prod)][TX_IDX(prod)];
-               frag_len = skb_frag_size(frag);
-               flags = frag_len << TX_BD_LEN_SHIFT;
-@@ -132,8 +132,8 @@ void bnxt_tx_int_xdp(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
-       if (!budget)
-               return;
--      while (tx_cons != tx_hw_cons) {
--              tx_buf = &txr->tx_buf_ring[tx_cons];
-+      while (RING_TX(bp, tx_cons) != tx_hw_cons) {
-+              tx_buf = &txr->tx_buf_ring[RING_TX(bp, tx_cons)];
-               if (tx_buf->action == XDP_REDIRECT) {
-                       struct pci_dev *pdev = bp->pdev;
-@@ -153,7 +153,7 @@ void bnxt_tx_int_xdp(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
-                       frags = tx_buf->nr_frags;
-                       for (j = 0; j < frags; j++) {
-                               tx_cons = NEXT_TX(tx_cons);
--                              tx_buf = &txr->tx_buf_ring[tx_cons];
-+                              tx_buf = &txr->tx_buf_ring[RING_TX(bp, tx_cons)];
-                               page_pool_recycle_direct(rxr->page_pool, tx_buf->page);
-                       }
-               } else {
--- 
-2.39.5
-
diff --git a/queue-6.6/bnxt_en-new-encoding-for-the-tx-opaque-field.patch b/queue-6.6/bnxt_en-new-encoding-for-the-tx-opaque-field.patch
deleted file mode 100644 (file)
index 74a9a4c..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-From 37e7c3b9e44da10a14e35d3a72be465aaa557830 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 13 Nov 2023 16:16:15 -0800
-Subject: bnxt_en: New encoding for the TX opaque field
-
-From: Michael Chan <michael.chan@broadcom.com>
-
-[ Upstream commit 5a3c585fa83f9172848c19b1000c6ad3c8b36129 ]
-
-In order to support multiple TX rings on the same MSIX, we'll use the
-upper byte of the TX opaque field to store the ring index in the new
-tx_napi_idx field.  This tx_napi_idx field is currently always 0 until
-more infrastructure is added in later patches.
-
-Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
-Signed-off-by: Michael Chan <michael.chan@broadcom.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Stable-dep-of: 9caca6ac0e26 ("bnxt: properly flush XDP redirect lists")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/broadcom/bnxt/bnxt.c     |  4 ++--
- drivers/net/ethernet/broadcom/bnxt/bnxt.h     | 10 ++++++++--
- drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c |  2 +-
- 3 files changed, 11 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-index 056ca742ae1f7..b5ed6c0753f7a 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-@@ -518,7 +518,7 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
-               txbd->tx_bd_len_flags_type = tx_push->tx_bd_len_flags_type;
-               txbd->tx_bd_haddr = txr->data_mapping;
--              txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, prod, 2);
-+              txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, txr, prod, 2);
-               prod = NEXT_TX(prod);
-               tx_push->tx_bd_opaque = txbd->tx_bd_opaque;
-               txbd = &txr->tx_desc_ring[TX_RING(prod)][TX_IDX(prod)];
-@@ -563,7 +563,7 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
-               ((last_frag + 2) << TX_BD_FLAGS_BD_CNT_SHIFT);
-       txbd->tx_bd_haddr = cpu_to_le64(mapping);
--      txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, prod, 2 + last_frag);
-+      txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, txr, prod, 2 + last_frag);
-       prod = NEXT_TX(prod);
-       txbd1 = (struct tx_bd_ext *)
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
-index fd2122d9ecc3d..d6636af60d821 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
-@@ -64,11 +64,16 @@ struct tx_bd {
- #define TX_OPAQUE_IDX_MASK    0x0000ffff
- #define TX_OPAQUE_BDS_MASK    0x00ff0000
- #define TX_OPAQUE_BDS_SHIFT   16
-+#define TX_OPAQUE_RING_MASK   0xff000000
-+#define TX_OPAQUE_RING_SHIFT  24
--#define SET_TX_OPAQUE(bp, idx, bds)                                   \
--      (((bds) << TX_OPAQUE_BDS_SHIFT) | ((idx) & (bp)->tx_ring_mask))
-+#define SET_TX_OPAQUE(bp, txr, idx, bds)                              \
-+      (((txr)->tx_napi_idx << TX_OPAQUE_RING_SHIFT) |                 \
-+       ((bds) << TX_OPAQUE_BDS_SHIFT) | ((idx) & (bp)->tx_ring_mask))
- #define TX_OPAQUE_IDX(opq)    ((opq) & TX_OPAQUE_IDX_MASK)
-+#define TX_OPAQUE_RING(opq)   (((opq) & TX_OPAQUE_RING_MASK) >>       \
-+                               TX_OPAQUE_RING_SHIFT)
- #define TX_OPAQUE_BDS(opq)    (((opq) & TX_OPAQUE_BDS_MASK) >>        \
-                                TX_OPAQUE_BDS_SHIFT)
- #define TX_OPAQUE_PROD(bp, opq)       ((TX_OPAQUE_IDX(opq) + TX_OPAQUE_BDS(opq)) &\
-@@ -816,6 +821,7 @@ struct bnxt_tx_ring_info {
-       u16                     tx_cons;
-       u16                     tx_hw_cons;
-       u16                     txq_index;
-+      u8                      tx_napi_idx;
-       u8                      kick_pending;
-       struct bnxt_db_info     tx_db;
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-index 0c9dca6d9c352..f9ed827efddd4 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-@@ -52,7 +52,7 @@ struct bnxt_sw_tx_bd *bnxt_xmit_bd(struct bnxt *bp,
-               ((num_frags + 1) << TX_BD_FLAGS_BD_CNT_SHIFT) |
-               bnxt_lhint_arr[len >> 9];
-       txbd->tx_bd_len_flags_type = cpu_to_le32(flags);
--      txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, prod, 1 + num_frags);
-+      txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, txr, prod, 1 + num_frags);
-       txbd->tx_bd_haddr = cpu_to_le64(mapping);
-       /* now let us fill up the frags into the next buffers */
--- 
-2.39.5
-
diff --git a/queue-6.6/bnxt_en-put-the-tx-producer-information-in-the-tx-bd.patch b/queue-6.6/bnxt_en-put-the-tx-producer-information-in-the-tx-bd.patch
deleted file mode 100644 (file)
index 9f4dc84..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-From aa7e97245bba05960cc8473dab52e708fe946da5 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 13 Nov 2023 16:16:09 -0800
-Subject: bnxt_en: Put the TX producer information in the TX BD opaque field
-
-From: Michael Chan <michael.chan@broadcom.com>
-
-[ Upstream commit 34eec1f29a5998305578fcc3e55d491a1795b56d ]
-
-Currently, the opaque field in the TX BD is only used for debugging.
-The TX completion logic relies on getting one TX completion for each
-packet and they always complete in order.
-
-Improve this scheme by putting the producer information (ring index plus
-number of BDs for the packet) in the opaque field.  This way, we can
-handle TX completion processing by looking at the last TX completion
-instead of counting the number of completions.
-
-Since we no longer need to count the exact number of completions, we can
-optimize xmit_more by disabling TX completion when the xmit_more
-condition is true.  This will be done in later patches.
-
-This patch is only initializing the opaque field in the TX BD and is
-not changing the driver's TX completion logic yet.
-
-Reviewed-by: Andy Gospodarek <gospo@broadcom.com>
-Signed-off-by: Michael Chan <michael.chan@broadcom.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Stable-dep-of: 9caca6ac0e26 ("bnxt: properly flush XDP redirect lists")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/broadcom/bnxt/bnxt.c     | 5 +++--
- drivers/net/ethernet/broadcom/bnxt/bnxt.h     | 7 +++++++
- drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 2 +-
- 3 files changed, 11 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-index 6bf4a21853858..5b137747937ac 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-@@ -433,8 +433,6 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
-       txbd = &txr->tx_desc_ring[TX_RING(prod)][TX_IDX(prod)];
--      txbd->tx_bd_opaque = prod;
--
-       tx_buf = &txr->tx_buf_ring[prod];
-       tx_buf->skb = skb;
-       tx_buf->nr_frags = last_frag;
-@@ -520,7 +518,9 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
-               txbd->tx_bd_len_flags_type = tx_push->tx_bd_len_flags_type;
-               txbd->tx_bd_haddr = txr->data_mapping;
-+              txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, prod, 2);
-               prod = NEXT_TX(prod);
-+              tx_push->tx_bd_opaque = txbd->tx_bd_opaque;
-               txbd = &txr->tx_desc_ring[TX_RING(prod)][TX_IDX(prod)];
-               memcpy(txbd, tx_push1, sizeof(*txbd));
-               prod = NEXT_TX(prod);
-@@ -563,6 +563,7 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
-               ((last_frag + 2) << TX_BD_FLAGS_BD_CNT_SHIFT);
-       txbd->tx_bd_haddr = cpu_to_le64(mapping);
-+      txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, prod, 2 + last_frag);
-       prod = NEXT_TX(prod);
-       txbd1 = (struct tx_bd_ext *)
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
-index 0116f67593e3a..39b09e49db9e3 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
-@@ -61,6 +61,13 @@ struct tx_bd {
-       __le64 tx_bd_haddr;
- } __packed;
-+#define TX_OPAQUE_IDX_MASK    0x0000ffff
-+#define TX_OPAQUE_BDS_MASK    0x00ff0000
-+#define TX_OPAQUE_BDS_SHIFT   16
-+
-+#define SET_TX_OPAQUE(bp, idx, bds)                                   \
-+      (((bds) << TX_OPAQUE_BDS_SHIFT) | ((idx) & (bp)->tx_ring_mask))
-+
- struct tx_bd_ext {
-       __le32 tx_bd_hsize_lflags;
-       #define TX_BD_FLAGS_TCP_UDP_CHKSUM                      (1 << 0)
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-index 758f51366ef03..37d155312f150 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-@@ -52,7 +52,7 @@ struct bnxt_sw_tx_bd *bnxt_xmit_bd(struct bnxt *bp,
-               ((num_frags + 1) << TX_BD_FLAGS_BD_CNT_SHIFT) |
-               bnxt_lhint_arr[len >> 9];
-       txbd->tx_bd_len_flags_type = cpu_to_le32(flags);
--      txbd->tx_bd_opaque = prod;
-+      txbd->tx_bd_opaque = SET_TX_OPAQUE(bp, prod, 1 + num_frags);
-       txbd->tx_bd_haddr = cpu_to_le64(mapping);
-       /* now let us fill up the frags into the next buffers */
--- 
-2.39.5
-
diff --git a/queue-6.6/bnxt_en-refactor-bnxt_hwrm_set_coal.patch b/queue-6.6/bnxt_en-refactor-bnxt_hwrm_set_coal.patch
deleted file mode 100644 (file)
index 0859bc3..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-From 9243fccd2bad5a5748b13726548fbba28e3b9143 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 13 Nov 2023 16:16:16 -0800
-Subject: bnxt_en: Refactor bnxt_hwrm_set_coal()
-
-From: Michael Chan <michael.chan@broadcom.com>
-
-[ Upstream commit 877edb347323b669c5c9511cc9e097e1192dd31b ]
-
-Add 2 helper functions to set coalescing for each RX and TX rings.  This
-will make it easier to expand the number of TX rings per MSIX in the
-next patches.
-
-Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
-Signed-off-by: Michael Chan <michael.chan@broadcom.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Stable-dep-of: 9caca6ac0e26 ("bnxt: properly flush XDP redirect lists")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 43 ++++++++++++++---------
- 1 file changed, 26 insertions(+), 17 deletions(-)
-
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-index b5ed6c0753f7a..85872fcff5c9f 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-@@ -6810,10 +6810,29 @@ int bnxt_hwrm_set_ring_coal(struct bnxt *bp, struct bnxt_napi *bnapi)
-       return hwrm_req_send(bp, req_rx);
- }
-+static int
-+bnxt_hwrm_set_rx_coal(struct bnxt *bp, struct bnxt_napi *bnapi,
-+                    struct hwrm_ring_cmpl_ring_cfg_aggint_params_input *req)
-+{
-+      u16 ring_id = bnxt_cp_ring_for_rx(bp, bnapi->rx_ring);
-+
-+      req->ring_id = cpu_to_le16(ring_id);
-+      return hwrm_req_send(bp, req);
-+}
-+
-+static int
-+bnxt_hwrm_set_tx_coal(struct bnxt *bp, struct bnxt_napi *bnapi,
-+                    struct hwrm_ring_cmpl_ring_cfg_aggint_params_input *req)
-+{
-+      u16 ring_id = bnxt_cp_ring_for_tx(bp, bnapi->tx_ring);
-+
-+      req->ring_id = cpu_to_le16(ring_id);
-+      return hwrm_req_send(bp, req);
-+}
-+
- int bnxt_hwrm_set_coal(struct bnxt *bp)
- {
--      struct hwrm_ring_cmpl_ring_cfg_aggint_params_input *req_rx, *req_tx,
--                                                         *req;
-+      struct hwrm_ring_cmpl_ring_cfg_aggint_params_input *req_rx, *req_tx;
-       int i, rc;
-       rc = hwrm_req_init(bp, req_rx, HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS);
-@@ -6834,18 +6853,11 @@ int bnxt_hwrm_set_coal(struct bnxt *bp)
-       for (i = 0; i < bp->cp_nr_rings; i++) {
-               struct bnxt_napi *bnapi = bp->bnapi[i];
-               struct bnxt_coal *hw_coal;
--              u16 ring_id;
--              req = req_rx;
--              if (!bnapi->rx_ring) {
--                      ring_id = bnxt_cp_ring_for_tx(bp, bnapi->tx_ring);
--                      req = req_tx;
--              } else {
--                      ring_id = bnxt_cp_ring_for_rx(bp, bnapi->rx_ring);
--              }
--              req->ring_id = cpu_to_le16(ring_id);
--
--              rc = hwrm_req_send(bp, req);
-+              if (!bnapi->rx_ring)
-+                      rc = bnxt_hwrm_set_tx_coal(bp, bnapi, req_tx);
-+              else
-+                      rc = bnxt_hwrm_set_rx_coal(bp, bnapi, req_rx);
-               if (rc)
-                       break;
-@@ -6853,10 +6865,7 @@ int bnxt_hwrm_set_coal(struct bnxt *bp)
-                       continue;
-               if (bnapi->rx_ring && bnapi->tx_ring) {
--                      req = req_tx;
--                      ring_id = bnxt_cp_ring_for_tx(bp, bnapi->tx_ring);
--                      req->ring_id = cpu_to_le16(ring_id);
--                      rc = hwrm_req_send(bp, req);
-+                      rc = bnxt_hwrm_set_tx_coal(bp, bnapi, req_tx);
-                       if (rc)
-                               break;
-               }
--- 
-2.39.5
-
diff --git a/queue-6.6/bnxt_en-refactor-bnxt_tx_int.patch b/queue-6.6/bnxt_en-refactor-bnxt_tx_int.patch
deleted file mode 100644 (file)
index d089a5e..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-From f0836d14a6d42d57fb167d65a785fa3845f79c1c Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 13 Nov 2023 16:16:14 -0800
-Subject: bnxt_en: Refactor bnxt_tx_int()
-
-From: Michael Chan <michael.chan@broadcom.com>
-
-[ Upstream commit ebf72319cef6e1c038e13bd4c9e3f0ad857e57ff ]
-
-bnxt_tx_int() processes the only one TX ring from the bnxt_napi pointer.
-To prepare for more TX rings associated with the bnxt_napi structure,
-add a new __bnxt_tx_int() function that takes the bnxt_tx_ring_info
-pointer to process that one TX ring.  No functional change.
-
-Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
-Signed-off-by: Michael Chan <michael.chan@broadcom.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Stable-dep-of: 9caca6ac0e26 ("bnxt: properly flush XDP redirect lists")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 17 ++++++++++++-----
- 1 file changed, 12 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-index 7e1f4b3adb2c9..056ca742ae1f7 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-@@ -687,14 +687,14 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
-       return NETDEV_TX_OK;
- }
--static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
-+static void __bnxt_tx_int(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
-+                        int budget)
- {
--      struct bnxt_tx_ring_info *txr = bnapi->tx_ring;
-       struct netdev_queue *txq = netdev_get_tx_queue(bp->dev, txr->txq_index);
--      u16 hw_cons = txr->tx_hw_cons;
--      u16 cons = txr->tx_cons;
-       struct pci_dev *pdev = bp->pdev;
-+      u16 hw_cons = txr->tx_hw_cons;
-       unsigned int tx_bytes = 0;
-+      u16 cons = txr->tx_cons;
-       int tx_pkts = 0;
-       while (cons != hw_cons) {
-@@ -749,7 +749,6 @@ static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
-               dev_consume_skb_any(skb);
-       }
--      bnapi->events &= ~BNXT_TX_CMP_EVENT;
-       WRITE_ONCE(txr->tx_cons, cons);
-       __netif_txq_completed_wake(txq, tx_pkts, tx_bytes,
-@@ -757,6 +756,14 @@ static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
-                                  READ_ONCE(txr->dev_state) == BNXT_DEV_STATE_CLOSING);
- }
-+static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
-+{
-+      struct bnxt_tx_ring_info *txr = bnapi->tx_ring;
-+
-+      __bnxt_tx_int(bp, txr, budget);
-+      bnapi->events &= ~BNXT_TX_CMP_EVENT;
-+}
-+
- static struct page *__bnxt_alloc_rx_page(struct bnxt *bp, dma_addr_t *mapping,
-                                        struct bnxt_rx_ring_info *rxr,
-                                        unsigned int *offset,
--- 
-2.39.5
-
diff --git a/queue-6.6/bnxt_en-support-up-to-8-tx-rings-per-msix.patch b/queue-6.6/bnxt_en-support-up-to-8-tx-rings-per-msix.patch
deleted file mode 100644 (file)
index 443d0ab..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-From c0dcbfb47f056112690ed3c42168123234d2e345 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 13 Nov 2023 16:16:17 -0800
-Subject: bnxt_en: Support up to 8 TX rings per MSIX
-
-From: Michael Chan <michael.chan@broadcom.com>
-
-[ Upstream commit 0589a1ed4d334c156110f7f42ad7c39a02761438 ]
-
-For each mqprio TC, we allocate a set of TX rings to map to the new
-hardware CoS queue.  Expand the tx_ring pointer in struct bnxt_napi
-to an array of 8 to support up to 8 TX rings, one for each TC.
-Only array entry 0 is used at this time.  The rest of the array
-entries will be used in later patches.
-
-Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
-Signed-off-by: Michael Chan <michael.chan@broadcom.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Stable-dep-of: 9caca6ac0e26 ("bnxt: properly flush XDP redirect lists")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/ethernet/broadcom/bnxt/bnxt.c     | 78 +++++++++++--------
- drivers/net/ethernet/broadcom/bnxt/bnxt.h     | 12 ++-
- drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c |  4 +-
- 3 files changed, 55 insertions(+), 39 deletions(-)
-
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-index 85872fcff5c9f..65cc301b0993b 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-@@ -758,9 +758,13 @@ static void __bnxt_tx_int(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
- static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
- {
--      struct bnxt_tx_ring_info *txr = bnapi->tx_ring;
-+      struct bnxt_tx_ring_info *txr;
-+      int i;
--      __bnxt_tx_int(bp, txr, budget);
-+      bnxt_for_each_napi_tx(i, bnapi, txr) {
-+              if (txr->tx_hw_cons != txr->tx_cons)
-+                      __bnxt_tx_int(bp, txr, budget);
-+      }
-       bnapi->events &= ~BNXT_TX_CMP_EVENT;
- }
-@@ -2500,7 +2504,6 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
- {
-       struct bnxt_napi *bnapi = cpr->bnapi;
-       u32 raw_cons = cpr->cp_raw_cons;
--      struct bnxt_tx_ring_info *txr;
-       u32 cons;
-       int rx_pkts = 0;
-       u8 event = 0;
-@@ -2508,7 +2511,6 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
-       cpr->has_more_work = 0;
-       cpr->had_work_done = 1;
--      txr = bnapi->tx_ring;
-       while (1) {
-               int rc;
-@@ -2524,8 +2526,10 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
-               dma_rmb();
-               if (TX_CMP_TYPE(txcmp) == CMP_TYPE_TX_L2_CMP) {
-                       u32 opaque = txcmp->tx_cmp_opaque;
-+                      struct bnxt_tx_ring_info *txr;
-                       u16 tx_freed;
-+                      txr = bnapi->tx_ring[TX_OPAQUE_RING(opaque)];
-                       event |= BNXT_TX_CMP_EVENT;
-                       txr->tx_hw_cons = TX_OPAQUE_PROD(bp, opaque);
-                       tx_freed = (txr->tx_hw_cons - txr->tx_cons) &
-@@ -2575,7 +2579,7 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
-               xdp_do_flush();
-       if (event & BNXT_TX_EVENT) {
--              struct bnxt_tx_ring_info *txr = bnapi->tx_ring;
-+              struct bnxt_tx_ring_info *txr = bnapi->tx_ring[0];
-               u16 prod = txr->tx_prod;
-               /* Sync BD data before updating doorbell */
-@@ -3558,7 +3562,7 @@ static int bnxt_alloc_cp_rings(struct bnxt *bp)
- static void bnxt_init_ring_struct(struct bnxt *bp)
- {
--      int i;
-+      int i, j;
-       for (i = 0; i < bp->cp_nr_rings; i++) {
-               struct bnxt_napi *bnapi = bp->bnapi[i];
-@@ -3603,18 +3607,16 @@ static void bnxt_init_ring_struct(struct bnxt *bp)
-               rmem->vmem = (void **)&rxr->rx_agg_ring;
- skip_rx:
--              txr = bnapi->tx_ring;
--              if (!txr)
--                      continue;
--
--              ring = &txr->tx_ring_struct;
--              rmem = &ring->ring_mem;
--              rmem->nr_pages = bp->tx_nr_pages;
--              rmem->page_size = HW_RXBD_RING_SIZE;
--              rmem->pg_arr = (void **)txr->tx_desc_ring;
--              rmem->dma_arr = txr->tx_desc_mapping;
--              rmem->vmem_size = SW_TXBD_RING_SIZE * bp->tx_nr_pages;
--              rmem->vmem = (void **)&txr->tx_buf_ring;
-+              bnxt_for_each_napi_tx(j, bnapi, txr) {
-+                      ring = &txr->tx_ring_struct;
-+                      rmem = &ring->ring_mem;
-+                      rmem->nr_pages = bp->tx_nr_pages;
-+                      rmem->page_size = HW_TXBD_RING_SIZE;
-+                      rmem->pg_arr = (void **)txr->tx_desc_ring;
-+                      rmem->dma_arr = txr->tx_desc_mapping;
-+                      rmem->vmem_size = SW_TXBD_RING_SIZE * bp->tx_nr_pages;
-+                      rmem->vmem = (void **)&txr->tx_buf_ring;
-+              }
-       }
- }
-@@ -4414,7 +4416,7 @@ static int bnxt_alloc_stats(struct bnxt *bp)
- static void bnxt_clear_ring_indices(struct bnxt *bp)
- {
--      int i;
-+      int i, j;
-       if (!bp->bnapi)
-               return;
-@@ -4431,8 +4433,7 @@ static void bnxt_clear_ring_indices(struct bnxt *bp)
-               cpr = &bnapi->cp_ring;
-               cpr->cp_raw_cons = 0;
--              txr = bnapi->tx_ring;
--              if (txr) {
-+              bnxt_for_each_napi_tx(j, bnapi, txr) {
-                       txr->tx_prod = 0;
-                       txr->tx_cons = 0;
-                       txr->tx_hw_cons = 0;
-@@ -4601,7 +4602,7 @@ static int bnxt_alloc_mem(struct bnxt *bp, bool irq_re_init)
-                               txr->tx_ring_struct.ring_mem.flags =
-                                       BNXT_RMEM_RING_PTE_FLAG;
-                       txr->bnapi = bp->bnapi[j];
--                      bp->bnapi[j]->tx_ring = txr;
-+                      bp->bnapi[j]->tx_ring[0] = txr;
-                       bp->tx_ring_map[i] = bp->tx_nr_rings_xdp + i;
-                       if (i >= bp->tx_nr_rings_xdp) {
-                               txr->txq_index = i - bp->tx_nr_rings_xdp;
-@@ -6824,10 +6825,21 @@ static int
- bnxt_hwrm_set_tx_coal(struct bnxt *bp, struct bnxt_napi *bnapi,
-                     struct hwrm_ring_cmpl_ring_cfg_aggint_params_input *req)
- {
--      u16 ring_id = bnxt_cp_ring_for_tx(bp, bnapi->tx_ring);
-+      struct bnxt_tx_ring_info *txr;
-+      int i, rc;
--      req->ring_id = cpu_to_le16(ring_id);
--      return hwrm_req_send(bp, req);
-+      bnxt_for_each_napi_tx(i, bnapi, txr) {
-+              u16 ring_id;
-+
-+              ring_id = bnxt_cp_ring_for_tx(bp, txr);
-+              req->ring_id = cpu_to_le16(ring_id);
-+              rc = hwrm_req_send(bp, req);
-+              if (rc)
-+                      return rc;
-+              if (!(bp->flags & BNXT_FLAG_CHIP_P5))
-+                      return 0;
-+      }
-+      return 0;
- }
- int bnxt_hwrm_set_coal(struct bnxt *bp)
-@@ -6864,7 +6876,7 @@ int bnxt_hwrm_set_coal(struct bnxt *bp)
-               if (!(bp->flags & BNXT_FLAG_CHIP_P5))
-                       continue;
--              if (bnapi->rx_ring && bnapi->tx_ring) {
-+              if (bnapi->rx_ring && bnapi->tx_ring[0]) {
-                       rc = bnxt_hwrm_set_tx_coal(bp, bnapi, req_tx);
-                       if (rc)
-                               break;
-@@ -11569,15 +11581,13 @@ static int bnxt_dbg_hwrm_ring_info_get(struct bnxt *bp, u8 ring_type,
- static void bnxt_dump_tx_sw_state(struct bnxt_napi *bnapi)
- {
--      struct bnxt_tx_ring_info *txr = bnapi->tx_ring;
--      int i = bnapi->index;
--
--      if (!txr)
--              return;
-+      struct bnxt_tx_ring_info *txr;
-+      int i = bnapi->index, j;
--      netdev_info(bnapi->bp->dev, "[%d]: tx{fw_ring: %d prod: %x cons: %x}\n",
--                  i, txr->tx_ring_struct.fw_ring_id, txr->tx_prod,
--                  txr->tx_cons);
-+      bnxt_for_each_napi_tx(j, bnapi, txr)
-+              netdev_info(bnapi->bp->dev, "[%d.%d]: tx{fw_ring: %d prod: %x cons: %x}\n",
-+                          i, j, txr->tx_ring_struct.fw_ring_id, txr->tx_prod,
-+                          txr->tx_cons);
- }
- static void bnxt_dump_rx_sw_state(struct bnxt_napi *bnapi)
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
-index d6636af60d821..0ebe51bcf8e6f 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
-@@ -1036,6 +1036,14 @@ struct bnxt_cp_ring_info {
- #define BNXT_TX_HDL   1
- };
-+#define BNXT_MAX_QUEUE                8
-+#define BNXT_MAX_TXR_PER_NAPI BNXT_MAX_QUEUE
-+
-+#define bnxt_for_each_napi_tx(iter, bnapi, txr)               \
-+      for (iter = 0, txr = (bnapi)->tx_ring[0]; txr;  \
-+           txr = (iter < BNXT_MAX_TXR_PER_NAPI - 1) ? \
-+           (bnapi)->tx_ring[++iter] : NULL)
-+
- struct bnxt_napi {
-       struct napi_struct      napi;
-       struct bnxt             *bp;
-@@ -1043,7 +1051,7 @@ struct bnxt_napi {
-       int                     index;
-       struct bnxt_cp_ring_info        cp_ring;
-       struct bnxt_rx_ring_info        *rx_ring;
--      struct bnxt_tx_ring_info        *tx_ring;
-+      struct bnxt_tx_ring_info        *tx_ring[BNXT_MAX_TXR_PER_NAPI];
-       void                    (*tx_int)(struct bnxt *, struct bnxt_napi *,
-                                         int budget);
-@@ -1380,8 +1388,6 @@ struct bnxt_link_info {
-       (PORT_PHY_CFG_REQ_FLAGS_FEC_CLAUSE74_DISABLE |          \
-        BNXT_FEC_RS_OFF(link_info))
--#define BNXT_MAX_QUEUE        8
--
- struct bnxt_queue_info {
-       u8      queue_id;
-       u8      queue_profile;
-diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-index f9ed827efddd4..c3fb7f9b081ed 100644
---- a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
-@@ -120,7 +120,7 @@ static void __bnxt_xmit_xdp_redirect(struct bnxt *bp,
- void bnxt_tx_int_xdp(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
- {
--      struct bnxt_tx_ring_info *txr = bnapi->tx_ring;
-+      struct bnxt_tx_ring_info *txr = bnapi->tx_ring[0];
-       struct bnxt_rx_ring_info *rxr = bnapi->rx_ring;
-       u16 tx_hw_cons = txr->tx_hw_cons;
-       bool rx_doorbell_needed = false;
-@@ -242,7 +242,7 @@ bool bnxt_rx_xdp(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, u16 cons,
-       pdev = bp->pdev;
-       offset = bp->rx_offset;
--      txr = rxr->bnapi->tx_ring;
-+      txr = rxr->bnapi->tx_ring[0];
-       /* BNXT_RX_PAGE_MODE(bp) when XDP enabled */
-       orig_data = xdp.data;
--- 
-2.39.5
-
index 2e7383bc55a96a6c57925c3a967e94ac21f003f2..70da8ead909aafca8e48c620a388b6486349c367 100644 (file)
@@ -82,16 +82,6 @@ libbpf-fix-null-pointer-dereference-in-btf_dump__fre.patch
 wifi-mac80211-fix-beacon-interval-calculation-overfl.patch
 af_unix-don-t-set-econnreset-for-consumed-oob-skb.patch
 vsock-uapi-fix-linux-vm_sockets.h-userspace-compilat.patch
-bnxt_en-put-the-tx-producer-information-in-the-tx-bd.patch
-bnxt_en-add-completion-ring-pointer-in-tx-and-rx-rin.patch
-bnxt_en-refactor-bnxt_tx_int.patch
-bnxt_en-new-encoding-for-the-tx-opaque-field.patch
-bnxt_en-refactor-bnxt_hwrm_set_coal.patch
-bnxt_en-support-up-to-8-tx-rings-per-msix.patch
-bnxt_en-modify-tx-ring-indexing-logic.patch
-bnxt_en-fix-tx-ring-indexing-logic.patch
-bnxt_en-allow-some-tx-packets-to-be-unprocessed-in-n.patch
-bnxt-properly-flush-xdp-redirect-lists.patch
 um-ubd-add-missing-error-check-in-start_io_thread.patch
 libbpf-fix-possible-use-after-free-for-externs.patch
 net-enetc-correct-endianness-handling-in-_enetc_rd_r.patch