mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: David Laight <David.Laight@ACULAB.COM>
To: "'Andrew Lunn'" <andrew@lunn.ch>,
	Florian Fainelli <f.fainelli@gmail.com>
Cc: "netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"zefir.kurtisi@neratec.com" <zefir.kurtisi@neratec.com>,
	"Sebastian Hesselbarth" <sebastian.hesselbarth@gmail.com>,
	Wingman Kwok <w-kwok2@ti.com>,
	Murali Karicheri <m-karicheri2@ti.com>,
	Vivien Didelot <vivien.didelot@savoirfairelinux.com>,
	"David S. Miller" <davem@davemloft.net>,
	Philippe Reynes <tremyfr@gmail.com>,
	Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>,
	Jisheng Zhang <jszhang@marvell.com>,
	Jarod Wilson <jarod@redhat.com>,
	open list <linux-kernel@vger.kernel.org>
Subject: RE: [PATCH net-next 4/4] net: dsa: Do not clobber PHY link outside of state machine
Date: Tue, 7 Feb 2017 11:42:12 +0000	[thread overview]
Message-ID: <063D6719AE5E284EB5DD2968C1650D6DB027DB40@AcuExch.aculab.com> (raw)
In-Reply-To: <20170207001132.GB30169@lunn.ch>

From: Andrew Lunn
> Sent: 07 February 2017 00:12
> On Mon, Feb 06, 2017 at 03:55:23PM -0800, Florian Fainelli wrote:
> > Calling phy_read_status() means that we may call into
> > genphy_read_status() which in turn will use genphy_update_link() which
> > can make changes to phydev->link outside of the state machine's state
> > transitions. This is an invalid behavior that is now caught as of
> > 811a919135b9 ("phy state machine: failsafe leave invalid RUNNING state")
> >
> > Reported-by: Zefir Kurtisi <zefir.kurtisi@neratec.com>
> > Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
> > ---
> >  net/dsa/slave.c | 10 +++-------
> >  1 file changed, 3 insertions(+), 7 deletions(-)
> >
> > diff --git a/net/dsa/slave.c b/net/dsa/slave.c
> > index 09fc3e9462c1..4b6fb6b14de4 100644
> > --- a/net/dsa/slave.c
> > +++ b/net/dsa/slave.c
> > @@ -651,14 +651,10 @@ dsa_slave_get_link_ksettings(struct net_device *dev,
> >  			     struct ethtool_link_ksettings *cmd)
> >  {
> >  	struct dsa_slave_priv *p = netdev_priv(dev);
> > -	int err;
> > +	int err = -EOPNOTSUPP;
> >
> > -	err = -EOPNOTSUPP;
> > -	if (p->phy != NULL) {
> > -		err = phy_read_status(p->phy);
> > -		if (err == 0)
> > -			err = phy_ethtool_ksettings_get(p->phy, cmd);
> > -	}
> > +	if (p->phy != NULL)
> > +		err = phy_ethtool_ksettings_get(p->phy, cmd);
> 
> Hi Florian
> 
> So what we are effectively doing is returning the state from the last
> poll/interrupt. The poll information could be up to 1 second out of
> date, but those PHYs using interrupts should give more fresh
> information.

Another option is to request the state machine re-read the phy status
and wakeup the caller when it has the result.

Related is that polling the phy status every second can be bad news for
system latency.
Typically it involves bit-bashing an interface with spin-delays to
meet the slow timings (with extra delays to allow for posted writes).
An alternative would be to do a very slow bit-bang on each timer tick,
this would need to be sped up and finished before any other actions.

	David

  reply	other threads:[~2017-02-07 11:42 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-06 23:55 [PATCH net-next 0/4] net: Incorrect use of phy_read_status() Florian Fainelli
2017-02-06 23:55 ` [PATCH net-next 1/4] net: mv643xx_eth: Do not clobber PHY link outside of state machine Florian Fainelli
2017-02-07  0:13   ` Andrew Lunn
2017-02-06 23:55 ` [PATCH net-next 2/4] net: pxa168_eth: " Florian Fainelli
2017-02-06 23:55 ` [PATCH net-next 3/4] net: netcp: " Florian Fainelli
2017-02-06 23:55 ` [PATCH net-next 4/4] net: dsa: " Florian Fainelli
2017-02-07  0:11   ` Andrew Lunn
2017-02-07 11:42     ` David Laight [this message]
2017-02-07 13:14       ` Andrew Lunn
2017-02-07 18:48 ` [PATCH net-next 0/4] net: Incorrect use of phy_read_status() David Miller

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=063D6719AE5E284EB5DD2968C1650D6DB027DB40@AcuExch.aculab.com \
    --to=david.laight@aculab.com \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=f.fainelli@gmail.com \
    --cc=jarod@redhat.com \
    --cc=jszhang@marvell.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=m-karicheri2@ti.com \
    --cc=netdev@vger.kernel.org \
    --cc=sebastian.hesselbarth@gmail.com \
    --cc=sergei.shtylyov@cogentembedded.com \
    --cc=tremyfr@gmail.com \
    --cc=vivien.didelot@savoirfairelinux.com \
    --cc=w-kwok2@ti.com \
    --cc=zefir.kurtisi@neratec.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

all inboxes | Powered by JetHome®