Re: [PATCH net-next] tg3: extract GRXRINGS from .get_rxnfc

From: Michael Chan

Date: Wed Nov 05 2025 - 14:05:51 EST


On Wed, Nov 5, 2025 at 10:02 AM Breno Leitao <leitao@xxxxxxxxxx> wrote:
>
> Commit 84eaf4359c36 ("net: ethtool: add get_rx_ring_count callback to
> optimize RX ring queries") added specific support for GRXRINGS callback,
> simplifying .get_rxnfc.
>
> Remove the handling of GRXRINGS in .get_rxnfc() by moving it to the new
> .get_rx_ring_count().
>
> Given that tg3_get_rxnfc() only handles ETHTOOL_GRXRINGS, then this
> function becomes useless now, and it is removed.
>
> This also fixes the behavior for devices without MSIX support.
> Previously, the function would return -EOPNOTSUPP, but now it correctly
> returns 1.
>
> The functionality remains the same: return the current queue count
> if the device is running, otherwise return the minimum of online
> CPUs and TG3_RSS_MAX_NUM_QS.
>
> Signed-off-by: Breno Leitao <leitao@xxxxxxxxxx>
> ---
> PS: This was compiled-tested only and NOT tested on a real hardware.
> ---
> drivers/net/ethernet/broadcom/tg3.c | 24 ++++++------------------
> 1 file changed, 6 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
> index d78cafdb20949..fa58c3ffceb06 100644
> --- a/drivers/net/ethernet/broadcom/tg3.c
> +++ b/drivers/net/ethernet/broadcom/tg3.c
> @@ -12719,29 +12719,17 @@ static int tg3_get_sset_count(struct net_device *dev, int sset)
> }
> }
>
> -static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
> - u32 *rules __always_unused)
> +static u32 tg3_get_rx_ring_count(struct net_device *dev)
> {
> struct tg3 *tp = netdev_priv(dev);
>
> if (!tg3_flag(tp, SUPPORT_MSIX))
> - return -EOPNOTSUPP;
> + return 1;
>
> - switch (info->cmd) {
> - case ETHTOOL_GRXRINGS:
> - if (netif_running(tp->dev))
> - info->data = tp->rxq_cnt;
> - else {
> - info->data = num_online_cpus();
> - if (info->data > TG3_RSS_MAX_NUM_QS)
> - info->data = TG3_RSS_MAX_NUM_QS;
> - }
> + if (netif_running(tp->dev))
> + return tp->rxq_cnt;
>
> - return 0;
> -
> - default:
> - return -EOPNOTSUPP;
> - }
> + return min(num_online_cpus(), TG3_RSS_MAX_NUM_QS);

The existing code to use num_online_cpus() is actually not correct.
This is more correct:

return min(netif_get_num_default_rss_queues(), tp->rxq_max);

I think when netif_get_num_default_rss_queues() was used to replace
num_online_cpus(), tg3_get_rxnfc() was not properly converted.

Thanks.

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature