hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/net/phy/phy_device.c
....@@ -2891,8 +2891,6 @@
28912891 if (phydrv->flags & PHY_IS_INTERNAL)
28922892 phydev->is_internal = true;
28932893
2894
- mutex_lock(&phydev->lock);
2895
-
28962894 /* Deassert the reset signal */
28972895 phy_device_reset(phydev, 0);
28982896
....@@ -2961,11 +2959,9 @@
29612959 phydev->state = PHY_READY;
29622960
29632961 out:
2964
- /* Assert the reset signal */
2962
+ /* Re-assert the reset signal on error */
29652963 if (err)
29662964 phy_device_reset(phydev, 1);
2967
-
2968
- mutex_unlock(&phydev->lock);
29692965
29702966 return err;
29712967 }
....@@ -2976,9 +2972,7 @@
29762972
29772973 cancel_delayed_work_sync(&phydev->state_queue);
29782974
2979
- mutex_lock(&phydev->lock);
29802975 phydev->state = PHY_DOWN;
2981
- mutex_unlock(&phydev->lock);
29822976
29832977 sfp_bus_del_upstream(phydev->sfp_bus);
29842978 phydev->sfp_bus = NULL;
....@@ -3088,23 +3082,30 @@
30883082 {
30893083 int rc;
30903084
3085
+ ethtool_set_ethtool_phy_ops(&phy_ethtool_phy_ops);
3086
+
30913087 rc = mdio_bus_init();
30923088 if (rc)
3093
- return rc;
3089
+ goto err_ethtool_phy_ops;
30943090
3095
- ethtool_set_ethtool_phy_ops(&phy_ethtool_phy_ops);
30963091 features_init();
30973092
30983093 rc = phy_driver_register(&genphy_c45_driver, THIS_MODULE);
30993094 if (rc)
3100
- goto err_c45;
3095
+ goto err_mdio_bus;
31013096
31023097 rc = phy_driver_register(&genphy_driver, THIS_MODULE);
3103
- if (rc) {
3104
- phy_driver_unregister(&genphy_c45_driver);
3098
+ if (rc)
3099
+ goto err_c45;
3100
+
3101
+ return 0;
3102
+
31053103 err_c45:
3106
- mdio_bus_exit();
3107
- }
3104
+ phy_driver_unregister(&genphy_c45_driver);
3105
+err_mdio_bus:
3106
+ mdio_bus_exit();
3107
+err_ethtool_phy_ops:
3108
+ ethtool_set_ethtool_phy_ops(NULL);
31083109
31093110 return rc;
31103111 }