All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Russell King (Oracle)" <linux@armlinux.org.uk>
To: Vladimir Oltean <vladimir.oltean@nxp.com>
Cc: Andrew Lunn <andrew@lunn.ch>,
	Heiner Kallweit <hkallweit1@gmail.com>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>,
	netdev@vger.kernel.org, Paolo Abeni <pabeni@redhat.com>
Subject: Re: [PATCH net] net: phy: fix phy_uses_state_machine()
Date: Mon, 1 Sep 2025 15:14:49 +0100	[thread overview]
Message-ID: <aLWqWeGvMM350dB2@shell.armlinux.org.uk> (raw)
In-Reply-To: <20250901103624.hv3vnkhjxvp2ep7r@skbuf>

On Mon, Sep 01, 2025 at 01:36:24PM +0300, Vladimir Oltean wrote:
> On Mon, Sep 01, 2025 at 11:05:54AM +0100, Russell King (Oracle) wrote:
> > Well, having spent considerable time writing and rewriting the damn
> > commit message, this is what I'm now using, which I think covers the
> > problem in sufficient detail.
> > 
> > >>>>>>
> > net: phy: fix phy_uses_state_machine()
> > 
> > The blamed commit changed the conditions which phylib uses to stop
> > and start the state machine in the suspend and resume paths, and
> > while improving it, has caused two issues.
> > 
> > The original code used this test:
> > 
> >         phydev->attached_dev && phydev->adjust_link
> > 
> > and if true, the paths would handle the PHY state machine. This test
> > evaluates true for normal drivers that are using phylib directly
> > while the PHY is attached to the network device, but false in all
> > other cases, which include the following cases:
> > 
> > - when the PHY has never been attached to a network device.
> > - when the PHY has been detached from a network device (as phy_detach()
> >    sets phydev->attached_dev to NULL, phy_disconnect() calls
> >    phy_detach() and additionally sets phydev->adjust_link NULL.)
> > - when phylink is using the driver (as phydev->adjust_link is NULL.)
> > 
> > Only the third case was incorrect, and the blamed commit attempted to
> > fix this by changing this test to (simplified for brevity, see
> > phy_uses_state_machine()):
> > 
> >         phydev->phy_link_change == phy_link_change ?
> >                 phydev->attached_dev && phydev->adjust_link : true
> > 
> > However, this also incorrectly evaluates true in the first two cases.
> > 
> > Fix the first case by ensuring that phy_uses_state_machine() returns
> > false when phydev->phy_link_change is NULL.
> > 
> > Fix the second case by ensuring that phydev->phy_link_change is set to
> > NULL when phy_detach() is called.
> > <<<<<<
> 
> The new explanation and the placement of the function pointer clearing
> make sense, thanks. Maybe add one last sentence at the end: "This covers
> both the phylink_bringup_phy() error path, as well as the normal
> phylink_disconnect_phy() path."

Is it really necessary to add that level of detail? phy_attach() sets
phydev->phy_link_change, so it's natural that phy_detach() should undo
that action, especially as phy_detach() is phy_attach()'s complement.


-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!

  reply	other threads:[~2025-09-01 14:14 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-31 16:38 [PATCH net] net: phy: fix phy_uses_state_machine() Russell King (Oracle)
2025-09-01  8:09 ` Vladimir Oltean
2025-09-01  8:42 ` Vladimir Oltean
2025-09-01  9:09   ` Russell King (Oracle)
2025-09-01  9:35     ` Vladimir Oltean
2025-09-01 10:05       ` Russell King (Oracle)
2025-09-01 10:36         ` Vladimir Oltean
2025-09-01 14:14           ` Russell King (Oracle) [this message]
2025-09-01 14:25             ` Vladimir Oltean
2025-09-01  9:34 ` Russell King (Oracle)
2025-09-01  9:39   ` Vladimir Oltean
2025-09-01 10:23     ` Russell King (Oracle)
  -- strict thread matches above, loose matches on Subject: below --
2025-09-07 20:44 Russell King (Oracle)
2025-09-08 13:37 ` Vladimir Oltean
2025-09-09 23:50 ` patchwork-bot+netdevbpf

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=aLWqWeGvMM350dB2@shell.armlinux.org.uk \
    --to=linux@armlinux.org.uk \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=hkallweit1@gmail.com \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=vladimir.oltean@nxp.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.