]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
rtase: Avoid sleeping in get_stats64()
authorJustin Lai <justinlai0215@realtek.com>
Wed, 3 Jun 2026 06:18:16 +0000 (14:18 +0800)
committerJakub Kicinski <kuba@kernel.org>
Thu, 4 Jun 2026 15:52:24 +0000 (08:52 -0700)
The .ndo_get_stats64 callback must not sleep because it can be
called when reading /proc/net/dev.

rtase_get_stats64() calls rtase_dump_tally_counter(), which polls
the tally counter dump bit with read_poll_timeout(). This may
sleep while waiting for the hardware counter dump to complete.

Use read_poll_timeout_atomic() instead to avoid sleeping in the
get_stats64() path.

Fixes: 079600489960 ("rtase: Implement net_device_ops")
Cc: stable@vger.kernel.org
Signed-off-by: Justin Lai <justinlai0215@realtek.com>
Link: https://patch.msgid.link/20260603061816.31356-1-justinlai0215@realtek.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/realtek/rtase/rtase_main.c

index 6ccbefb5acf246331037763645e8642b2c6a1b47..55105d34bc797793b881c1bb50bd4ab8f10ea910 100644 (file)
@@ -1565,8 +1565,9 @@ static void rtase_dump_tally_counter(const struct rtase_private *tp)
        rtase_w32(tp, RTASE_DTCCR0, cmd);
        rtase_w32(tp, RTASE_DTCCR0, cmd | RTASE_COUNTER_DUMP);
 
-       err = read_poll_timeout(rtase_r32, val, !(val & RTASE_COUNTER_DUMP),
-                               10, 250, false, tp, RTASE_DTCCR0);
+       err = read_poll_timeout_atomic(rtase_r32, val,
+                                      !(val & RTASE_COUNTER_DUMP),
+                                      10, 250, false, tp, RTASE_DTCCR0);
 
        if (err == -ETIMEDOUT)
                netdev_err(tp->dev, "error occurred in dump tally counter\n");