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 <[email protected]>
---
 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

Reply via email to