Re: [PATCH net-next v3 3/3] net: dsa: qca8k: fail mgmt Ethernet MDIO access on busy wait errors
From: Andrew Lunn
Date: Mon Oct 05 2026 - 13:10:18 EST
On Sat, Oct 03, 2026 at 07:24:04PM +0200, Yongzhao Chen wrote:
> qca8k_phy_eth_command() polls MASTER_CTRL over management Ethernet until
> BUSY clears, but only bails out when the poll timed out and the last
> poll request also failed. If every request succeeds while BUSY stays
> set, the -ETIMEDOUT is dropped. A read then returns MASTER_CTRL data
> from a transaction that has not completed, and
> qca8k_internal_mdio_read() does not fall back to the MDIO bus.
>
> A failed poll request does not stop the loop either.
> qca8k_phy_eth_busy_wait() leaves the value unchanged on failure, so the
> BUSY test then uses the previous value, or an uninitialized one if the
> first request fails.
>
> Stop polling when a request fails and return the poll error or timeout.
> The poll-error path also leaked read_skb, which is only consumed when the
> read request is sent; free it on this path.
>
> The Sashiko review of v1 identified the dropped timeout. A userspace
> model of the driver's functions reproduces it and the poll-error path
> with scripted BUSY responses and failed poll requests; these cases pass
> after this change.
>
> The polling loop comes from commit 2cd548566384 ("net: dsa: qca8k: add
> support for phy read/write with mgmt Ethernet").
>
> Signed-off-by: Yongzhao Chen <yongzhao.derek@xxxxxxxxx>
Reviewed-by: Andrew Lunn <andrew@xxxxxxx>
Andrew