summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSander Vanheule2025-01-16 12:23:54 +0000
committerSander Vanheule2025-01-16 12:56:55 +0000
commit693c1ea81a314cfa37a60a293568d2e46282b717 (patch)
tree152be5f58340c76f191804ce5f4155dd398ca83d
parent0a7c8ed9d94930ba062c71df79f63c06eeab4543 (diff)
downloadopenwrt-693c1ea81a314cfa37a60a293568d2e46282b717.tar.gz
realtek: Use atomic poll for aux-mdio commands
regmap_read_poll_timeout() relies on usleep_range() to time the polling loop. With the current, rather large, scheduling interval, a short usleep_range() may take a lot longer than expected, causing performance issues. Switch the driver over to using regmap_read_poll_timeout_atomic(), which uses udelay() to time the polling loop. For comparision, the 'ethtool -m <dev>' command is about 10 times faster with the atomic variant. Using 'perf -r10 ethtool -m lan25': - Driver using regmap_read_poll_timeout(): 2.0117 +- 0.0118 seconds time elapsed ( +- 0.58% ) - Driver using regmap_read_poll_timeout_atomic(): 0.1674 +- 0.0250 seconds time elapsed ( +- 14.95% ) Signed-off-by: Sander Vanheule <sander@svanheule.net>
-rw-r--r--target/linux/realtek/patches-6.6/723-net-mdio-Add-Realtek-Otto-auxiliary-controller.patch2
1 files changed, 1 insertions, 1 deletions
diff --git a/target/linux/realtek/patches-6.6/723-net-mdio-Add-Realtek-Otto-auxiliary-controller.patch b/target/linux/realtek/patches-6.6/723-net-mdio-Add-Realtek-Otto-auxiliary-controller.patch
index 430f8f5c00..a58cc496ef 100644
--- a/target/linux/realtek/patches-6.6/723-net-mdio-Add-Realtek-Otto-auxiliary-controller.patch
+++ b/target/linux/realtek/patches-6.6/723-net-mdio-Add-Realtek-Otto-auxiliary-controller.patch
@@ -103,7 +103,7 @@ Signed-off-by: Sander Vanheule <sander@svanheule.net>
+ if (err)
+ return err;
+
-+ err = regmap_read_poll_timeout(ctrl->map, ctrl->cmd_reg, run, (run != cmd), 3, 100);
++ err = regmap_read_poll_timeout_atomic(ctrl->map, ctrl->cmd_reg, run, (run != cmd), 3, 100);
+
+ if ((run & ~mask_volatile) != (cmd & ~mask_volatile)) {
+ dev_err(ctrl->dev, "Command modified. Is offloading still active?");