From: mingming cao <mmc@linux.ibm.com>
To: Jakub Kicinski <kuba@kernel.org>
Cc: netdev@vger.kernel.org, davem@davemloft.net, edumazet@google.com,
pabeni@redhat.com, andrew+netdev@lunn.ch, nnac123@linux.ibm.com,
maddy@linux.ibm.com, mpe@ellerman.id.au,
linuxppc-dev@lists.ozlabs.org, haren@linux.ibm.com,
ricklind@linux.ibm.com, davemarq@linux.ibm.com,
bjking1@linux.ibm.com, shaik.abdulla1@ibm.com
Subject: Re: [PATCH net-next v5 12/15] ibmveth: Report MQ-aware RX counts in ethtool get_channels
Date: Mon, 31 Aug 2026 12:19:34 -0700 [thread overview]
Message-ID: <99e8f07e-facf-40dd-a235-cec62270f981@linux.ibm.com> (raw)
In-Reply-To: <20260818014735.3854400-1-kuba@kernel.org>
On 8/17/26 6:47 PM, Jakub Kicinski wrote:
> This is an AI-generated review of your patch. The human sending this
> email has considered the AI review valid, or at least plausible.
> ---
> ibmveth: Report MQ-aware RX counts in ethtool get_channels
>
> The patch changes ibmveth_get_channels() to report max_rx as
> IBMVETH_MAX_RX_QUEUES when the adapter has multi-queue firmware support
> (else 1), and to report rx_count from the driver's published
> num_rx_queues instead of netdev->real_num_rx_queues.
>
>> diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
>> index 3202b657c9b8f..5d4ca4b3d3d07 100644
>> --- a/drivers/net/ethernet/ibm/ibmveth.c
>> +++ b/drivers/net/ethernet/ibm/ibmveth.c
>> @@ -2522,11 +2522,16 @@ static void ibmveth_get_ethtool_stats(struct net_device *dev,
>> static void ibmveth_get_channels(struct net_device *netdev,
>> struct ethtool_channels *channels)
>> {
>> + struct ibmveth_adapter *adapter = netdev_priv(netdev);
>> +
>> channels->max_tx = ibmveth_real_max_tx_queues();
>> channels->tx_count = netdev->real_num_tx_queues;
>>
>> - channels->max_rx = netdev->real_num_rx_queues;
>> - channels->rx_count = netdev->real_num_rx_queues;
>> + if (adapter->multi_queue)
>> + channels->max_rx = IBMVETH_MAX_RX_QUEUES;
>> + else
>> + channels->max_rx = 1;
>> + channels->rx_count = ibmveth_get_num_rx_queues(adapter);
>> }
> [Severity: Medium]
> At this point in the series, does raising max_rx here make RX channel
> requests silently succeed without changing anything?
>
> ibmveth_set_channels() only derives its work from tx_count:
>
> unsigned int old = netdev->real_num_tx_queues,
> goal = channels->tx_count;
> ...
> if (!(netdev->flags & IFF_UP))
> return netif_set_real_num_tx_queues(netdev, goal);
>
> channels->rx_count is never read there. The core validation in
> ethtool_set_channels() only bounds the request by the driver-reported
> maximum:
>
> if (channels.rx_count > curr.max_rx ||
> channels.tx_count > curr.max_tx ||
>
> so with max_rx now 16, "ethtool -L ethX rx N" for any N in 1..16 that
> differs from the current RX count passes validation, enters
> ibmveth_set_channels() with tx_count unchanged, runs no LTB loop
> iterations, and returns 0. The netlink path in ethnl_set_channels()
> applies the same max_rx-only ceiling and maps the 0 return to success.
>
> Before this change max_rx equalled real_num_rx_queues, so an increase was
> rejected with -EINVAL by the core; afterwards it is accepted and ignored,
> and "ethtool -l" still shows the old rx_count.
>
> For the record, this appears to be resolved later in the same series: the
> final patch "ibmveth: Wire ethtool set_channels to MQ RX queue resize"
> makes ibmveth_set_channels() read channels->rx_count and apply it via
> ibmveth_resize_rx_channels() with range validation of
> 1..IBMVETH_MAX_RX_QUEUES, so the get/set pair agrees at the end of the
> series. Would it be worth ordering that patch before this one, or
> mentioning the intermediate state in the changelog?
Yes. At this commit set_channels still only looks at tx_count, so
ethtool -L rx N can pass core validation and return success without
changing RX. Raising max_rx here just widens that window from the
live count to 16. v6 names the intermediate state in the commit
message, which covers your second option.
The reorder is not done: channel reporting stays reviewable on its
own, separate from stats and from the resize. Patch 14 reads
rx_count and calls resize; patch 15 finishes the down-path and caps
max_rx once mq_fallback latches.
> [Severity: Low]
> A second, smaller point about the same lines: max_rx is derived only from
> adapter->multi_queue and does not consult adapter->mq_fallback. After
> firmware refuses multi-queue, ibmveth_apply_mq_fallback() defers the
> downgrade to the next open:
>
> if (!adapter->mq_fallback)
> return;
>
> adapter->mq_fallback = false;
> ...
> adapter->multi_queue = 0;
> ibmveth_publish_num_rx_queues(adapter, 1);
>
> so between the firmware rejection and the next open, "ethtool -l" keeps
> reporting max_rx = 16 and rx_count = 8 while the adapter is going to run
> single-queue. Should get_channels() also take mq_fallback into account?
>
> Also, at this patch the reported maximum of IBMVETH_MAX_RX_QUEUES (16) is
> above anything the driver publishes, since ibmveth_probe() caps the RX
> queue count:
>
> adapter->multi_queue = 1;
> ibmveth_publish_num_rx_queues(adapter,
> min(num_online_cpus(),
> IBMVETH_DEFAULT_QUEUES));
>
> The end-of-series patch "ibmveth: Wire ethtool set_channels to MQ RX
> queue resize" does make 1..IBMVETH_MAX_RX_QUEUES genuinely settable via
> ibmveth_resize_rx_channels(), so this is only about the intermediate
> state and the stale reporting while mq_fallback is latched.
Yes. While the latch is set, -l can still show MQ max_rx / rx_count
until the next open applies fallback — apply_mq_fallback() runs at
open entry, so get_channels() here still reads multi_queue and the
published count only, not the latch directly. Not taken here:
patch 15 consults the latch by capping max_rx at the live count,
not by understating rx_count. Clamping rx_count would turn the next
TX-only -L into a silent RX shrink.
Thanks,
Mingming
next prev parent reply other threads:[~2026-08-31 19:19 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-14 7:36 [PATCH net-next v5 00/15] ibmveth: Add multi-queue RX support Mingming Cao
2026-08-14 7:36 ` [PATCH net-next v5 01/15] ibmveth: Add MQ RX hypercall wrappers and call definitions Mingming Cao
2026-08-18 1:47 ` Jakub Kicinski
2026-08-31 17:58 ` mingming cao
2026-08-14 7:36 ` [PATCH net-next v5 02/15] ibmveth: Prepare MQ RX adapter data structures Mingming Cao
2026-08-18 1:47 ` Jakub Kicinski
2026-08-31 18:03 ` mingming cao
2026-08-14 7:36 ` [PATCH net-next v5 03/15] ibmveth: Refactor RX resource allocation for MQ RX bring-up Mingming Cao
2026-08-18 1:47 ` Jakub Kicinski
2026-08-31 18:12 ` mingming cao
2026-08-14 7:36 ` [PATCH net-next v5 04/15] ibmveth: Refactor buffer pool management for per-queue MQ RX Mingming Cao
2026-08-18 1:47 ` Jakub Kicinski
2026-08-31 18:20 ` mingming cao
2026-08-14 7:36 ` [PATCH net-next v5 05/15] ibmveth: Refactor RX interrupt control for MQ RX queues Mingming Cao
2026-08-18 1:47 ` Jakub Kicinski
2026-08-31 18:24 ` mingming cao
2026-08-14 7:36 ` [PATCH net-next v5 06/15] ibmveth: Refactor TX resource allocation in open/close paths Mingming Cao
2026-08-18 1:47 ` Jakub Kicinski
2026-08-31 18:46 ` mingming cao
2026-08-14 7:36 ` [PATCH net-next v5 07/15] ibmveth: Add RX queue register helpers for MQ Mingming Cao
2026-08-18 1:47 ` Jakub Kicinski
2026-08-31 18:54 ` mingming cao
2026-08-14 7:36 ` [PATCH net-next v5 08/15] ibmveth: Add queue-aware RX buffer submit helper " Mingming Cao
2026-08-18 1:47 ` Jakub Kicinski
2026-08-31 19:00 ` mingming cao
2026-08-14 7:36 ` [PATCH net-next v5 09/15] ibmveth: Harden RX poll path with helpers Mingming Cao
2026-08-18 1:47 ` Jakub Kicinski
2026-08-31 19:06 ` mingming cao
2026-08-14 7:36 ` [PATCH net-next v5 10/15] ibmveth: Enable multi-queue RX receive path Mingming Cao
2026-08-18 1:47 ` Jakub Kicinski
2026-08-31 19:10 ` mingming cao
2026-08-14 7:36 ` [PATCH net-next v5 11/15] ibmveth: Add per-queue RX and TX statistics collection Mingming Cao
2026-08-18 1:47 ` Jakub Kicinski
2026-08-31 19:12 ` mingming cao
2026-08-14 7:36 ` [PATCH net-next v5 12/15] ibmveth: Report MQ-aware RX counts in ethtool get_channels Mingming Cao
2026-08-18 1:47 ` Jakub Kicinski
2026-08-31 19:19 ` mingming cao [this message]
2026-08-14 7:36 ` [PATCH net-next v5 13/15] ibmveth: Expose per-queue buffer pool details via debugfs Mingming Cao
2026-08-18 1:47 ` Jakub Kicinski
2026-08-31 19:20 ` mingming cao
2026-08-14 7:36 ` [PATCH net-next v5 14/15] ibmveth: Implement incremental MQ RX queue resize Mingming Cao
2026-08-18 1:47 ` Jakub Kicinski
2026-08-31 19:22 ` mingming cao
2026-08-14 7:36 ` [PATCH net-next v5 15/15] ibmveth: Wire ethtool set_channels to " Mingming Cao
2026-08-18 1:47 ` Jakub Kicinski
2026-08-31 19:24 ` mingming cao
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=99e8f07e-facf-40dd-a235-cec62270f981@linux.ibm.com \
--to=mmc@linux.ibm.com \
--cc=andrew+netdev@lunn.ch \
--cc=bjking1@linux.ibm.com \
--cc=davem@davemloft.net \
--cc=davemarq@linux.ibm.com \
--cc=edumazet@google.com \
--cc=haren@linux.ibm.com \
--cc=kuba@kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=maddy@linux.ibm.com \
--cc=mpe@ellerman.id.au \
--cc=netdev@vger.kernel.org \
--cc=nnac123@linux.ibm.com \
--cc=pabeni@redhat.com \
--cc=ricklind@linux.ibm.com \
--cc=shaik.abdulla1@ibm.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