[PATCH net v2] rtase: Reset TX subqueue when clearing TX ring

Subsystems: networking drivers, rtase ethernet driver, the rest

STALE61d

4 messages, 3 authors, 2026-06-04 · open the first message on its own page

[PATCH net v2] rtase: Reset TX subqueue when clearing TX ring

From: Justin Lai <justinlai0215@realtek.com>
Date: 2026-06-02 11:47:21

rtase_tx_clear() clears the TX ring and resets the ring indexes.
However, the TX queue state and BQL accounting are not reset at
the same time.

This may leave __QUEUE_STATE_STACK_XOFF asserted after
rtase_sw_reset(), preventing new TX packets from being scheduled.

Reset the TX subqueue when clearing the TX ring so the TX queue
state and BQL accounting are restored together.

Fixes: 5a2a2f15244c ("rtase: Implement the rtase_down function")
Cc: stable@vger.kernel.org
Signed-off-by: Justin Lai <justinlai0215@realtek.com>
---
v1 -> v2:
- Target net tree.
- Add Fixes tag.
---
 drivers/net/ethernet/realtek/rtase/rtase_main.c | 2 ++
 1 file changed, 2 insertions(+)
diff --git a/drivers/net/ethernet/realtek/rtase/rtase_main.c b/drivers/net/ethernet/realtek/rtase/rtase_main.c
index ef13109c49cf..6ccbefb5acf2 100644
--- a/drivers/net/ethernet/realtek/rtase/rtase_main.c
+++ b/drivers/net/ethernet/realtek/rtase/rtase_main.c
@@ -239,6 +239,8 @@ static void rtase_tx_clear(struct rtase_private *tp)
 		rtase_tx_clear_range(ring, ring->dirty_idx, RTASE_NUM_DESC);
 		ring->cur_idx = 0;
 		ring->dirty_idx = 0;
+
+		netdev_tx_reset_subqueue(tp->dev, i);
 	}
 }
 
-- 
2.40.1

RE: [PATCH net v2] rtase: Reset TX subqueue when clearing TX ring

From: Justin Lai <justinlai0215@realtek.com>
Date: 2026-06-03 03:22:00

Justin Lai [off-list ref] wrote:
quoted hunk
rtase_tx_clear() clears the TX ring and resets the ring indexes.
However, the TX queue state and BQL accounting are not reset at the same
time.

This may leave __QUEUE_STATE_STACK_XOFF asserted after rtase_sw_reset(),
preventing new TX packets from being scheduled.

Reset the TX subqueue when clearing the TX ring so the TX queue state and
BQL accounting are restored together.

Fixes: 5a2a2f15244c ("rtase: Implement the rtase_down function")
Cc: stable@vger.kernel.org
Signed-off-by: Justin Lai <justinlai0215@realtek.com>
---
v1 -> v2:
- Target net tree.
- Add Fixes tag.
---
 drivers/net/ethernet/realtek/rtase/rtase_main.c | 2 ++
 1 file changed, 2 insertions(+)
diff --git a/drivers/net/ethernet/realtek/rtase/rtase_main.c
b/drivers/net/ethernet/realtek/rtase/rtase_main.c
index ef13109c49cf..6ccbefb5acf2 100644
--- a/drivers/net/ethernet/realtek/rtase/rtase_main.c
+++ b/drivers/net/ethernet/realtek/rtase/rtase_main.c
@@ -239,6 +239,8 @@ static void rtase_tx_clear(struct rtase_private *tp)
 		rtase_tx_clear_range(ring, ring->dirty_idx, RTASE_NUM_DESC);
 		ring->cur_idx = 0;
 		ring->dirty_idx = 0;
+
+		netdev_tx_reset_subqueue(tp->dev, i);
 	}
 }

--
2.40.1
Adding Olek, who was accidentally missed from the CC list.

Re: [PATCH net v2] rtase: Reset TX subqueue when clearing TX ring

From: Alexander Lobakin <aleksander.lobakin@intel.com>
Date: 2026-06-03 14:22:17

From: Justin Lai <justinlai0215@realtek.com>
Date: Wed, 3 Jun 2026 03:21:34 +0000
Justin Lai [off-list ref] wrote:
quoted
rtase_tx_clear() clears the TX ring and resets the ring indexes.
However, the TX queue state and BQL accounting are not reset at the same
time.

This may leave __QUEUE_STATE_STACK_XOFF asserted after rtase_sw_reset(),
preventing new TX packets from being scheduled.

Reset the TX subqueue when clearing the TX ring so the TX queue state and
BQL accounting are restored together.

Fixes: 5a2a2f15244c ("rtase: Implement the rtase_down function")
Cc: stable@vger.kernel.org
Signed-off-by: Justin Lai <justinlai0215@realtek.com>
---
v1 -> v2:
- Target net tree.
- Add Fixes tag.
---
 drivers/net/ethernet/realtek/rtase/rtase_main.c | 2 ++
 1 file changed, 2 insertions(+)
diff --git a/drivers/net/ethernet/realtek/rtase/rtase_main.c
b/drivers/net/ethernet/realtek/rtase/rtase_main.c
index ef13109c49cf..6ccbefb5acf2 100644
--- a/drivers/net/ethernet/realtek/rtase/rtase_main.c
+++ b/drivers/net/ethernet/realtek/rtase/rtase_main.c
@@ -239,6 +239,8 @@ static void rtase_tx_clear(struct rtase_private *tp)
 		rtase_tx_clear_range(ring, ring->dirty_idx, RTASE_NUM_DESC);
 		ring->cur_idx = 0;
 		ring->dirty_idx = 0;
+
+		netdev_tx_reset_subqueue(tp->dev, i);
 	}
 }

--
2.40.1
Adding Olek, who was accidentally missed from the CC list.

Reviewed-by: Alexander Lobakin <aleksander.lobakin@intel.com>

Thanks,
Olek

Re: [PATCH net v2] rtase: Reset TX subqueue when clearing TX ring

From: patchwork-bot+netdevbpf@kernel.org
Date: 2026-06-04 16:00:28

Hello:

This patch was applied to netdev/net.git (main)
by Jakub Kicinski [off-list ref]:

On Tue, 2 Jun 2026 19:46:59 +0800 you wrote:
rtase_tx_clear() clears the TX ring and resets the ring indexes.
However, the TX queue state and BQL accounting are not reset at
the same time.

This may leave __QUEUE_STATE_STACK_XOFF asserted after
rtase_sw_reset(), preventing new TX packets from being scheduled.

[...]
Here is the summary with links:
  - [net,v2] rtase: Reset TX subqueue when clearing TX ring
    https://git.kernel.org/netdev/net/c/ab1ecaabe74b

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help