FAILED: patch "[PATCH] phy: phy_start_aneg: Add an unlocked version" failed to apply to 4.9-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 707293a56f95f8e7e0cfae008010c7933fb68973 Mon Sep 17 00:00:00 2001
From: Andrew Lunn <[email protected]>
Date: Sun, 24 Oct 2021 21:48:04 +0200
Subject: [PATCH] phy: phy_start_aneg: Add an unlocked version
Split phy_start_aneg into a wrapper which takes the PHY lock, and a helper doing the real work. This will be needed when phy_ethtook_ksettings_set takes the lock.
Fixes 2d55173e71b0 ("phy: add generic function to support ksetting support")
Signed-off-by Andrew Lunn <[email protected]>
Signed-off-by David S. Miller <[email protected]>
drivers/net/phy/phy.c +24 -6
@@ -700,7 +700,7 @@ static int phy_check_link_status(struct phy_device *phydev) }/** -* phy_start_aneg - start auto-negotiation for this PHY device +* _phy_start_aneg - start auto-negotiation for this PHY device * @phydev: the phy_device struct * * Description: Sanitizes the settings (if we're not autonegotiating
@@ -708,25 +708,43 @@ static int phy_check_link_status(struct phy_device *phydev)* If the PHYCONTROL Layer is operating, we change the state to * reflect the beginning of Auto-negotiation or forcing. */ -int phy_start_aneg (struct phy_device *phydev) +static int _phy_start_aneg (struct phy_device *phydev) {int err; +lockdep_assert_held (&phydev->lock); +if (!phydev->drv)return -EIO ; -mutex_lock (&phydev->lock); -if (AUTONEG_DISABLE == phydev->autoneg)phy_sanitize_settings (phydev); err =phy_config_aneg (phydev);if (err <0 ) - goto out_unlock; +return err;if (phy_is_started (phydev)) err =phy_check_link_status (phydev); -out_unlock: + +return err; +} + +/** +* phy_start_aneg - start auto-negotiation for this PHY device +* @phydev: the phy_device struct +* +* Description: Sanitizes the settings (if we're not autonegotiating +* them), and then calls the driver's config_aneg function. +* If the PHYCONTROL Layer is operating, we change the state to +* reflect the beginning of Auto-negotiation or forcing. +*/ +int phy_start_aneg (struct phy_device *phydev) +{ +int err; + +mutex_lock (&phydev->lock); + err =_phy_start_aneg (phydev);mutex_unlock (&phydev->lock);return err;