diff options
| author | David S. Miller <davem@davemloft.net> | 2019-02-14 12:04:55 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2019-02-14 12:04:55 -0500 |
| commit | 61c4c0bcff87773cd65d1cf487e2b2a34bc6730f (patch) | |
| tree | 5c4576e502af6717242dee142475bf318856d0cc /include/linux | |
| parent | 39c133196237335e8ee9e3694ef7921241cf6a41 (diff) | |
| parent | a20049071796691cf99eb6433968fc3c27632b95 (diff) | |
Merge branch 'net-phy-fix-locking-issue'
Heiner Kallweit says:
====================
net: phy: fix locking issue
Russell pointed out that the locking used in phy_is_started() isn't
needed and misleading. This locking also contributes to a race fixed
with patch 2.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/phy.h | 15 |
1 files changed, 1 insertions, 14 deletions
diff --git a/include/linux/phy.h b/include/linux/phy.h index ef20aeea10cc..127fcc9c3778 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h | |||
| @@ -674,26 +674,13 @@ phy_lookup_setting(int speed, int duplex, const unsigned long *mask, | |||
| 674 | size_t phy_speeds(unsigned int *speeds, size_t size, | 674 | size_t phy_speeds(unsigned int *speeds, size_t size, |
| 675 | unsigned long *mask); | 675 | unsigned long *mask); |
| 676 | 676 | ||
| 677 | static inline bool __phy_is_started(struct phy_device *phydev) | ||
| 678 | { | ||
| 679 | WARN_ON(!mutex_is_locked(&phydev->lock)); | ||
| 680 | |||
| 681 | return phydev->state >= PHY_UP; | ||
| 682 | } | ||
| 683 | |||
| 684 | /** | 677 | /** |
| 685 | * phy_is_started - Convenience function to check whether PHY is started | 678 | * phy_is_started - Convenience function to check whether PHY is started |
| 686 | * @phydev: The phy_device struct | 679 | * @phydev: The phy_device struct |
| 687 | */ | 680 | */ |
| 688 | static inline bool phy_is_started(struct phy_device *phydev) | 681 | static inline bool phy_is_started(struct phy_device *phydev) |
| 689 | { | 682 | { |
| 690 | bool started; | 683 | return phydev->state >= PHY_UP; |
| 691 | |||
| 692 | mutex_lock(&phydev->lock); | ||
| 693 | started = __phy_is_started(phydev); | ||
| 694 | mutex_unlock(&phydev->lock); | ||
| 695 | |||
| 696 | return started; | ||
| 697 | } | 684 | } |
| 698 | 685 | ||
| 699 | void phy_resolve_aneg_linkmode(struct phy_device *phydev); | 686 | void phy_resolve_aneg_linkmode(struct phy_device *phydev); |
