Thread (3 messages) flat view 3 messages, 2 authors, 2018-01-12

Re: [PATCH] phy: realtek: use new helpers for paged register access

From: Heiner Kallweit <hkallweit1@gmail.com>
Date: 2018-01-12 22:13:32

Am 12.01.2018 um 22:01 schrieb Andrew Lunn:
On Fri, Jan 12, 2018 at 09:30:08PM +0100, Heiner Kallweit wrote:
quoted
Make use of the new helpers for paged register access.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/net/phy/realtek.c | 59 +++++++++++------------------------------------
 1 file changed, 14 insertions(+), 45 deletions(-)
diff --git a/drivers/net/phy/realtek.c b/drivers/net/phy/realtek.c
index 7c1bf688d..887bad07a 100644
--- a/drivers/net/phy/realtek.c
+++ b/drivers/net/phy/realtek.c
@@ -41,37 +41,14 @@ MODULE_DESCRIPTION("Realtek PHY driver");
 MODULE_AUTHOR("Johnson Leung");
 MODULE_LICENSE("GPL");
 
-static int rtl8211x_page_read(struct phy_device *phydev, u16 page, u16 address)
+static int rtl821x_read_page(struct phy_device *phydev)
 {
-	int ret;
-
-	ret = phy_write(phydev, RTL821x_PAGE_SELECT, page);
-	if (ret)
-		return ret;
-
-	ret = phy_read(phydev, address);
-
-	/* restore to default page 0 */
-	phy_write(phydev, RTL821x_PAGE_SELECT, 0x0);
-
-	return ret;
+	return phy_read(phydev, RTL821x_PAGE_SELECT);
Hi Heiner

It think this is wrong. You need to use __phy_read(). phy_read() does
an mdiobus_read(), which takes the bus->mdio_lock. However,
Uh, you are of course right.
int phy_save_page(struct phy_device *phydev)
{
        mutex_lock(&phydev->mdio.bus->mdio_lock);
        return __phy_read_page(phydev);
}

This also takes the same lock. So this should deadlock.

Try turning on CONFIG_PROVE_LOCKING, it will detect problems like
this.
Thanks for the hint. I have this option set, however my test system
doesn't use the irq-related callbacks. So it wasn't able to report
the issue. My fault.
	Andrew
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help