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 --- 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