ramips: mt7530 swconfig: fix race condition in register access
authorDENG Qingfang <dqfext@gmail.com>
Sat, 3 Apr 2021 14:59:15 +0000 (22:59 +0800)
committerChuanhong Guo <gch981213@gmail.com>
Wed, 14 Apr 2021 16:00:54 +0000 (00:00 +0800)
commitf99c9cd9c4d4c49a676d678327546fd41690fe2a
tree6976653d304444fb5ef5c4a45ecc7f167038da98
parent679c557e9121f3609346a9f9926130a4e99f18de
ramips: mt7530 swconfig: fix race condition in register access

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>
target/linux/ramips/files/drivers/net/ethernet/ralink/mt7530.c