From: Jakub Kicinski <kuba@kernel.org>
To: illusion.wang@nebula-matrix.com
Cc: Jakub Kicinski <kuba@kernel.org>,
sam.chen@nebula-matrix.com, lukas.bulwahn@redhat.com,
dimon.zhao@nebula-matrix.com, netdev@vger.kernel.org,
vadim.fedorenko@linux.dev,
linux-kernel@vger.kernel.org (open list),
corbet@lwn.net, lorenzo@kernel.org, alvin.wang@nebula-matrix.com,
andrew+netdev@lunn.ch, linux-doc@vger.kernel.org,
pabeni@redhat.com, edumazet@google.com, horms@kernel.org
Subject: Re: [v4,net-next,11/11] net/nebula-matrix: add common dev start/stop operation
Date: Fri, 6 Feb 2026 18:25:03 -0800 [thread overview]
Message-ID: <20260207022504.4018024-1-kuba@kernel.org> (raw)
In-Reply-To: <20260206021608.85381-12-illusion.wang@nebula-matrix.com>
This is an AI-generated review of your patch. The human sending this
email says "This is an automated AI code reviewer, please treat what
it says with a grain of salt."
For local reproduction steps see https://netdev-ai.bots.linux.dev/ai-local.html
---
net/nebula-matrix: add common dev start/stop operation
This commit adds MSI-X interrupt initialization for the common device
layer, including configuring MSI-X vector mappings, allocating interrupt
resources, and registering mailbox interrupt handlers.
> diff --git a/drivers/net/ethernet/nebula-matrix/nbl/nbl_core/nbl_dev.c b/drivers/net/ethernet/nebula-matrix/nbl/nbl_core/nbl_dev.c
> index 9927dd3a1791..59d23e93e923 100644
> --- a/drivers/net/ethernet/nebula-matrix/nbl/nbl_core/nbl_dev.c
> +++ b/drivers/net/ethernet/nebula-matrix/nbl/nbl_core/nbl_dev.c
[ ... ]
> @@ -14,6 +25,179 @@ static void nbl_dev_register_common_irq(struct nbl_dev_mgt *dev_mgt)
> msix_info->serv_info[NBL_MSIX_MAILBOX_TYPE].num = 1;
> }
>
> +static int nbl_dev_request_mailbox_irq(struct nbl_dev_mgt *dev_mgt)
[ ... ]
> +static int nbl_dev_configure_msix_map(struct nbl_dev_mgt *dev_mgt)
> +{
> + struct nbl_dispatch_ops *disp_ops = dev_mgt->disp_ops_tbl->ops;
> + struct nbl_dev_common *dev_common = dev_mgt->common_dev;
> + struct nbl_msix_info *msix_info = &dev_common->msix_info;
> + bool mask_en = msix_info->serv_info[NBL_MSIX_NET_TYPE].hw_self_mask_en;
> + u16 msix_net_num = msix_info->serv_info[NBL_MSIX_NET_TYPE].num;
> + u16 msix_not_net_num = 0;
> + int err, i;
> +
> + for (i = NBL_MSIX_NET_TYPE; i < NBL_MSIX_TYPE_MAX; i++)
> + msix_info->serv_info[i].base_vector_id =
> + msix_info->serv_info[i - 1].base_vector_id +
> + msix_info->serv_info[i - 1].num;
^^^^^^
Does this loop cause an array underflow? NBL_MSIX_NET_TYPE equals 0 (from
the enum in nbl_dev.h), so on the first iteration i=0 and the code accesses
serv_info[-1].
The serv_info array is declared with NBL_MSIX_TYPE_MAX (2) elements in
struct nbl_msix_info, giving valid indices [0,1]. Accessing index -1 reads
uninitialized memory before the array start.
Call chain: nbl_core_start()->nbl_dev_start()->nbl_dev_start_common_dev()
->nbl_dev_configure_msix_map() guarantees this occurs during device start.
Should the loop start at i=1 (NBL_MSIX_MAILBOX_TYPE) instead, or should
serv_info[0].base_vector_id be initialized before the loop?
> +
> + for (i = NBL_MSIX_MAILBOX_TYPE; i < NBL_MSIX_TYPE_MAX; i++) {
[ ... ]
> +static int nbl_dev_alloc_msix_intr(struct nbl_dev_mgt *dev_mgt)
> +{
> + struct nbl_dev_common *dev_common = dev_mgt->common_dev;
> + struct nbl_msix_info *msix_info = &dev_common->msix_info;
> + struct nbl_common_info *common = dev_mgt->common;
> + int needed = 0;
> + int err;
> + int i;
> +
> + for (i = 0; i < NBL_MSIX_TYPE_MAX; i++)
> + needed += msix_info->serv_info[i].num;
> +
> + err = pci_alloc_irq_vectors(common->pdev, needed, needed,
> + PCI_IRQ_MSIX | PCI_IRQ_AFFINITY);
> + if (err < 0) {
> + pr_err("pci_enable_msix_range failed, err = %d.\n", err);
^^^^^^^^
This isn't a bug, but the error message says "pci_enable_msix_range failed"
while the actual function being called is pci_alloc_irq_vectors.
> + goto enable_msix_failed;
> + }
[ ... ]
> diff --git a/drivers/net/ethernet/nebula-matrix/nbl/nbl_main.c b/drivers/net/ethernet/nebula-matrix/nbl/nbl_main.c
> index a16a685e4f29..55ed560624d3 100644
> --- a/drivers/net/ethernet/nebula-matrix/nbl/nbl_main.c
> +++ b/drivers/net/ethernet/nebula-matrix/nbl/nbl_main.c
> @@ -283,7 +283,38 @@ static struct pci_driver nbl_driver = {
> .remove = nbl_remove,
> };
>
> -module_pci_driver(nbl_driver);
> +static int __init nbl_module_init(void)
> +{
> + int status;
> +
> + status = nbl_common_create_wq();
> + if (status) {
> + pr_err("Failed to create wq, err = %d\n", status);
> + goto wq_create_failed;
> + }
> + status = pci_register_driver(&nbl_driver);
> + if (status) {
> + pr_err("Failed to register PCI driver, err = %d\n", status);
> + goto pci_register_driver_failed;
> + }
> + pr_info("nbl module loaded\n");
> + return 0;
Previous review feedback from Andrew Lunn on v3 noted that the config is
named 'NBL_CORE' and the module is named 'nbl_core'. He pointed out that
'_CORE' naming is unusual for a driver - CORE is typically a library shared
by multiple drivers. The Kconfig still shows:
config NBL_CORE
tristate "Nebula-matrix Ethernet Controller m18100 Family support"
Should this be renamed to follow the naming convention for standalone
drivers?
Link: https://lore.kernel.org/netdev/88c7e349-f941-4216-89ca-70a49e82b378@lunn.ch/
Andrew Lunn also noted in v3 that variable declarations should follow
reverse Christmas tree ordering (longest line first). Looking at functions
in this commit like nbl_dev_request_mailbox_irq():
struct nbl_dev_common *dev_common = dev_mgt->common_dev;
struct nbl_msix_info *msix_info = &dev_common->msix_info;
struct nbl_common_info *common = dev_mgt->common;
the declarations are not in reverse Christmas tree order.
Link: https://lore.kernel.org/netdev/c6d37ecd-7dc6-4f83-b76c-2735a5f116fd@lunn.ch/
next prev parent reply other threads:[~2026-02-07 2:25 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-06 2:15 [PATCH v4 net-next 00/11] nbl driver for Nebulamatrix NICs illusion.wang
2026-02-06 2:15 ` [PATCH v4 net-next 01/11] net/nebula-matrix: add minimum nbl build framework illusion.wang
2026-02-06 3:01 ` Andrew Lunn
2026-02-07 2:24 ` [v4,net-next,01/11] " Jakub Kicinski
2026-02-06 2:15 ` [PATCH v4 net-next 02/11] net/nebula-matrix: add our driver architecture illusion.wang
2026-02-06 3:39 ` Andrew Lunn
2026-02-06 9:26 ` 回复:[PATCH " Illusion Wang
2026-02-07 17:19 ` Andrew Lunn
2026-02-07 2:24 ` [v4,net-next,02/11] " Jakub Kicinski
2026-02-06 2:15 ` [PATCH v4 net-next 03/11] net/nebula-matrix: add chip related definitions illusion.wang
2026-02-07 2:24 ` [v4,net-next,03/11] " Jakub Kicinski
2026-02-06 2:15 ` [PATCH v4 net-next 04/11] net/nebula-matrix: channel msg value and msg struct illusion.wang
2026-02-06 2:15 ` [PATCH v4 net-next 05/11] net/nebula-matrix: add channel layer illusion.wang
2026-02-06 3:47 ` Andrew Lunn
2026-02-07 2:24 ` [v4,net-next,05/11] " Jakub Kicinski
2026-02-06 2:15 ` [PATCH v4 net-next 06/11] net/nebula-matrix: add common resource implementation illusion.wang
2026-02-07 2:24 ` [v4,net-next,06/11] " Jakub Kicinski
2026-02-06 2:15 ` [PATCH v4 net-next 07/11] net/nebula-matrix: add intr " illusion.wang
2026-02-07 2:24 ` [v4,net-next,07/11] " Jakub Kicinski
2026-02-06 2:16 ` [PATCH v4 net-next 08/11] net/nebula-matrix: add vsi " illusion.wang
2026-02-07 2:24 ` [v4,net-next,08/11] " Jakub Kicinski
2026-02-06 2:16 ` [PATCH v4 net-next 09/11] net/nebula-matrix: add Dispatch layer implementation illusion.wang
2026-02-06 2:16 ` [PATCH v4 net-next 10/11] net/nebula-matrix: add common/ctrl dev init/reinit operation illusion.wang
2026-02-07 2:25 ` [v4,net-next,10/11] " Jakub Kicinski
2026-02-06 2:16 ` [PATCH v4 net-next 11/11] net/nebula-matrix: add common dev start/stop operation illusion.wang
2026-02-07 2:25 ` Jakub Kicinski [this message]
2026-02-10 2:07 ` 回复:[v4,net-next,11/11] " Illusion Wang
2026-02-10 13:42 ` Andrew Lunn
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=20260207022504.4018024-1-kuba@kernel.org \
--to=kuba@kernel.org \
--cc=alvin.wang@nebula-matrix.com \
--cc=andrew+netdev@lunn.ch \
--cc=corbet@lwn.net \
--cc=dimon.zhao@nebula-matrix.com \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=illusion.wang@nebula-matrix.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lorenzo@kernel.org \
--cc=lukas.bulwahn@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sam.chen@nebula-matrix.com \
--cc=vadim.fedorenko@linux.dev \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.