Thread (5 messages) 5 messages, 4 authors, 2021-11-22

Re: Bug/Regression - Ralink RT2800 kernel deference issue since kernel 5.14

From: Felix Fietkau <nbd@nbd.name>
Date: 2021-11-21 19:46:28
Subsystem: mac80211, the rest · Maintainers: Johannes Berg, Linus Torvalds

On 2021-11-12 22:21, Robert W wrote:
Hi,

I have recently tried to upgrade a system to run the 5.14 kernel and
noticed that I was getting hangs on the system which seem to relate to
this wireless dongle which I am running hostapd against to provide a
small AP. Since that time kernel 5.15 was released and I have tested
that kernel as well and the problem persists.  The issue sometimes
occurs within an hour and other times it takes a few hours. I have tried
to narrow down what is causing the issue.  I thought it might be a
change elsewhere outside the mac80211/driver area so I tried to run the
wireless backports 5.15-rc6 on top of the last stable kernel of 5.13 so
as to have the smallest number of changes on the system. The backports
crashes with the same error.  I have included below the netconsole
output and the gdb of the kernel module in question. The capture was
from when I was using the backports, but the error  is the same.  I hope
the pastebins are okay to use on the list.  I did try to get some
assistance on linux-wireless IRC and some one asked for the outputs I
had for the information so I am reusing them here.

The following pastebin is the data sent to a netconsole instance.

https://pastebin.com/UxRrTtUh

The gdb debug of the kernel module suggests this section of code.

https://pastebin.com/iMzxWEVU

I am able to run further tests if required.  I am not a programmer, but
I can usually apply code patches and build the resulting code. Please
let me know if require any further information.
Please try this patch:
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 278945e3e08a..e19f6e246642 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1822,15 +1822,15 @@ static int invoke_tx_handlers_late(struct ieee80211_tx_data *tx)
  	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
  	ieee80211_tx_result res = TX_CONTINUE;
  
+	if (!ieee80211_hw_check(&tx->local->hw, HAS_RATE_CONTROL))
+		CALL_TXH(ieee80211_tx_h_rate_ctrl);
+
  	if (unlikely(info->flags & IEEE80211_TX_INTFL_RETRANSMISSION)) {
  		__skb_queue_tail(&tx->skbs, tx->skb);
  		tx->skb = NULL;
  		goto txh_done;
  	}
  
-	if (!ieee80211_hw_check(&tx->local->hw, HAS_RATE_CONTROL))
-		CALL_TXH(ieee80211_tx_h_rate_ctrl);
-
  	CALL_TXH(ieee80211_tx_h_michael_mic_add);
  	CALL_TXH(ieee80211_tx_h_sequence);
  	CALL_TXH(ieee80211_tx_h_fragment);
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help