All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Lunn <andrew@lunn.ch>
To: Lukas Wunner <lukas@wunner.de>
Cc: "David S. Miller" <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	netdev@vger.kernel.org, linux-usb@vger.kernel.org,
	Steve Glendinning <steve.glendinning@shawell.net>,
	UNGLinuxDriver@microchip.com, Oliver Neukum <oneukum@suse.com>,
	Andre Edich <andre.edich@microchip.com>,
	Oleksij Rempel <linux@rempel-privat.de>,
	Martyn Welch <martyn.welch@collabora.com>,
	Gabriel Hojda <ghojda@yo2urs.ro>,
	Christoph Fritz <chf.fritz@googlemail.com>,
	Lino Sanfilippo <LinoSanfilippo@gmx.de>,
	Philipp Rosenberger <p.rosenberger@kunbus.com>,
	Heiner Kallweit <hkallweit1@gmail.com>,
	Russell King <linux@armlinux.org.uk>,
	Ferry Toth <fntoth@gmail.com>
Subject: Re: [PATCH net-next v2 4/7] usbnet: smsc95xx: Avoid link settings race on interrupt reception
Date: Wed, 4 May 2022 00:23:13 +0200	[thread overview]
Message-ID: <YnGrUdmqtzt3Ogn+@lunn.ch> (raw)
In-Reply-To: <e6117cf857bea9af718d8c92d9d553c8f3a35e0a.1651574194.git.lukas@wunner.de>

On Tue, May 03, 2022 at 03:15:04PM +0200, Lukas Wunner wrote:
> When a PHY interrupt is signaled, the SMSC LAN95xx driver updates the
> MAC full duplex mode and PHY flow control registers based on cached data
> in struct phy_device:
> 
>   smsc95xx_status()                 # raises EVENT_LINK_RESET
>     usbnet_deferred_kevent()
>       smsc95xx_link_reset()         # uses cached data in phydev
> 
> Simultaneously, phylib polls link status once per second and updates
> that cached data:
> 
>   phy_state_machine()
>     phy_check_link_status()
>       phy_read_status()
>         lan87xx_read_status()
>           genphy_read_status()      # updates cached data in phydev
> 
> If smsc95xx_link_reset() wins the race against genphy_read_status(),
> the registers may be updated based on stale data.
> 
> E.g. if the link was previously down, phydev->duplex is set to
> DUPLEX_UNKNOWN and that's what smsc95xx_link_reset() will use, even
> though genphy_read_status() may update it to DUPLEX_FULL afterwards.
> 
> PHY interrupts are currently only enabled on suspend to trigger wakeup,
> so the impact of the race is limited, but we're about to enable them
> perpetually.
> 
> Avoid the race by delaying execution of smsc95xx_link_reset() until
> phy_state_machine() has done its job and calls back via
> smsc95xx_handle_link_change().
> 
> Signaling EVENT_LINK_RESET on wakeup is not necessary because phylib
> picks up link status changes through polling.  So drop the declaration
> of a ->link_reset() callback.
> 
> Note that the semicolon on a line by itself added in smsc95xx_status()
> is a placeholder for a function call which will be added in a subsequent
> commit.  That function call will actually handle the INT_ENP_PHY_INT_
> interrupt.
> 
> Tested-by: Oleksij Rempel <o.rempel@pengutronix.de> # LAN9514/9512/9500
> Tested-by: Ferry Toth <fntoth@gmail.com> # LAN9514
> Signed-off-by: Lukas Wunner <lukas@wunner.de>

Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew

  reply	other threads:[~2022-05-03 22:23 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-03 13:15 [PATCH net-next v2 0/7] Polling be gone on LAN95xx Lukas Wunner
2022-05-03 13:15 ` [PATCH net-next v2 1/7] usbnet: Run unregister_netdev() before unbind() again Lukas Wunner
2022-05-03 13:15 ` [PATCH net-next v2 2/7] usbnet: smsc95xx: Don't clear read-only PHY interrupt Lukas Wunner
2022-05-03 22:20   ` Andrew Lunn
2022-05-03 13:15 ` [PATCH net-next v2 3/7] usbnet: smsc95xx: Don't reset PHY behind PHY driver's back Lukas Wunner
2022-05-03 22:21   ` Andrew Lunn
2022-05-03 13:15 ` [PATCH net-next v2 4/7] usbnet: smsc95xx: Avoid link settings race on interrupt reception Lukas Wunner
2022-05-03 22:23   ` Andrew Lunn [this message]
2022-05-03 13:15 ` [PATCH net-next v2 5/7] usbnet: smsc95xx: Forward PHY interrupts to PHY driver to avoid polling Lukas Wunner
2022-05-05 18:32   ` Jakub Kicinski
2022-05-05 18:53     ` Lukas Wunner
2022-05-06 10:58       ` Marc Zyngier
2022-05-06 20:16         ` Lukas Wunner
2022-05-09  8:47           ` Marc Zyngier
2022-05-10  8:18             ` Lukas Wunner
2022-05-11  0:27     ` [tip: irq/urgent] genirq: Remove WARN_ON_ONCE() in generic_handle_domain_irq() tip-bot2 for Lukas Wunner
2022-05-11  9:26     ` [PATCH net-next v2 5/7] usbnet: smsc95xx: Forward PHY interrupts to PHY driver to avoid polling Lukas Wunner
2022-05-11 16:15       ` Jakub Kicinski
2022-05-03 13:15 ` [PATCH net-next v2 6/7] net: phy: smsc: Cache interrupt mask Lukas Wunner
2022-05-03 22:26   ` Andrew Lunn
2022-05-03 13:15 ` [PATCH net-next v2 7/7] net: phy: smsc: Cope with hot-removal in interrupt handler Lukas Wunner
2022-05-03 22:26   ` 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=YnGrUdmqtzt3Ogn+@lunn.ch \
    --to=andrew@lunn.ch \
    --cc=LinoSanfilippo@gmx.de \
    --cc=UNGLinuxDriver@microchip.com \
    --cc=andre.edich@microchip.com \
    --cc=chf.fritz@googlemail.com \
    --cc=davem@davemloft.net \
    --cc=fntoth@gmail.com \
    --cc=ghojda@yo2urs.ro \
    --cc=hkallweit1@gmail.com \
    --cc=kuba@kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=linux@rempel-privat.de \
    --cc=lukas@wunner.de \
    --cc=martyn.welch@collabora.com \
    --cc=netdev@vger.kernel.org \
    --cc=oneukum@suse.com \
    --cc=p.rosenberger@kunbus.com \
    --cc=pabeni@redhat.com \
    --cc=steve.glendinning@shawell.net \
    /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.