]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: phy: fix phy_validate_pause
authorHeiner Kallweit <hkallweit1@gmail.com>
Wed, 1 May 2019 19:54:28 +0000 (21:54 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 16 May 2019 17:40:29 +0000 (19:40 +0200)
[ Upstream commit b4010af981ac8cdf1f7f58eb6b131c482e5dee02 ]

We have valid scenarios where ETHTOOL_LINK_MODE_Pause_BIT doesn't
need to be supported. Therefore extend the first check to check
for rx_pause being set.

See also phy_set_asym_pause:
rx=0 and tx=1: advertise asym pause only
rx=0 and tx=0: stop advertising both pause modes

The fixed commit isn't wrong, it's just the one that introduced the
linkmode bitmaps.

Fixes: 3c1bcc8614db ("net: ethernet: Convert phydev advertize and supported from u32 to link mode")
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/phy/phy_device.c

index adf79614c2dbc6659985f55e72a4ca5864c3f851..ff2426e00682c8de087a52a7c154b6d23bf502f6 100644 (file)
@@ -2083,11 +2083,14 @@ bool phy_validate_pause(struct phy_device *phydev,
                        struct ethtool_pauseparam *pp)
 {
        if (!linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT,
-                              phydev->supported) ||
-           (!linkmode_test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
-                               phydev->supported) &&
-            pp->rx_pause != pp->tx_pause))
+                              phydev->supported) && pp->rx_pause)
                return false;
+
+       if (!linkmode_test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
+                              phydev->supported) &&
+           pp->rx_pause != pp->tx_pause)
+               return false;
+
        return true;
 }
 EXPORT_SYMBOL(phy_validate_pause);