mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2026-03-14 23:09:45 +01:00
The mt7530_{r,w}32 operation over MDIO uses 3 mdiobus operations and
does not hold a lock, which causes a race condition when multiple
threads try to access a register, they may get unexpected results.
To avoid this, handle the MDIO lock manually, and use the unlocked
__mdiobus_{read,write} in the critical section.
This fixes the "Ghost VLAN" artifact[1] in MT7530/7621 when the VLAN
operation and the swconfig LED link status poll race between each other.
[1] https://forum.openwrt.org/t/mysterious-vlan-ids-on-mt7621-device/64495
Signed-off-by: DENG Qingfang <dqfext@gmail.com>
(cherry picked from commit
|
||
|---|---|---|
| .. | ||
| esw_rt3050.c | ||
| esw_rt3050.h | ||
| ethtool.c | ||
| ethtool.h | ||
| gsw_mt7620.c | ||
| gsw_mt7620.h | ||
| Kconfig | ||
| Makefile | ||
| mdio.c | ||
| mdio.h | ||
| mdio_mt7620.c | ||
| mdio_rt2880.c | ||
| mdio_rt2880.h | ||
| mt7530.c | ||
| mt7530.h | ||
| mtk_eth_soc.c | ||
| mtk_eth_soc.h | ||
| soc_mt7620.c | ||
| soc_rt2880.c | ||
| soc_rt3050.c | ||
| soc_rt3883.c | ||