Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: phy: c45: improve handling of disabled EEE modes in generic ethtool functions

Currently disabled EEE modes are shown as supported in ethtool.
Change this by filtering them out when populating data->supported
in genphy_c45_ethtool_get_eee.
Disabled EEE modes are silently filtered out by genphy_c45_write_eee_adv.
This is planned to be removed, therefore ensure in
genphy_c45_ethtool_set_eee that disabled EEE modes are removed from the
user space provided EEE advertisement. For now keep the current behavior
to do this silently.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Link: https://patch.msgid.link/5187c86d-9a5a-482c-974f-cc103ce9738c@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Heiner Kallweit and committed by
Jakub Kicinski
0025fa45 c2ddb619

+5 -3
+5 -3
drivers/net/phy/phy-c45.c
··· 1525 1525 return ret; 1526 1526 1527 1527 data->eee_active = phydev->eee_active; 1528 - linkmode_copy(data->supported, phydev->supported_eee); 1529 - 1528 + linkmode_andnot(data->supported, phydev->supported_eee, 1529 + phydev->eee_disabled_modes); 1530 1530 return 0; 1531 1531 } 1532 1532 EXPORT_SYMBOL(genphy_c45_ethtool_get_eee); ··· 1559 1559 phydev_warn(phydev, "At least some EEE link modes are not supported.\n"); 1560 1560 return -EINVAL; 1561 1561 } 1562 - linkmode_copy(phydev->advertising_eee, adv); 1562 + 1563 + linkmode_andnot(phydev->advertising_eee, adv, 1564 + phydev->eee_disabled_modes); 1563 1565 } else if (linkmode_empty(phydev->advertising_eee)) { 1564 1566 phy_advertise_eee_all(phydev); 1565 1567 }