[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <85441436-49f3-82c0-d550-d4ffa423ae12@gmail.com>
Date: Mon, 21 Jan 2019 19:25:23 +0100
From: Heiner Kallweit <hkallweit1@...il.com>
To: Andrew Lunn <andrew@...n.ch>
Cc: Florian Fainelli <f.fainelli@...il.com>,
David Miller <davem@...emloft.net>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>
Subject: Re: [PATCH net-next v2 2/4] net: phy: warn if phy_start is called
from invalid state
On 21.01.2019 17:40, Andrew Lunn wrote:
> On Sun, Jan 20, 2019 at 10:02:13AM +0100, Heiner Kallweit wrote:
>> phy_start() should be called from states PHY_READY or PHY_HALTED only.
>> Check for this to detect misbehaving drivers. Also the state machine
>> should be started only when being called from one of the valid states.
>>
>> Signed-off-by: Heiner Kallweit <hkallweit1@...il.com>
>> ---
>> drivers/net/phy/phy.c | 11 +++++++++--
>> 1 file changed, 9 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
>> index 3df6aadc5..fd928979b 100644
>> --- a/drivers/net/phy/phy.c
>> +++ b/drivers/net/phy/phy.c
>> @@ -861,9 +861,16 @@ void phy_start(struct phy_device *phydev)
>>
>> mutex_lock(&phydev->lock);
>>
>> + if (phydev->state != PHY_READY && phydev->state != PHY_HALTED) {
>> + WARN(1, "called from state %s\n",
>> + phy_state_to_str(phydev->state));
>> + goto out;
>> + }
>
> Hi Heiner
>
> Warning is good. But jumping to out i'm not so sure about. Drivers
> which are 'broken' work well enough that users don't know they are
> broken. But jumping to out is going to really break them. It seems
> better to have the kernel only warn for one cycle so we find out about
> such drivers and fix them, and later add the goto out.
>
For all invalid states phy_start() basically was a no-op. All it did was
triggering a state machine run, but for all "running" states the poll
loop was active anyway. And if called from PHY_DOWN, the state machine
does nothing. Therefore I see no scenario where jumping to out would
break anything.
> Andrew
>
Heiner
Powered by blists - more mailing lists