From: Andrew Lunn <andrew@lunn.ch>
To: Yunsheng Lin <linyunsheng@huawei.com>
Cc: f.fainelli@gmail.com, liguozhu@hisilicon.com,
linuxarm@huawei.com, linux-kernel@vger.kernel.org,
netdev@vger.kernel.org, davem@davemloft.net, tremyfr@gmail.com
Subject: Re: [PATCH NET v3 1/2] net: phy: Add phy loopback support in net phy framework
Date: Sat, 24 Jun 2017 15:50:04 +0200 [thread overview]
Message-ID: <20170624135004.GK4875@lunn.ch> (raw)
In-Reply-To: <13778697-eebb-0787-33dc-a57112f45046@huawei.com>
> phy_resume call phydrv->resume without take mutex.
> if phy driver implement resume function, for example marvell_resume, then
>
> static int marvell_resume(struct phy_device *phydev)
> {
> int err;
>
> /* Resume the fiber mode first */
> if (!(phydev->supported & SUPPORTED_FIBRE)) {
> err = phy_write(phydev, MII_MARVELL_PHY_PAGE, MII_M1111_FIBER);
> if (err < 0)
> goto error;
>
> /* With the page set, use the generic resume */
> err = genphy_resume(phydev);
> if (err < 0)
> goto error;
>
> /* Then, the copper link */
> err = phy_write(phydev, MII_MARVELL_PHY_PAGE, MII_M1111_COPPER);
> if (err < 0)
> goto error;
> }
>
> the code above executes without holding a mutex expect genphy_resume
>
> /* With the page set, use the generic resume */
> return genphy_resume(phydev);
>
> error:
> phy_write(phydev, MII_MARVELL_PHY_PAGE, MII_M1111_COPPER);
> return err;
> }
>
> So I think the correct way to hold a lock is in phy_* function, not in genphy_*,
> and current genphy_resume and phy_resume is broken in this way.
Suspend and resume are a bit odd. As you found out, everywhere else,
the core takes the mutex before calling into the driver function.
The general rule of thumb, is that many driver writers don't
understand locking. So it is better to do the locking in the core,
which is generally written by people who do understand locking. And
core code gets used more, so bugs tend to be found.
Andrew
next prev parent reply other threads:[~2017-06-24 13:50 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-23 9:44 [PATCH NET v3 0/2] Add loopback support in phy_driver and hns ethtool fix Lin Yun Sheng
2017-06-23 9:44 ` [PATCH NET v3 1/2] net: phy: Add phy loopback support in net phy framework Lin Yun Sheng
2017-06-24 3:12 ` Andrew Lunn
2017-06-24 3:40 ` Yunsheng Lin
2017-06-24 6:15 ` Yunsheng Lin
2017-06-24 13:50 ` Andrew Lunn [this message]
2017-06-23 9:44 ` [PATCH NET v3 2/2] net: hns: Use phy_driver to setup Phy loopback Lin Yun Sheng
2017-06-24 3:18 ` Andrew Lunn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170624135004.GK4875@lunn.ch \
--to=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=f.fainelli@gmail.com \
--cc=liguozhu@hisilicon.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=linyunsheng@huawei.com \
--cc=netdev@vger.kernel.org \
--cc=tremyfr@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).