OSDN Git Service

net: phylink: require supported_interfaces to be filled
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Sat, 20 May 2023 10:41:42 +0000 (11:41 +0100)
committerJakub Kicinski <kuba@kernel.org>
Tue, 23 May 2023 02:07:42 +0000 (19:07 -0700)
We have been requiring the supported_interfaces bitmap to be filled in
by MAC drivers that have a mac_select_pcs() method. Now that all MAC
drivers fill in the supported_interfaces bitmap, it is time to enforce
this. We have already required supported_interfaces to be set in order
for optical SFPs to be configured in commit f81fa96d8a6c ("net: phylink:
use phy_interface_t bitmaps for optical modules").

Refuse phylink creation if supported_interfaces is empty, and remove
code to deal with cases where this mask is empty.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/E1q0K1u-006EIP-ET@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/phylink.c

index a4dd519..093b7b6 100644 (file)
@@ -712,14 +712,11 @@ static int phylink_validate(struct phylink *pl, unsigned long *supported,
 {
        const unsigned long *interfaces = pl->config->supported_interfaces;
 
-       if (!phy_interface_empty(interfaces)) {
-               if (state->interface == PHY_INTERFACE_MODE_NA)
-                       return phylink_validate_mask(pl, supported, state,
-                                                    interfaces);
+       if (state->interface == PHY_INTERFACE_MODE_NA)
+               return phylink_validate_mask(pl, supported, state, interfaces);
 
-               if (!test_bit(state->interface, interfaces))
-                       return -EINVAL;
-       }
+       if (!test_bit(state->interface, interfaces))
+               return -EINVAL;
 
        return phylink_validate_mac_and_pcs(pl, supported, state);
 }
@@ -1513,19 +1510,18 @@ struct phylink *phylink_create(struct phylink_config *config,
        struct phylink *pl;
        int ret;
 
-       if (mac_ops->mac_select_pcs &&
-           mac_ops->mac_select_pcs(config, PHY_INTERFACE_MODE_NA) !=
-             ERR_PTR(-EOPNOTSUPP))
-               using_mac_select_pcs = true;
-
        /* Validate the supplied configuration */
-       if (using_mac_select_pcs &&
-           phy_interface_empty(config->supported_interfaces)) {
+       if (phy_interface_empty(config->supported_interfaces)) {
                dev_err(config->dev,
-                       "phylink: error: empty supported_interfaces but mac_select_pcs() method present\n");
+                       "phylink: error: empty supported_interfaces\n");
                return ERR_PTR(-EINVAL);
        }
 
+       if (mac_ops->mac_select_pcs &&
+           mac_ops->mac_select_pcs(config, PHY_INTERFACE_MODE_NA) !=
+             ERR_PTR(-EOPNOTSUPP))
+               using_mac_select_pcs = true;
+
        pl = kzalloc(sizeof(*pl), GFP_KERNEL);
        if (!pl)
                return ERR_PTR(-ENOMEM);