From: "Björn Töpel" <bjorn@kernel.org>
To: Alexander Duyck <alexanderduyck@fb.com>,
Jakub Kicinski <kuba@kernel.org>,
kernel-team@meta.com (reviewer:META ETHERNET DRIVERS),
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
Russell King <linux@armlinux.org.uk>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: "Björn Töpel" <bjorn@kernel.org>,
"Mike Marciniszyn (Meta)" <mike.marciniszyn@gmail.com>,
"Mina Almasry" <almasrymina@google.com>,
Sashiko <netdev-bot+sashiko@kernel.org>
Subject: [PATCH net v3 2/2] eth: fbnic: Publish real queue counts
Date: Fri, 2 Oct 2026 14:56:15 +0200 [thread overview]
Message-ID: <20261002125617.409447-3-bjorn@kernel.org> (raw)
In-Reply-To: <20261002125617.409447-1-bjorn@kernel.org>
fbnic exposes more queues than it configures until open, including
after ethtool -L while down. A memory provider can bind to an
unconfigured queue.
Publish the selected counts at probe and on offline channel changes.
Sashiko flagged the mismatch by code inspection; it was not reproduced
on physical hardware. Tested with fbnic QEMU on Debian sid: offline
ethtool -L changed RX/TX queues from 2 to 1 to 3. Reopening passed
DHCP and ping. Network selftests were not run.
Fixes: da43127a8edc ("eth: fbnic: support queue ops / zero-copy Rx")
Reported-by: Sashiko <netdev-bot+sashiko@kernel.org>
Link: https://lore.kernel.org/netdev/178915061000.219967.7726187707862333281@kernel.org/
Signed-off-by: Björn Töpel <bjorn@kernel.org>
---
.../net/ethernet/meta/fbnic/fbnic_ethtool.c | 7 +++++
.../net/ethernet/meta/fbnic/fbnic_netdev.c | 29 +++++++++++++------
2 files changed, 27 insertions(+), 9 deletions(-)
diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c b/drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c
index 76e9a545bb16..b96354e56517 100644
--- a/drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c
+++ b/drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c
@@ -1631,6 +1631,13 @@ static int fbnic_set_channels(struct net_device *netdev,
return -EINVAL;
if (!netif_running(netdev)) {
+ unsigned int rxq = ch->rx_count + ch->combined_count;
+ unsigned int txq = ch->tx_count + ch->combined_count;
+
+ err = netif_set_real_num_queues(netdev, txq, rxq);
+ if (err)
+ return err;
+
fbnic_set_queues(fbn, ch, max_napis);
fbnic_reset_indir_tbl(fbn);
return 0;
diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_netdev.c b/drivers/net/ethernet/meta/fbnic/fbnic_netdev.c
index d1ed29312d54..1e16e10f3505 100644
--- a/drivers/net/ethernet/meta/fbnic/fbnic_netdev.c
+++ b/drivers/net/ethernet/meta/fbnic/fbnic_netdev.c
@@ -709,11 +709,12 @@ static const struct netdev_stat_ops fbnic_stat_ops = {
.get_base_stats = fbnic_get_base_stats,
};
-static void fbnic_reset_queues(struct fbnic_net *fbn,
- unsigned int tx, unsigned int rx)
+static int fbnic_reset_queues(struct fbnic_net *fbn,
+ unsigned int tx, unsigned int rx)
{
struct fbnic_dev *fbd = fbn->fbd;
unsigned int max_napis;
+ int err;
max_napis = fbd->num_irqs - FBNIC_NON_NAPI_VECTORS;
@@ -724,6 +725,14 @@ static void fbnic_reset_queues(struct fbnic_net *fbn,
fbn->num_rx_queues = rx;
fbn->num_napi = max(tx, rx);
+
+ err = netif_set_real_num_queues(fbn->netdev, tx, rx);
+ if (err)
+ return err;
+
+ fbnic_reset_indir_tbl(fbn);
+
+ return 0;
}
/**
@@ -792,9 +801,9 @@ struct net_device *fbnic_netdev_alloc(struct fbnic_dev *fbd)
if (default_queues > fbd->max_num_queues)
default_queues = fbd->max_num_queues;
- fbnic_reset_queues(fbn, default_queues, default_queues);
+ if (fbnic_reset_queues(fbn, default_queues, default_queues))
+ goto err_free_netdev;
- fbnic_reset_indir_tbl(fbn);
fbnic_rss_key_fill(fbn->rss_key);
fbnic_rss_init_en_mask(fbn);
@@ -839,13 +848,15 @@ struct net_device *fbnic_netdev_alloc(struct fbnic_dev *fbd)
netif_tx_stop_all_queues(netdev);
- if (fbnic_phylink_create(netdev)) {
- free_netdev(netdev);
- fbd->netdev = NULL;
- return NULL;
- }
+ if (fbnic_phylink_create(netdev))
+ goto err_free_netdev;
return netdev;
+
+err_free_netdev:
+ free_netdev(netdev);
+ fbd->netdev = NULL;
+ return NULL;
}
static int fbnic_dsn_to_mac_addr(u64 dsn, char *addr)
--
2.55.0
prev parent reply other threads:[~2026-10-02 12:56 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-02 12:56 [PATCH net v3 0/2] eth: fbnic: Queue and channel count fixes Björn Töpel
2026-10-02 12:56 ` [PATCH net v3 1/2] eth: fbnic: Preserve channels across resume Björn Töpel
2026-10-06 13:18 ` netdev-bot+sashiko
2026-10-08 14:19 ` Björn Töpel
2026-10-02 12:56 ` Björn Töpel [this message]
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=20261002125617.409447-3-bjorn@kernel.org \
--to=bjorn@kernel.org \
--cc=alexanderduyck@fb.com \
--cc=almasrymina@google.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@kernel.org \
--cc=kernel-team@meta.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=mike.marciniszyn@gmail.com \
--cc=netdev-bot+sashiko@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.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 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.