[openwrt/openwrt] realtek: Use atomic poll for aux-mdio commands

LEDE Commits lede-commits at lists.infradead.org
Thu Jan 16 06:01:02 PST 2025


svanheule pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/693c1ea81a314cfa37a60a293568d2e46282b717

commit 693c1ea81a314cfa37a60a293568d2e46282b717
Author: Sander Vanheule <sander at svanheule.net>
AuthorDate: Thu Jan 16 13:23:54 2025 +0100

    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 at svanheule.net>
---
 .../723-net-mdio-Add-Realtek-Otto-auxiliary-controller.patch            | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

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 at 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?");




More information about the lede-commits mailing list