]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
net: phylink: add common validation for sfp_select_interface()
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Wed, 23 Oct 2024 13:41:46 +0000 (14:41 +0100)
committerJakub Kicinski <kuba@kernel.org>
Tue, 29 Oct 2024 18:57:31 +0000 (11:57 -0700)
Whenever we call sfp_select_interface(), we check the returned value
and print an error. There are two cases where this happens with the
same message. Provide a common function to do this.

Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Tested-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/E1t3bcQ-000c85-S4@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/phylink.c

index 20c227e22993ad34d0f35f4ef3b696b9ec62a57a..2eb12bc564526f392cec365ae89de19ae3029697 100644 (file)
@@ -2408,6 +2408,21 @@ int phylink_ethtool_set_wol(struct phylink *pl, struct ethtool_wolinfo *wol)
 }
 EXPORT_SYMBOL_GPL(phylink_ethtool_set_wol);
 
+static phy_interface_t phylink_sfp_select_interface(struct phylink *pl,
+                                               const unsigned long *link_modes)
+{
+       phy_interface_t interface;
+
+       interface = sfp_select_interface(pl->sfp_bus, link_modes);
+       if (interface == PHY_INTERFACE_MODE_NA)
+               phylink_err(pl,
+                           "selection of interface failed, advertisement %*pb\n",
+                           __ETHTOOL_LINK_MODE_MASK_NBITS,
+                           link_modes);
+
+       return interface;
+}
+
 static void phylink_merge_link_mode(unsigned long *dst, const unsigned long *b)
 {
        __ETHTOOL_DECLARE_LINK_MODE_MASK(mask);
@@ -2590,15 +2605,10 @@ int phylink_ethtool_ksettings_set(struct phylink *pl,
         * link can be configured correctly.
         */
        if (pl->sfp_bus) {
-               config.interface = sfp_select_interface(pl->sfp_bus,
+               config.interface = phylink_sfp_select_interface(pl,
                                                        config.advertising);
-               if (config.interface == PHY_INTERFACE_MODE_NA) {
-                       phylink_err(pl,
-                                   "selection of interface failed, advertisement %*pb\n",
-                                   __ETHTOOL_LINK_MODE_MASK_NBITS,
-                                   config.advertising);
+               if (config.interface == PHY_INTERFACE_MODE_NA)
                        return -EINVAL;
-               }
 
                /* Revalidate with the selected interface */
                linkmode_copy(support, pl->supported);
@@ -3227,13 +3237,9 @@ static int phylink_sfp_config_phy(struct phylink *pl, u8 mode,
                return ret;
        }
 
-       iface = sfp_select_interface(pl->sfp_bus, config.advertising);
-       if (iface == PHY_INTERFACE_MODE_NA) {
-               phylink_err(pl,
-                           "selection of interface failed, advertisement %*pb\n",
-                           __ETHTOOL_LINK_MODE_MASK_NBITS, config.advertising);
+       iface = phylink_sfp_select_interface(pl, config.advertising);
+       if (iface == PHY_INTERFACE_MODE_NA)
                return -EINVAL;
-       }
 
        config.interface = iface;
        linkmode_copy(support1, support);