net: phy: realtek: Replace phy functions with non-locked version in rtl8211e_config_i...
authorKunihiko Hayashi <hayashi.kunihiko@socionext.com>
Mon, 13 May 2019 06:41:45 +0000 (15:41 +0900)
committerDavid S. Miller <davem@davemloft.net>
Mon, 13 May 2019 16:10:39 +0000 (09:10 -0700)
After calling phy_select_page() and until calling phy_restore_page(),
the mutex 'mdio_lock' is already locked, so the driver should use
non-locked version of phy functions. Or there will be a deadlock with
'mdio_lock'.

This replaces phy functions called from rtl8211e_config_init() to avoid
the deadlock issue.

Fixes: f81dadbcf7fd ("net: phy: realtek: Add rtl8211e rx/tx delays config")
Signed-off-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/realtek.c

index 4988ccea684a0816865ba853088b6ed8d70e86bb..a669945eb829aea82e59dd7314d1794b7cef220d 100644 (file)
@@ -217,12 +217,12 @@ static int rtl8211e_config_init(struct phy_device *phydev)
        if (oldpage < 0)
                goto err_restore_page;
 
-       ret = phy_write(phydev, RTL821x_EXT_PAGE_SELECT, 0xa4);
+       ret = __phy_write(phydev, RTL821x_EXT_PAGE_SELECT, 0xa4);
        if (ret)
                goto err_restore_page;
 
-       ret = phy_modify(phydev, 0x1c, RTL8211E_TX_DELAY | RTL8211E_RX_DELAY,
-                        val);
+       ret = __phy_modify(phydev, 0x1c, RTL8211E_TX_DELAY | RTL8211E_RX_DELAY,
+                          val);
 
 err_restore_page:
        return phy_restore_page(phydev, oldpage, ret);