]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
realtek: pcs: improve lock and error handling in pcs_config 23759/head
authorJonas Jelonek <jelonek.jonas@gmail.com>
Sun, 14 Jun 2026 12:44:35 +0000 (12:44 +0000)
committerJonas Jelonek <jelonek.jonas@gmail.com>
Sun, 14 Jun 2026 13:11:45 +0000 (15:11 +0200)
Make use of scoped_guard macro to ease lock and error handling in
pcs_config by having a dedicated scope and no need for gotos.

While being here, replace -ENOTSUPP with preferred -EOPNOTSUPP and drop
{ } brackets for single statement block.

Link: https://github.com/openwrt/openwrt/pull/23759
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
target/linux/realtek/files-6.18/drivers/net/pcs/pcs-rtl-otto.c

index d93bd6ef65c16874fc743faa463bd8a805fc21a4..e236b94df2e41641624c8e9146fb12702acf4f9c 100644 (file)
@@ -4106,50 +4106,47 @@ static int rtpcs_pcs_config(struct phylink_pcs *pcs, unsigned int neg_mode,
        if (ret < 0) {
                dev_err(ctrl->dev, "SerDes %u doesn't support %s mode\n", sds->id,
                        phy_modes(interface));
-               return -ENOTSUPP;
+               return -EOPNOTSUPP;
        }
 
-       mutex_lock(&ctrl->lock);
+       scoped_guard(mutex, &ctrl->lock) {
+               if (sds->hw_mode != hw_mode) {
+                       dev_info(ctrl->dev, "configure SerDes %u for mode %s\n", sds->id,
+                                phy_modes(interface));
 
-       if (sds->hw_mode != hw_mode) {
-               dev_info(ctrl->dev, "configure SerDes %u for mode %s\n", sds->id,
-                        phy_modes(interface));
+                       ret = rtpcs_sds_config_polarity(sds, interface);
+                       if (ret < 0) {
+                               dev_err(ctrl->dev, "failed to configure polarity of SerDes %u\n",
+                                       sds->id);
+                               return ret;
+                       }
 
-               ret = rtpcs_sds_config_polarity(sds, interface);
-               if (ret < 0) {
-                       dev_err(ctrl->dev, "failed to configure polarity of SerDes %u\n",
-                               sds->id);
-                       goto out;
-               }
+                       ret = sds->ops->deactivate(sds);
+                       if (ret < 0)
+                               return ret;
 
-               ret = sds->ops->deactivate(sds);
-               if (ret < 0)
-                       goto out;
+                       ret = ctrl->cfg->setup_serdes(sds, hw_mode);
+                       if (ret < 0)
+                               return ret;
 
-               ret = ctrl->cfg->setup_serdes(sds, hw_mode);
-               if (ret < 0)
-                       goto out;
+                       ret = sds->ops->activate(sds);
+                       if (ret < 0)
+                               return ret;
 
-               ret = sds->ops->activate(sds);
-               if (ret < 0)
-                       goto out;
+                       if (sds->ops->post_config) {
+                               ret = sds->ops->post_config(sds, hw_mode);
+                               if (ret < 0)
+                                       return ret;
+                       }
 
-               if (sds->ops->post_config) {
-                       ret = sds->ops->post_config(sds, hw_mode);
-                       if (ret < 0)
-                               goto out;
-               }
+                       sds->first_start = false;
+               } else
+                       dev_dbg(ctrl->dev, "SerDes %u already in mode %s, no change\n",
+                                sds->id, phy_modes(interface));
 
-               sds->first_start = false;
-       } else {
-               dev_dbg(ctrl->dev, "SerDes %u already in mode %s, no change\n",
-                        sds->id, phy_modes(interface));
+               ret = sds->ops->set_autoneg(sds, neg_mode, advertising);
        }
 
-       ret = sds->ops->set_autoneg(sds, neg_mode, advertising);
-
-out:
-       mutex_unlock(&ctrl->lock);
        return ret;
 }