RE: [PATCH 3/9] net: amd: xgbe: use linkmode_and() return value in xgbe_set_link_ksettings()

From: Loktionov, Aleksandr

Date: Tue Sep 08 2026 - 10:06:42 EST




> -----Original Message-----
> From: Yury Norov <yury.norov@xxxxxxxxx>
> Sent: Monday, September 7, 2026 11:55 PM
> To: Andrew Lunn <andrew@xxxxxxx>; Heiner Kallweit
> <hkallweit1@xxxxxxxxx>; Russell King <linux@xxxxxxxxxxxxxxx>; Raju
> Rangoju <Raju.Rangoju@xxxxxxx>; Prashanth Kumar K R
> <PrashanthKumar.K.R@xxxxxxx>; Nguyen, Anthony L
> <anthony.l.nguyen@xxxxxxxxx>; Kitszel, Przemyslaw
> <przemyslaw.kitszel@xxxxxxxxx>; Jian Shen <shenjian15@xxxxxxxxxx>;
> Jijie Shao <shaojijie@xxxxxxxxxx>; David S. Miller
> <davem@xxxxxxxxxxxxx>; Eric Dumazet <edumazet@xxxxxxxxxx>; Jakub
> Kicinski <kuba@xxxxxxxxxx>; Paolo Abeni <pabeni@xxxxxxxxxx>; linux-
> kernel@xxxxxxxxxxxxxxx; netdev@xxxxxxxxxxxxxxx; intel-wired-
> lan@xxxxxxxxxxxxxxxx; linux-usb@xxxxxxxxxxxxxxx
> Cc: Yury Norov <ynorov@xxxxxxxxxx>; Yury Norov <yury.norov@xxxxxxxxx>;
> Rasmus Villemoes <linux@xxxxxxxxxxxxxxxxxx>; Andrew Morton
> <akpm@xxxxxxxxxxxxxxxxxxxx>
> Subject: [PATCH 3/9] net: amd: xgbe: use linkmode_and() return value
> in xgbe_set_link_ksettings()
>
> bitmap_empty() is O(N).
>
> Use the return value of linkmode_and() when validating the requested
> advertisement instead of scanning the result bitmap separately.
>
> Signed-off-by: Yury Norov <ynorov@xxxxxxxxxx>
> ---
> drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
> b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
> index a9f4fcc4daae..113a10855938 100644
> --- a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
> +++ b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
> @@ -231,6 +231,7 @@ static int xgbe_set_link_ksettings(struct
> net_device *netdev,
> struct xgbe_prv_data *pdata = netdev_priv(netdev);
> struct ethtool_link_ksettings *lks = &pdata->phy.lks;
> __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising);
> + bool has_advertising;
> u32 speed;
> int ret;
>
> @@ -267,11 +268,11 @@ static int xgbe_set_link_ksettings(struct
> net_device *netdev,
> __ETHTOOL_LINK_MODE_MASK_NBITS, cmd-
> >link_modes.advertising,
> __ETHTOOL_LINK_MODE_MASK_NBITS, lks-
> >link_modes.supported);
>
> - linkmode_and(advertising, cmd->link_modes.advertising,
> - lks->link_modes.supported);
> + has_advertising = linkmode_and(advertising,
> + cmd->link_modes.advertising,
> + lks->link_modes.supported);
>
> - if ((cmd->base.autoneg == AUTONEG_ENABLE) &&
> - bitmap_empty(advertising, __ETHTOOL_LINK_MODE_MASK_NBITS))
> {
> + if (!has_advertising && cmd->base.autoneg == AUTONEG_ENABLE) {
> netdev_err(netdev,
> "unsupported requested advertisement\n");
> return -EINVAL;
> --
> 2.53.0

Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@xxxxxxxxx>