From: Jakub Kicinski <kuba@kernel.org>
To: Bhargava Marreddy <bhargava.marreddy@broadcom.com>
Cc: davem@davemloft.net, edumazet@google.com, pabeni@redhat.com,
andrew+netdev@lunn.ch, horms@kernel.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, michael.chan@broadcom.com,
pavan.chebbi@broadcom.com, vsrama-krishna.nemani@broadcom.com,
Vikas Gupta <vikas.gupta@broadcom.com>,
Rajashekar Hudumula <rajashekar.hudumula@broadcom.com>
Subject: Re: [v5, net-next 2/9] bng_en: Add initial support for CP and NQ rings
Date: Mon, 1 Sep 2025 14:27:47 -0700 [thread overview]
Message-ID: <20250901142747.6e6f8bfd@kernel.org> (raw)
In-Reply-To: <20250828184547.242496-3-bhargava.marreddy@broadcom.com>
On Thu, 28 Aug 2025 18:45:40 +0000 Bhargava Marreddy wrote:
> Allocate CP and NQ related data structures and add support to
> associate NQ and CQ rings. Also, add the association of NQ, NAPI,
> and interrupts.
> +static int bnge_alloc_nq_desc_arr(struct bnge_nq_ring_info *nqr, int n)
> +{
> + nqr->desc_ring = kcalloc(n, sizeof(*nqr->desc_ring), GFP_KERNEL);
> + if (!nqr->desc_ring)
> + return -ENOMEM;
> +
> + nqr->desc_mapping = kcalloc(n, sizeof(*nqr->desc_mapping), GFP_KERNEL);
> + if (!nqr->desc_mapping)
> + return -ENOMEM;
Please add appropriate local unwind in all functions. If the function
fails it should undo its partial updates. The assumptions about unwind
somewhere deep in the call stack made it hard to work with bnxt.
> +static int alloc_one_cp_ring(struct bnge_net *bn,
> + struct bnge_cp_ring_info *cpr)
> +{
> + struct bnge_ring_mem_info *rmem;
> + struct bnge_ring_struct *ring;
> + struct bnge_dev *bd = bn->bd;
> + int rc;
> +
> + rc = bnge_alloc_cp_desc_arr(cpr, bn->cp_nr_pages);
> + if (rc) {
> + bnge_free_cp_desc_arr(cpr);
> + return -ENOMEM;
> + }
> + ring = &cpr->ring_struct;
> + rmem = &ring->ring_mem;
> + rmem->nr_pages = bn->cp_nr_pages;
> + rmem->page_size = HW_CMPD_RING_SIZE;
> + rmem->pg_arr = (void **)cpr->desc_ring;
> + rmem->dma_arr = cpr->desc_mapping;
> + rmem->flags = BNGE_RMEM_RING_PTE_FLAG;
> + rc = bnge_alloc_ring(bd, rmem);
> + if (rc) {
> + bnge_free_ring(bd, rmem);
> + bnge_free_cp_desc_arr(cpr);
use a goto ladder for centralized error handling, per kernel coding
style
> + }
> +
> + return rc;
> +}
> +static int bnge_set_real_num_queues(struct bnge_net *bn)
> +{
> + struct net_device *dev = bn->netdev;
> + struct bnge_dev *bd = bn->bd;
> + int rc;
> +
> + rc = netif_set_real_num_tx_queues(dev, bd->tx_nr_rings);
> + if (rc)
> + return rc;
> +
> + return netif_set_real_num_rx_queues(dev, bd->rx_nr_rings);
> +}
netif_set_real_num_queues() exists
> +static int bnge_setup_interrupts(struct bnge_net *bn)
> +{
> + struct bnge_dev *bd = bn->bd;
> +
> + if (!bd->irq_tbl) {
> + if (bnge_alloc_irqs(bd))
> + return -ENODEV;
> + }
> +
> + bnge_setup_msix(bn);
> +
> + return bnge_set_real_num_queues(bn);
> +}
> +
> +static int bnge_request_irq(struct bnge_net *bn)
> +{
> + struct bnge_dev *bd = bn->bd;
> + int i, rc;
> +
> + rc = bnge_setup_interrupts(bn);
> + if (rc) {
> + netdev_err(bn->netdev, "bnge_setup_interrupts err: %d\n", rc);
> + 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]);
> + if (rc)
> + break;
> +
> + netif_napi_set_irq_locked(&bn->bnapi[i]->napi, irq->vector);
Are you netdev-locked here? I don't see the driver either requesting ops
lock or implementing any API which enables netdev-lock.
--
pw-bot: cr
next prev parent reply other threads:[~2025-09-01 21:27 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-28 18:45 [v5, net-next 0/9] Add more functionality to BNGE Bhargava Marreddy
2025-08-28 18:45 ` [v5, net-next 1/9] bng_en: Add initial support for RX and TX rings Bhargava Marreddy
2025-09-01 21:19 ` Jakub Kicinski
2025-08-28 18:45 ` [v5, net-next 2/9] bng_en: Add initial support for CP and NQ rings Bhargava Marreddy
2025-09-01 21:27 ` Jakub Kicinski [this message]
2025-08-28 18:45 ` [v5, net-next 3/9] bng_en: Introduce VNIC Bhargava Marreddy
2025-08-28 18:45 ` [v5, net-next 4/9] bng_en: Initialise core resources Bhargava Marreddy
2025-08-28 18:45 ` [v5, net-next 5/9] bng_en: Allocate packet buffers Bhargava Marreddy
2025-08-28 18:45 ` [v5, net-next 6/9] bng_en: Allocate stat contexts Bhargava Marreddy
2025-08-28 18:45 ` [v5, net-next 7/9] bng_en: Register rings with the firmware Bhargava Marreddy
2025-08-28 18:45 ` [v5, net-next 8/9] bng_en: Register default VNIC Bhargava Marreddy
2025-08-28 18:45 ` [v5, net-next 9/9] bng_en: Configure " Bhargava Marreddy
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=20250901142747.6e6f8bfd@kernel.org \
--to=kuba@kernel.org \
--cc=andrew+netdev@lunn.ch \
--cc=bhargava.marreddy@broadcom.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@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=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;
as well as URLs for NNTP newsgroup(s).