From: Bhargava Marreddy <bhargava.marreddy@broadcom.com>
To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
pabeni@redhat.com, andrew+netdev@lunn.ch, horms@kernel.org
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
michael.chan@broadcom.com, pavan.chebbi@broadcom.com,
vsrama-krishna.nemani@broadcom.com, vikas.gupta@broadcom.com,
Bhargava Marreddy <bhargava.marreddy@broadcom.com>,
Dharmender Garg <dharmender.garg@broadcom.com>,
Rajashekar Hudumula <rajashekar.hudumula@broadcom.com>,
Ramakrishna Koduri <ramakrishna.koduri@broadcom.com>
Subject: [PATCH net-next v3 1/5] bnge: factor out per-NQ alloc/free helpers
Date: Wed, 14 Oct 2026 01:36:41 +0530 [thread overview]
Message-ID: <20261013200645.1346299-2-bhargava.marreddy@broadcom.com> (raw)
In-Reply-To: <20261013200645.1346299-1-bhargava.marreddy@broadcom.com>
The descriptor array, ring memory, firmware ring and IRQ of an NQ are
allocated and released inside loops over all NQs, and the NQ ring memory
is set up with the completion rings.
Factor the per-NQ parts out into bnge_alloc_nq()/bnge_free_nq(),
bnge_hwrm_nq_alloc()/bnge_hwrm_nq_free() and
bnge_nq_request_irq()/bnge_nq_free_irq() so a single NQ can be created
and destroyed independently of the others. Rename
bnge_{alloc,free}_nq_arrays() to bnge_{alloc,free}_nqs().
The NQ ring_mem setup, ring allocation and fw_ring_id initialization
move into bnge_alloc_nq(), so the NQ ring memory is allocated with the
NQ descriptor arrays rather than with the completion rings. The
fw_ring_id initialization thus moves from bnge_init_nic(), which runs
on every open, to bnge_alloc_core(), which also runs on every open.
The IRQ map index is also set there; the value is unchanged. The
affinity hint is now derived from bnapi->index, which equals the loop
index used before. The error path of bnge_alloc_nqs() now unwinds only
the NQs allocated so far.
Also rename bnge_{alloc,free,init}_nq_tree() to
bnge_{alloc,free,init}_cp_rings(), since they no longer touch the NQ
itself, only the completion rings hanging off it.
One behavioral difference: bnge_hwrm_ring_free() now resets
grp_info[i].nq_fw_ring_id to INVALID_HW_RING_ID for every NQ, not only
for the NQs that had a valid firmware ring ID. Otherwise there is no
functional change.
Signed-off-by: Bhargava Marreddy <bhargava.marreddy@broadcom.com>
Reviewed-by: Dharmender Garg <dharmender.garg@broadcom.com>
Reviewed-by: Rajashekar Hudumula <rajashekar.hudumula@broadcom.com>
Reviewed-by: Ramakrishna Koduri <ramakrishna.koduri@broadcom.com>
---
.../net/ethernet/broadcom/bnge/bnge_netdev.c | 284 ++++++++++--------
.../net/ethernet/broadcom/bnge/bnge_rmem.c | 10 -
2 files changed, 163 insertions(+), 131 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c
index 25f844e6f6d3..8cd0d8bd68c2 100644
--- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c
+++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c
@@ -503,61 +503,89 @@ static int bnge_alloc_cp_desc_arr(struct bnge_cp_ring_info *cpr, int n)
return -ENOMEM;
}
-static void bnge_free_nq_arrays(struct bnge_net *bn)
+static void bnge_free_nq(struct bnge_net *bn, struct bnge_napi *bnapi)
{
- struct bnge_dev *bd = bn->bd;
- int i;
+ struct bnge_nq_ring_info *nqr = &bnapi->nq_ring;
- for (i = 0; i < bd->nq_nr_rings; i++) {
- struct bnge_napi *bnapi = bn->bnapi[i];
+ bnge_free_ring(bn->bd, &nqr->ring_struct.ring_mem);
+ bnge_free_nq_desc_arr(nqr);
+}
+
+static int bnge_alloc_nq(struct bnge_net *bn, struct bnge_napi *bnapi)
+{
+ struct bnge_nq_ring_info *nqr = &bnapi->nq_ring;
+ struct bnge_ring_mem_info *rmem;
+ struct bnge_ring_struct *ring;
+ int rc;
+
+ ring = &nqr->ring_struct;
+ rmem = &ring->ring_mem;
- bnge_free_nq_desc_arr(&bnapi->nq_ring);
+ rc = bnge_alloc_nq_desc_arr(nqr, bn->cp_nr_pages);
+ if (rc)
+ return rc;
+
+ nqr->bnapi = bnapi;
+ rmem->nr_pages = bn->cp_nr_pages;
+ rmem->page_size = HW_CMPD_RING_SIZE;
+ rmem->pg_arr = (void **)nqr->desc_ring;
+ rmem->dma_arr = nqr->desc_mapping;
+ rmem->vmem_size = 0;
+ rmem->flags = BNGE_RMEM_RING_PTE_FLAG;
+ rc = bnge_alloc_ring(bn->bd, rmem);
+ if (rc) {
+ bnge_free_nq_desc_arr(nqr);
+ return rc;
}
+
+ ring->fw_ring_id = INVALID_HW_RING_ID_32BIT;
+ ring->map_idx = bnge_aux_get_msix(bn->bd) + bnapi->index;
+ return 0;
}
-static int bnge_alloc_nq_arrays(struct bnge_net *bn)
+static void bnge_free_nqs(struct bnge_net *bn)
+{
+ struct bnge_dev *bd = bn->bd;
+ int i;
+
+ for (i = 0; i < bd->nq_nr_rings; i++)
+ bnge_free_nq(bn, bn->bnapi[i]);
+}
+
+static int bnge_alloc_nqs(struct bnge_net *bn)
{
struct bnge_dev *bd = bn->bd;
int i, rc;
for (i = 0; i < bd->nq_nr_rings; i++) {
- struct bnge_napi *bnapi = bn->bnapi[i];
-
- rc = bnge_alloc_nq_desc_arr(&bnapi->nq_ring, bn->cp_nr_pages);
+ rc = bnge_alloc_nq(bn, bn->bnapi[i]);
if (rc)
- goto err_free_nq_arrays;
+ goto err_free_nqs;
}
return 0;
-err_free_nq_arrays:
- bnge_free_nq_arrays(bn);
+err_free_nqs:
+ while (--i >= 0)
+ bnge_free_nq(bn, bn->bnapi[i]);
return rc;
}
-static void bnge_free_nq_tree(struct bnge_net *bn)
+static void bnge_free_cp_rings(struct bnge_net *bn)
{
struct bnge_dev *bd = bn->bd;
int i;
for (i = 0; i < bd->nq_nr_rings; i++) {
- struct bnge_napi *bnapi = bn->bnapi[i];
- struct bnge_nq_ring_info *nqr;
- struct bnge_ring_struct *ring;
+ struct bnge_nq_ring_info *nqr = &bn->bnapi[i]->nq_ring;
int j;
- nqr = &bnapi->nq_ring;
- ring = &nqr->ring_struct;
-
- bnge_free_ring(bd, &ring->ring_mem);
-
if (!nqr->cp_ring_arr)
continue;
for (j = 0; j < nqr->cp_ring_count; j++) {
struct bnge_cp_ring_info *cpr = &nqr->cp_ring_arr[j];
- ring = &cpr->ring_struct;
- bnge_free_ring(bd, &ring->ring_mem);
+ bnge_free_ring(bd, &cpr->ring_struct.ring_mem);
bnge_free_cp_desc_arr(cpr);
}
kfree(nqr->cp_ring_arr);
@@ -594,31 +622,21 @@ static int alloc_one_cp_ring(struct bnge_net *bn,
return rc;
}
-static int bnge_alloc_nq_tree(struct bnge_net *bn)
+static int bnge_alloc_cp_rings(struct bnge_net *bn)
{
struct bnge_dev *bd = bn->bd;
- int i, j, ulp_msix, rc;
+ int i, j, rc;
int tcs = 1;
- ulp_msix = bnge_aux_get_msix(bd);
for (i = 0, j = 0; i < bd->nq_nr_rings; i++) {
bool sh = !!(bd->flags & BNGE_EN_SHARED_CHNL);
struct bnge_napi *bnapi = bn->bnapi[i];
struct bnge_nq_ring_info *nqr;
struct bnge_cp_ring_info *cpr;
- struct bnge_ring_struct *ring;
int cp_count = 0, k;
int rx = 0, tx = 0;
nqr = &bnapi->nq_ring;
- nqr->bnapi = bnapi;
- ring = &nqr->ring_struct;
-
- rc = bnge_alloc_ring(bd, &ring->ring_mem);
- if (rc)
- goto err_free_nq_tree;
-
- ring->map_idx = ulp_msix + i;
if (i < bd->rx_nr_rings) {
cp_count++;
@@ -634,7 +652,7 @@ static int bnge_alloc_nq_tree(struct bnge_net *bn)
nqr->cp_ring_arr = kzalloc_objs(*cpr, cp_count);
if (!nqr->cp_ring_arr) {
rc = -ENOMEM;
- goto err_free_nq_tree;
+ goto err_free_cp_rings;
}
nqr->cp_ring_count = cp_count;
@@ -643,7 +661,7 @@ static int bnge_alloc_nq_tree(struct bnge_net *bn)
cpr = &nqr->cp_ring_arr[k];
rc = alloc_one_cp_ring(bn, cpr);
if (rc)
- goto err_free_nq_tree;
+ goto err_free_cp_rings;
cpr->bnapi = bnapi;
cpr->cp_idx = k;
@@ -663,8 +681,8 @@ static int bnge_alloc_nq_tree(struct bnge_net *bn)
}
return 0;
-err_free_nq_tree:
- bnge_free_nq_tree(bn);
+err_free_cp_rings:
+ bnge_free_cp_rings(bn);
return rc;
}
@@ -1200,8 +1218,8 @@ static void bnge_free_core(struct bnge_net *bn)
bnge_free_vnic_attributes(bn);
bnge_free_tx_rings(bn);
bnge_free_rx_rings(bn);
- bnge_free_nq_tree(bn);
- bnge_free_nq_arrays(bn);
+ bnge_free_cp_rings(bn);
+ bnge_free_nqs(bn);
bnge_free_ring_stats(bn);
bnge_free_ring_grps(bn);
bnge_free_vnics(bn);
@@ -1232,13 +1250,9 @@ static int bnge_alloc_core(struct bnge_net *bn)
bn->bnapi = bnapi;
bnapi += arr_size;
for (i = 0; i < bd->nq_nr_rings; i++, bnapi += size) {
- struct bnge_nq_ring_info *nqr;
-
bn->bnapi[i] = bnapi;
bn->bnapi[i]->index = i;
bn->bnapi[i]->bn = bn;
- nqr = &bn->bnapi[i]->nq_ring;
- nqr->ring_struct.ring_mem.flags = BNGE_RMEM_RING_PTE_FLAG;
}
bn->rx_ring = kzalloc_objs(struct bnge_rx_ring_info, bd->rx_nr_rings);
@@ -1297,7 +1311,7 @@ static int bnge_alloc_core(struct bnge_net *bn)
if (rc)
goto err_free_ring_stats;
- rc = bnge_alloc_nq_arrays(bn);
+ rc = bnge_alloc_nqs(bn);
if (rc)
goto err_free_vnics;
@@ -1305,13 +1319,13 @@ static int bnge_alloc_core(struct bnge_net *bn)
rc = bnge_alloc_rx_rings(bn);
if (rc)
- goto err_free_nq_arrays;
+ goto err_free_nqs;
rc = bnge_alloc_tx_rings(bn);
if (rc)
goto err_free_rx_rings;
- rc = bnge_alloc_nq_tree(bn);
+ rc = bnge_alloc_cp_rings(bn);
if (rc)
goto err_free_tx_rings;
@@ -1320,17 +1334,17 @@ static int bnge_alloc_core(struct bnge_net *bn)
BNGE_VNIC_UCAST_FLAG;
rc = bnge_alloc_vnic_attributes(bn);
if (rc)
- goto err_free_nq_tree;
+ goto err_free_cp_rings;
return 0;
-err_free_nq_tree:
- bnge_free_nq_tree(bn);
+err_free_cp_rings:
+ bnge_free_cp_rings(bn);
err_free_tx_rings:
bnge_free_tx_rings(bn);
err_free_rx_rings:
bnge_free_rx_rings(bn);
-err_free_nq_arrays:
- bnge_free_nq_arrays(bn);
+err_free_nqs:
+ bnge_free_nqs(bn);
err_free_vnics:
bnge_free_vnics(bn);
err_free_ring_stats:
@@ -1389,21 +1403,18 @@ static int bnge_cp_num_to_irq_num(struct bnge_net *bn, int n)
return nqr->ring_struct.map_idx;
}
-static void bnge_init_nq_tree(struct bnge_net *bn)
+static void bnge_init_cp_rings(struct bnge_net *bn)
{
struct bnge_dev *bd = bn->bd;
int i, j;
for (i = 0; i < bd->nq_nr_rings; i++) {
struct bnge_nq_ring_info *nqr = &bn->bnapi[i]->nq_ring;
- struct bnge_ring_struct *ring = &nqr->ring_struct;
- ring->fw_ring_id = INVALID_HW_RING_ID_32BIT;
for (j = 0; j < nqr->cp_ring_count; j++) {
struct bnge_cp_ring_info *cpr = &nqr->cp_ring_arr[j];
- ring = &cpr->ring_struct;
- ring->fw_ring_id = INVALID_HW_RING_ID_32BIT;
+ cpr->ring_struct.fw_ring_id = INVALID_HW_RING_ID_32BIT;
}
}
}
@@ -1914,6 +1925,44 @@ static int bnge_hwrm_rx_ring_alloc(struct bnge_net *bn,
return 0;
}
+static int bnge_hwrm_nq_alloc(struct bnge_net *bn, struct bnge_napi *bnapi)
+{
+ struct bnge_nq_ring_info *nqr = &bnapi->nq_ring;
+ u32 type = HWRM_RING_ALLOC_NQ;
+ struct bnge_ring_struct *ring;
+ unsigned int vector;
+ u32 map_idx;
+ int rc;
+
+ ring = &nqr->ring_struct;
+ map_idx = ring->map_idx;
+
+ vector = bn->bd->irq_tbl[map_idx].vector;
+ disable_irq_nosync(vector);
+ rc = hwrm_ring_alloc_send_msg(bn, ring, type, map_idx);
+ if (rc) {
+ enable_irq(vector);
+ return rc;
+ }
+ bnge_set_db(bn, &nqr->nq_db, type, map_idx, ring->fw_ring_id);
+ bnge_db_nq(bn, &nqr->nq_db, nqr->nq_raw_cons);
+ enable_irq(vector);
+
+ return 0;
+}
+
+static void bnge_hwrm_nq_free(struct bnge_net *bn, struct bnge_napi *bnapi)
+{
+ struct bnge_ring_struct *ring = &bnapi->nq_ring.ring_struct;
+
+ if (ring->fw_ring_id == INVALID_HW_RING_ID_32BIT)
+ return;
+
+ hwrm_ring_free_send_msg(bn, ring, RING_FREE_REQ_RING_TYPE_NQ,
+ INVALID_HW_RING_ID);
+ ring->fw_ring_id = INVALID_HW_RING_ID_32BIT;
+}
+
static int bnge_hwrm_ring_alloc(struct bnge_net *bn)
{
struct bnge_dev *bd = bn->bd;
@@ -1923,22 +1972,11 @@ static int bnge_hwrm_ring_alloc(struct bnge_net *bn)
agg_rings = !!(bnge_is_agg_reqd(bd));
for (i = 0; i < bd->nq_nr_rings; i++) {
struct bnge_napi *bnapi = bn->bnapi[i];
- struct bnge_nq_ring_info *nqr = &bnapi->nq_ring;
- struct bnge_ring_struct *ring = &nqr->ring_struct;
- u32 type = HWRM_RING_ALLOC_NQ;
- u32 map_idx = ring->map_idx;
- unsigned int vector;
+ struct bnge_ring_struct *ring = &bnapi->nq_ring.ring_struct;
- vector = bd->irq_tbl[map_idx].vector;
- disable_irq_nosync(vector);
- rc = hwrm_ring_alloc_send_msg(bn, ring, type, map_idx);
- if (rc) {
- enable_irq(vector);
+ rc = bnge_hwrm_nq_alloc(bn, bnapi);
+ if (rc)
goto err_out;
- }
- bnge_set_db(bn, &nqr->nq_db, type, map_idx, ring->fw_ring_id);
- bnge_db_nq(bn, &nqr->nq_db, nqr->nq_raw_cons);
- enable_irq(vector);
bn->grp_info[i].nq_fw_ring_id = (u16)ring->fw_ring_id;
if (!i) {
@@ -2566,23 +2604,14 @@ static void bnge_hwrm_ring_free(struct bnge_net *bn, bool close_path)
bnge_disable_int_sync(bn);
for (i = 0; i < bd->nq_nr_rings; i++) {
- struct bnge_napi *bnapi = bn->bnapi[i];
- struct bnge_nq_ring_info *nqr;
- struct bnge_ring_struct *ring;
+ struct bnge_nq_ring_info *nqr = &bn->bnapi[i]->nq_ring;
int j;
- nqr = &bnapi->nq_ring;
for (j = 0; j < nqr->cp_ring_count && nqr->cp_ring_arr; j++)
bnge_hwrm_cp_ring_free(bn, &nqr->cp_ring_arr[j]);
- ring = &nqr->ring_struct;
- if (ring->fw_ring_id != INVALID_HW_RING_ID_32BIT) {
- hwrm_ring_free_send_msg(bn, ring,
- RING_FREE_REQ_RING_TYPE_NQ,
- INVALID_HW_RING_ID);
- ring->fw_ring_id = INVALID_HW_RING_ID_32BIT;
- bn->grp_info[i].nq_fw_ring_id = INVALID_HW_RING_ID;
- }
+ bnge_hwrm_nq_free(bn, bn->bnapi[i]);
+ bn->grp_info[i].nq_fw_ring_id = INVALID_HW_RING_ID;
}
}
@@ -2627,27 +2656,60 @@ static void bnge_hwrm_resource_free(struct bnge_net *bn, bool close_path)
bnge_hwrm_stat_ctx_free(bn);
}
-static void bnge_free_irq(struct bnge_net *bn)
+static void bnge_nq_free_irq(struct bnge_net *bn, struct bnge_napi *bnapi)
+{
+ int map_idx = bnapi->nq_ring.ring_struct.map_idx;
+ struct bnge_irq *irq = &bn->bd->irq_tbl[map_idx];
+
+ if (irq->requested) {
+ if (irq->have_cpumask) {
+ irq_set_affinity_hint(irq->vector, NULL);
+ free_cpumask_var(irq->cpu_mask);
+ irq->have_cpumask = 0;
+ }
+ free_irq(irq->vector, bnapi);
+ }
+
+ irq->requested = 0;
+}
+
+static int bnge_nq_request_irq(struct bnge_net *bn, struct bnge_napi *bnapi)
{
+ int map_idx = bnapi->nq_ring.ring_struct.map_idx;
struct bnge_dev *bd = bn->bd;
struct bnge_irq *irq;
- int i;
+ int rc;
- for (i = 0; i < bd->nq_nr_rings; i++) {
- int map_idx = bnge_cp_num_to_irq_num(bn, i);
+ irq = &bd->irq_tbl[map_idx];
- irq = &bd->irq_tbl[map_idx];
- if (irq->requested) {
- if (irq->have_cpumask) {
- irq_set_affinity_hint(irq->vector, NULL);
- free_cpumask_var(irq->cpu_mask);
- irq->have_cpumask = 0;
- }
- free_irq(irq->vector, bn->bnapi[i]);
- }
+ rc = request_irq(irq->vector, irq->handler, 0, irq->name, bnapi);
+ if (rc)
+ return rc;
+
+ netif_napi_set_irq_locked(&bnapi->napi, irq->vector);
+ irq->requested = 1;
+
+ if (zalloc_cpumask_var(&irq->cpu_mask, GFP_KERNEL)) {
+ int numa_node = dev_to_node(&bd->pdev->dev);
- irq->requested = 0;
+ irq->have_cpumask = 1;
+ cpumask_set_cpu(cpumask_local_spread(bnapi->index, numa_node),
+ irq->cpu_mask);
+ if (irq_set_affinity_hint(irq->vector, irq->cpu_mask))
+ netdev_warn(bn->netdev,
+ "Set affinity failed, IRQ = %d\n",
+ irq->vector);
}
+ return 0;
+}
+
+static void bnge_free_irq(struct bnge_net *bn)
+{
+ struct bnge_dev *bd = bn->bd;
+ int i;
+
+ for (i = 0; i < bd->nq_nr_rings; i++)
+ bnge_nq_free_irq(bn, bn->bnapi[i]);
}
static int bnge_request_irq(struct bnge_net *bn)
@@ -2661,29 +2723,9 @@ static int bnge_request_irq(struct bnge_net *bn)
return rc;
}
for (i = 0; i < bd->nq_nr_rings; i++) {
- int map_idx = bnge_cp_num_to_irq_num(bn, i);
- struct bnge_irq *irq = &bd->irq_tbl[map_idx];
-
- rc = request_irq(irq->vector, irq->handler, 0, irq->name,
- bn->bnapi[i]);
+ rc = bnge_nq_request_irq(bn, bn->bnapi[i]);
if (rc)
goto err_free_irq;
-
- netif_napi_set_irq_locked(&bn->bnapi[i]->napi, irq->vector);
- irq->requested = 1;
-
- if (zalloc_cpumask_var(&irq->cpu_mask, GFP_KERNEL)) {
- int numa_node = dev_to_node(&bd->pdev->dev);
-
- irq->have_cpumask = 1;
- cpumask_set_cpu(cpumask_local_spread(i, numa_node),
- irq->cpu_mask);
- if (irq_set_affinity_hint(irq->vector, irq->cpu_mask)) {
- netdev_warn(bn->netdev,
- "Set affinity failed, IRQ = %d\n",
- irq->vector);
- }
- }
}
return 0;
@@ -2830,7 +2872,7 @@ static int bnge_init_nic(struct bnge_net *bn)
{
int rc;
- bnge_init_nq_tree(bn);
+ bnge_init_cp_rings(bn);
bnge_init_rx_rings(bn);
rc = bnge_alloc_rx_ring_pair_bufs(bn);
diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_rmem.c b/drivers/net/ethernet/broadcom/bnge/bnge_rmem.c
index b066ee887a09..bbae84b4157e 100644
--- a/drivers/net/ethernet/broadcom/bnge/bnge_rmem.c
+++ b/drivers/net/ethernet/broadcom/bnge/bnge_rmem.c
@@ -431,20 +431,10 @@ void bnge_init_ring_struct(struct bnge_net *bn)
for (i = 0; i < bd->nq_nr_rings; i++) {
struct bnge_napi *bnapi = bn->bnapi[i];
struct bnge_ring_mem_info *rmem;
- struct bnge_nq_ring_info *nqr;
struct bnge_rx_ring_info *rxr;
struct bnge_tx_ring_info *txr;
struct bnge_ring_struct *ring;
- nqr = &bnapi->nq_ring;
- ring = &nqr->ring_struct;
- rmem = &ring->ring_mem;
- rmem->nr_pages = bn->cp_nr_pages;
- rmem->page_size = HW_CMPD_RING_SIZE;
- rmem->pg_arr = (void **)nqr->desc_ring;
- rmem->dma_arr = nqr->desc_mapping;
- rmem->vmem_size = 0;
-
rxr = bnapi->rx_ring;
if (!rxr)
goto skip_rx;
--
2.47.3
next prev parent reply other threads:[~2026-10-13 20:08 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-13 20:06 [PATCH net-next v3 0/5] bnge: Make NQ0 persistent across open/close Bhargava Marreddy
2026-10-13 20:06 ` Bhargava Marreddy [this message]
2026-10-13 20:06 ` [PATCH net-next v3 2/5] bnge: add bnge_err()/bnge_warn()/bnge_dbg() logging helpers Bhargava Marreddy
2026-10-13 20:06 ` [PATCH net-next v3 3/5] bnge: add bnge_for_each_open_nq() iterator Bhargava Marreddy
2026-10-13 20:06 ` [PATCH net-next v3 4/5] bnge: make irq_tbl layout depend on BNGE_FIRST_OPEN_NQ Bhargava Marreddy
2026-10-13 20:06 ` [PATCH net-next v3 5/5] bnge: make NQ0 persistent across open/stop cycles Bhargava Marreddy
2026-10-18 15:32 ` Bhargava Chenna Marreddy
2026-10-18 17:20 ` Bhargava Chenna Marreddy
2026-10-20 20:34 ` Jakub Kicinski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261013200645.1346299-2-bhargava.marreddy@broadcom.com \
--to=bhargava.marreddy@broadcom.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=dharmender.garg@broadcom.com \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=michael.chan@broadcom.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=pavan.chebbi@broadcom.com \
--cc=rajashekar.hudumula@broadcom.com \
--cc=ramakrishna.koduri@broadcom.com \
--cc=vikas.gupta@broadcom.com \
--cc=vsrama-krishna.nemani@broadcom.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox