1
0
Fork 0
forked from mirror/openwrt
openwrt/target/linux
Sharadanand Karanjkar ac6bd8473d realtek: dsa: rework MIB read locking and polling
Some Realtek SoCs do not expose MIB counters as simple registers. Instead,
retrieving counters may require blocking operations or take longer than a
normal register read. This makes the existing approach of direct reads
unsuitable. The existing approach uses spin locks which forbid sleeping
inside their context. But some hardware accesses methods (for example table
reads) might block (sleep).

To handle this, the MIB read path is redesigned with two levels of
locking:

* A global mutex protects updates of MIB data from the hardware. This is
  necessary because reads can occur both in the polling workqueue and from
  ethtool callbacks, also two user threads might call the ethtools
  callbacks. A global mutex helps to avoid parallel reads of the same
  hardware data. For table reads, this is not necessarily required because
  they are already using a table lock. But they are the reason why
  spin-locks can no longer be used (see above).

* A per-port spinlock protects the shared memory region where per-port
  counters are copied. Avoids reading of half copied values in
  .get_stats64()

As part of this change, MIB reads were removed from .get_stats64() since
that callback can be started from an atomic context and must never sleep
(block) in this context. A shared memory region is provided which will be
updated periodically by MIB workqueue and .get_stats64() will simply return
data from the shared memory.

Signed-off-by: Sharadanand Karanjkar <sk@simonwunderlich.de>
Signed-off-by: Sven Eckelmann <se@simonwunderlich.de>
Link: https://github.com/openwrt/openwrt/pull/20631
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-11-16 00:10:56 +01:00
..
airoha airoha: replace AN7583 pinctrl patch with upstream version 2025-11-11 17:20:13 +01:00
apm821xx apm821xx: dts: explicitly set the partition reg size for Netgear WNDR4700 2025-10-19 21:55:33 +02:00
armsr armsr: Make kernel modules depend on target 2025-07-26 01:11:21 +02:00
at91
ath79 ath79: fix MAC addresses on MikroTik RB962UiGS-5HacT2HnT 2025-11-15 11:15:29 +01:00
bcm27xx kernel: bump 6.12 to 6.12.56 2025-11-06 22:06:54 +01:00
bcm47xx bcm47xx: fix no previous prototype error 2025-11-05 08:39:07 +01:00
bcm53xx bcm53xx: use -ENOENT error for TRX parser workaround patch 2025-11-09 12:58:23 +01:00
bcm4908
bmips bmips: fix leds on f@st3864op 2025-10-26 22:53:11 +01:00
d1
econet kernel: bump 6.12 to 6.12.52 2025-10-22 23:35:45 +02:00
gemini gemini: Add module for VSC73xx switches 2025-09-15 23:12:56 +02:00
generic kernel: backport upstream realtek PHY patches 2025-11-15 20:43:19 +01:00
imx kernel: bump 6.6 to 6.6.103 2025-09-01 02:05:24 +02:00
ipq40xx ipq40xx: Add support for Linksys MR6350 2025-11-15 11:28:22 +01:00
ipq806x ipq806x: drop support for kernel 6.6 2025-11-04 19:31:07 +01:00
ixp4xx ixp4xx: Add back Actiontec MI424WR A/C/D 2025-09-26 23:40:40 +02:00
kirkwood kirkwood: kernel: remove 6.6 version support 2025-11-09 22:55:44 +01:00
lantiq kernel: bump 6.12 to 6.12.55 2025-10-25 01:08:12 +02:00
layerscape layerscape: remove 6.6 kernel files 2025-11-04 23:19:28 +01:00
loongarch64 loongarch64: switch to Linux 6.12 by default 2025-09-09 00:10:31 +02:00
malta malta: drop 6.6 support 2025-07-20 23:37:37 +02:00
mediatek mediatek: add mt7987-2p5g-phy-firmware to MT7987 devices 2025-11-14 02:25:15 +00:00
mpc85xx mpc85xx: make kernel 6.12 the default kernel 2025-11-12 19:38:29 +01:00
mvebu kernel: bump 6.12 to 6.12.54 2025-10-22 23:37:13 +02:00
mxs
octeon treewide: replace numbers with GPIO_ACTIVE 2025-10-08 14:26:24 +02:00
omap omap: enable 6.12 testing kernel 2025-08-22 20:18:16 +02:00
pistachio treewide: reset-gpio to reset-gpios 2025-10-08 14:26:24 +02:00
qoriq qoriq: dts: add missing reg property for WatchGuard Firebox M300 2025-10-19 21:55:34 +02:00
qualcommax qualcommax: ipq50xx: Add support for CMCC PZ-L8 2025-11-12 14:34:07 +01:00
qualcommbe qualcommbe: support 10g-qxgmii in QCA8084 PHY driver 2025-11-11 17:21:54 +01:00
ramips ramips: fix support for Cudy r700 2025-11-15 20:37:20 +01:00
realtek realtek: dsa: rework MIB read locking and polling 2025-11-16 00:10:56 +01:00
rockchip rockchip: add Radxa ROCK 2A/F support 2025-11-15 19:56:27 +01:00
sifiveu
siflower generic: backport phylink patches for PCS/PHY caps OPs 2025-10-22 12:29:41 +02:00
starfive kernel: bump 6.12 to 6.12.56 2025-11-06 22:06:54 +01:00
stm32 stm32: drop kernel 6.6 support 2025-10-22 14:56:15 +02:00
sunxi sunxi: cortexa53: refresh kernel config 2025-10-20 00:48:11 +02:00
tegra tegra: promote kernel 6.12 as default 2025-11-11 21:23:14 +01:00
uml
x86 x86/64: enable 8250_DW 2025-10-10 10:32:20 +02:00
zynq zynq: disable unused Vitesse PHY 2025-09-08 14:21:50 +02:00
Makefile