Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WI-FI is unstable at 2.4 GHz #793

Closed
ShredRum opened this issue Jun 29, 2023 · 78 comments
Closed

WI-FI is unstable at 2.4 GHz #793

ShredRum opened this issue Jun 29, 2023 · 78 comments

Comments

@ShredRum
Copy link

ShredRum commented Jun 29, 2023

Hello, I have a Xiaomi router 4A (R4AC) with OpenWrt installed SNAPSHOT r23454-01885bc6a3 / LuCI Master git-23.158.78004-23a246e

From time to time, with a Wi-Fi load of 2.4 GHz, the network starts to disappear, after which it appears again after a couple of seconds. There is no information in the log other than the actual disconnection and connection of devices to Wi-Fi. I also managed to catch a driver crash once, but I don't think it could be related to the problem (it never showed up again).

Disabling WMM mode helps, but the network speed drops below 20 Mbps.

This problem does not appear on a 5 GHz network.

Below I will provide the crash log of the driver, but keep in mind that it is not reproducible, and appeared only 1 time.

Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.656151] ------------[ cut here ]------------
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.660885] WARNING: CPU: 0 PID: 511 at target-mipsel_24kc_musl/linux-ramips_mt76x8/mt76-2023-05-13-969b7b5e/mt7603/mac.c:208 mt7603_filter_tx+0x178/0x180 [mt7603e]
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.675870] Modules linked in: pppoe ppp_async nft_fib_inet nf_flow_table_ipv6 nf_flow_table_ipv4 nf_flow_table_inet pppox ppp_generic nft_reject_ipv6 nft_reject_ipv4 nft_reject_inet nft_reject nft_redir nft_quota nft_objref nft_numgen nft_nat nft_masq nft_log nft_limit nft_hash nft_flow_offload nft_fib_ipv6 nft_fib_ipv4 nft_fib nft_ct nft_counter nft_chain_nat nf_tables nf_nat nf_flow_table nf_conntrack mt76x2e mt76x2_common mt76x02_lib mt7603e mt76 mac80211 lzo cfg80211 slhc nfnetlink nf_reject_ipv6 nf_reject_ipv4 nf_log_syslog nf_defrag_ipv6 nf_defrag_ipv4 lzo_rle lzo_decompress lzo_compress libcrc32c crc_ccitt compat sha512_generic sha256_generic libsha256 seqiv jitterentropy_rng drbg hmac cmac crypto_acompress leds_gpio gpio_button_hotplug crc32c_generic
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.744421] CPU: 0 PID: 511 Comm: napi/phy0-3 Not tainted 5.15.118 #0
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.750972] Stack : 00000000 00000000 81a39c7c 808e0000 80720000 8066c410 80e33d00 8071de83
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.759499] 808e33b4 000001ff 00000000 80061ae4 80665a7c 00000001 81a39c38 1a20d335
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.768015] 00000000 00000000 8066c410 81a39ad0 ffffefff 00000000 00000000 ffffffea
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.776537] 00000000 81a39adc 000000d7 807242f8 808e0000 00000009 00000000 81a04688
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.785059] 00000009 00000000 00003a98 80000000 00000018 80340db8 00000000 808e0000
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.793577] ...
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.796060] Call Trace:
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.798535] [<8000702c>] show_stack+0x28/0xf0
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.802998] [<800261c0>] __warn+0x9c/0x124
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.807165] [<800262a4>] warn_slowpath_fmt+0x5c/0xac
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.812230] [<81a04688>] mt7603_filter_tx+0x178/0x180 [mt7603e]
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.818272] [<81a04818>] mt7603_wtbl_set_ps+0x12c/0x134 [mt7603e]
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.824492] [<81a01a90>] mt7603_sta_ps+0x38/0x434 [mt7603e]
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.830184] [<81a75984>] mt76_rx_poll_complete+0x520/0x638 [mt76]
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.836417] [<81a72288>] mt76_dma_rx_poll+0x284/0x4fc [mt76]
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.842204] [<803f773c>] __napi_poll+0x70/0x1f8
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.846817] [<803f7a00>] napi_threaded_poll+0x13c/0x188
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.852145] [<8004604c>] kthread+0x140/0x164
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.856505] [<80002478>] ret_from_kernel_thread+0x14/0x1c
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.862005]
Thu Jun 29 18:54:00 2023 kern.warn kernel: [ 210.863519] ---[ end trace 64b883a3276bd278 ]---

@mrbbbaixue
Copy link

Same issue on GL MT300N v2 with mt7628.

@lukasz1992
Copy link

known issue, because of faulty ethernet driver

@nbd168
Copy link
Member

nbd168 commented Jul 27, 2023

Please try latest OpenWrt master or 23.05 branch

@DragonBluep
Copy link

@nbd168
On MT7628, when I use P2P software download a big file (such as Windows image), I found that watchdog reset is constantly triggered. The trigger source seems to be RESET_CAUSE_RX_PSE_BUSY. I didn't test MT7603 but I remember it was always stable.

mt76/mt7603/mt7603.h

Lines 91 to 99 in c19b62f

enum mt7603_reset_cause {
RESET_CAUSE_TX_HANG,
RESET_CAUSE_TX_BUSY,
RESET_CAUSE_RX_BUSY,
RESET_CAUSE_BEACON_STUCK,
RESET_CAUSE_RX_PSE_BUSY,
RESET_CAUSE_MCU_HANG,
RESET_CAUSE_RESET_FAILED,
__RESET_CAUSE_MAX

My debug patch:

diff --git a/mt7603/mac.c b/mt7603/mac.c
index 99ae0805..c7d8d851 100644
--- a/mt7603/mac.c
+++ b/mt7603/mac.c
@@ -1425,6 +1425,7 @@ static void mt7603_mac_watchdog_reset(struct mt7603_dev *dev)
 	u32 mask = dev->mt76.mmio.irqmask;
 	int i;
 
+	dev_err(dev->mt76.dev, "Watchdog Reset\n");
 	ieee80211_stop_queues(dev->mt76.hw);
 	set_bit(MT76_RESET, &dev->mphy.state);
 
@@ -1441,6 +1442,7 @@ static void mt7603_mac_watchdog_reset(struct mt7603_dev *dev)
 
 	mt7603_beacon_set_timer(dev, -1, 0);
 
+	dev_err(dev->mt76.dev, "Reset Cause: %d\n", dev->cur_reset_cause);
 	if (dev->reset_cause[RESET_CAUSE_RESET_FAILED] ||
 	    dev->cur_reset_cause == RESET_CAUSE_RX_PSE_BUSY ||
 	    dev->cur_reset_cause == RESET_CAUSE_BEACON_STUCK ||

Kernel log:

[  255.724995] mt76_wmac 10300000.wmac: Watchdog Reset
[  255.730047] mt76_wmac 10300000.wmac: Reset Cause: 4
[  256.874921] mt76_wmac 10300000.wmac: Watchdog Reset
[  256.879999] mt76_wmac 10300000.wmac: Reset Cause: 4
[  258.554963] mt76_wmac 10300000.wmac: Watchdog Reset
[  258.559996] mt76_wmac 10300000.wmac: Reset Cause: 4
[  260.204991] mt76_wmac 10300000.wmac: Watchdog Reset
[  260.210027] mt76_wmac 10300000.wmac: Reset Cause: 4
[  266.015052] mt76_wmac 10300000.wmac: Watchdog Reset
[  266.020140] mt76_wmac 10300000.wmac: Reset Cause: 4
[  267.145089] mt76_wmac 10300000.wmac: Watchdog Reset
[  267.150113] mt76_wmac 10300000.wmac: Reset Cause: 4
[  271.357276] mt76_wmac 10300000.wmac: Watchdog Reset
[  271.366310] mt76_wmac 10300000.wmac: Reset Cause: 4
[  273.365168] mt76_wmac 10300000.wmac: Watchdog Reset
[  273.370196] mt76_wmac 10300000.wmac: Reset Cause: 4
[  274.555158] mt76_wmac 10300000.wmac: Watchdog Reset
[  274.560188] mt76_wmac 10300000.wmac: Reset Cause: 4
[  276.566903] mt76_wmac 10300000.wmac: Watchdog Reset
[  276.576365] mt76_wmac 10300000.wmac: Reset Cause: 4
[  278.177274] mt76_wmac 10300000.wmac: Watchdog Reset
[  278.193835] mt76_wmac 10300000.wmac: Reset Cause: 4
[  281.685327] mt76_wmac 10300000.wmac: Watchdog Reset
[  281.690377] mt76_wmac 10300000.wmac: Reset Cause: 4
[  282.875285] mt76_wmac 10300000.wmac: Watchdog Reset
[  282.880320] mt76_wmac 10300000.wmac: Reset Cause: 4
[  285.325253] mt76_wmac 10300000.wmac: Watchdog Reset
[  285.330846] mt76_wmac 10300000.wmac: Reset Cause: 4
[  287.906450] mt76_wmac 10300000.wmac: Watchdog Reset
[  287.926172] mt76_wmac 10300000.wmac: Reset Cause: 4
[  290.345221] mt76_wmac 10300000.wmac: Watchdog Reset
[  290.350239] mt76_wmac 10300000.wmac: Reset Cause: 4
[  555.940101] mt76_wmac 10300000.wmac: Watchdog Reset
[  555.945122] mt76_wmac 10300000.wmac: Reset Cause: 4
[  560.230101] mt76_wmac 10300000.wmac: Watchdog Reset
[  560.235127] mt76_wmac 10300000.wmac: Reset Cause: 4
[  561.360088] mt76_wmac 10300000.wmac: Watchdog Reset
[  561.365111] mt76_wmac 10300000.wmac: Reset Cause: 4

@DragonBluep
Copy link

This function looks suspicious.

mt76/mt7603/mac.c

Line 1569 in c19b62f

static bool mt7603_rx_pse_busy(struct mt7603_dev *dev)

The vendor driver will check it 10 times before reset and will reset the pse counter if the 0x4244 register meets some conditions.

MT7603 vendor driver

In mt7603_wifi\common\cmm_data_pci.c

BOOLEAN MonitorRxPse(RTMP_ADAPTER *pAd)
{
	UINT32 RemapBase, RemapOffset;
	UINT32 Value;
	UINT32 RestoreValue;

	if (pAd->RxPseCheckTimes < 10)
	{
		/* Check RX FIFO if not ready */
		RTMP_IO_WRITE32(pAd, 0x4244, 0x28000000);
		RTMP_IO_READ32(pAd, 0x4244, &Value);
		if ((Value & (1 << 8)) != 0)
		{
			pAd->RxPseCheckTimes = 0;
			return FALSE;
		}
		else
		{
			RTMP_IO_READ32(pAd, MCU_PCIE_REMAP_2, &RestoreValue);
			RemapBase = GET_REMAP_2_BASE(0x800c006c) << 19;
			RemapOffset = GET_REMAP_2_OFFSET(0x800c006c);
			RTMP_IO_WRITE32(pAd, MCU_PCIE_REMAP_2, RemapBase);
	
			RTMP_IO_WRITE32(pAd, 0x80000 + RemapOffset, 3);

			RTMP_IO_READ32(pAd, 0x80000 + RemapOffset, &Value);
			
			if(((Value & (0x8001 << 16)) == (0x8001 << 16)) ||
					((Value & (0xe001 << 16)) == (0xe001 << 16)))
			{
				pAd->RxPseCheckTimes++;
				RTMP_IO_WRITE32(pAd, MCU_PCIE_REMAP_2, RestoreValue);
				return FALSE;
			}
			else
			{
				pAd->RxPseCheckTimes = 0;
				RTMP_IO_WRITE32(pAd, MCU_PCIE_REMAP_2, RestoreValue);
				return FALSE;
			}
		}
	}
	else
	{
		pAd->RxPseCheckTimes = 0;
		return TRUE;
	}
}
MT7628 vendor driver

In mt7628_wifi\hw_ctrl\cmm_chip_mt.c


BOOLEAN MonitorRxPse(RTMP_ADAPTER *pAd)
{
	UINT32 RemapBase, RemapOffset;
	UINT32 Value;
	UINT32 RestoreValue;

#ifdef DMA_RESET_SUPPORT	
	RTMP_IO_READ32(pAd, 0x816c, &Value);


	//AC
	if((Value & (1 << 2)) == (1 << 2))
	{
		//let PSE reset done to clear
		//Value &= ~(1 << 2);
		//RTMP_IO_WRITE32(pAd, 0x816c, Value);
		pAd->ACHitCount  ++;
		return TRUE;
	}

	if((Value & (1 << 3)) == (1 << 3))
	{
		//let PSE reset done to clear
		//Value &= ~(1 << 3);
		//RTMP_IO_WRITE32(pAd, 0x816c, Value);
		pAd->MgtHitCount  ++;
		return TRUE;
	}	
#endif /* DMA_RESET_SUPPORT */

	if (pAd->RxPseCheckTimes < 10)
	{
		/*  Check RX FIFO if not ready */
		MAC_IO_WRITE32(pAd, 0x4244, 0x98000000);
		MAC_IO_READ32(pAd, 0x4244, &Value);

		if ((Value & (1 << 9)) != 0)
		{
			pAd->RxPseCheckTimes = 0;
			return FALSE;
		}
		else
		{
			MAC_IO_READ32(pAd, MCU_PCIE_REMAP_2, &RestoreValue);
			RemapBase = GET_REMAP_2_BASE(0x800c006c) << 19;
			RemapOffset = GET_REMAP_2_OFFSET(0x800c006c);
			MAC_IO_WRITE32(pAd, MCU_PCIE_REMAP_2, RemapBase);
	
			MAC_IO_WRITE32(pAd, 0x80000 + RemapOffset, 3);

			MAC_IO_READ32(pAd, 0x80000 + RemapOffset, &Value);
		
			if(((Value & (0x8001 << 16)) == (0x8001 << 16)) ||
					((Value & (0xe001 << 16)) == (0xe001 << 16)) ||
					((Value & (0x4001 << 16)) == (0x4001 << 16)))
			{
				if (((Value & (0x8001 << 16)) == (0x8001 << 16)) ||
					((Value & (0xe001 << 16)) == (0xe001 << 16)))
				{
					pAd->PSETriggerType1Count++;
				}

				if ((Value & (0x4001 << 16)) == (0x4001 << 16))
				{
					pAd->PSETriggerType2Count++;
				}

				pAd->RxPseCheckTimes++;
				MAC_IO_WRITE32(pAd, MCU_PCIE_REMAP_2, RestoreValue);
				return FALSE;
			}
			else
			{
				pAd->RxPseCheckTimes = 0;
				MAC_IO_WRITE32(pAd, MCU_PCIE_REMAP_2, RestoreValue);
				return FALSE;
			}
		}
	}
	else
	{
		pAd->RxPseCheckTimes = 0;
		return TRUE;
	}
}

@nbd168
Copy link
Member

nbd168 commented Jul 27, 2023

mt76 will also check this multiple times. The function is called via a wrapper that keeps the counter.
Could you please test if this patch helps? https://nbd.name/p/e626cc2c

@DragonBluep
Copy link

Sadly it doesn't work. Maybe we need additional check for 0x4244 register?

[   62.689766] br-lan: port 3(phy1-ap0) entered forwarding state
[  198.718494] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  200.529022] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  204.438592] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4

@nbd168
Copy link
Member

nbd168 commented Jul 27, 2023

Could you please apply this patch for printing register debug values and show me the output around reset?
https://nbd.name/p/78569cfa

@DragonBluep
Copy link

Sure, this is the log:
[  100.853934] PSE debug val = 4001
[  100.962783] PSE debug val = 4001
[  101.072783] PSE debug val = 4001
[  101.182949] PSE debug val = 4001
[  101.292749] PSE debug val = 4001
[  101.402753] PSE debug val = 4001
[  101.512788] PSE debug val = 4001
[  101.622744] PSE debug val = 4001
[  101.732764] PSE debug val = 4001
[  101.842738] PSE debug val = 4001
[  101.846138] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  102.274322] PSE debug val = e001
[  102.384031] PSE debug val = e401
[  102.494494] PSE debug val = e401
[  102.604414] PSE debug val = e001
[  102.714555] PSE debug val = e401
[  102.825737] PSE debug val = e001
[  102.935995] PSE debug val = e401
[  103.043596] PSE debug val = 4001
[  103.152745] PSE debug val = 4001
[  103.262717] PSE debug val = 4001
[  103.266069] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  103.492778] PSE debug val = e001
[  103.603092] PSE debug val = e001
[  103.712767] PSE debug val = e001
[  103.822739] PSE debug val = e001
[  103.932752] PSE debug val = e001
[  104.042745] PSE debug val = e001
[  104.152742] PSE debug val = e001
[  104.262711] PSE debug val = e001
[  104.372809] PSE debug val = e001
[  104.482742] PSE debug val = e001
[  104.486332] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  104.733502] PSE debug val = e401
[  104.845526] PSE debug val = e401
[  104.953593] PSE debug val = e001
[  105.065287] PSE debug val = e001
[  105.173835] PSE debug val = e401
[  105.283227] PSE debug val = 4001
[  105.392734] PSE debug val = 4001
[  105.502740] PSE debug val = 4001
[  105.612763] PSE debug val = 4001
[  105.722741] PSE debug val = 4001
[  105.726088] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  106.065122] PSE debug val = e001
[  106.175199] PSE debug val = e401
[  106.293695] PSE debug val = e001
[  106.405997] PSE debug val = e401
[  106.524875] PSE debug val = e401
[  106.634908] PSE debug val = e401
[  106.746676] PSE debug val = e401
[  106.854736] PSE debug val = e401
[  106.983699] PSE debug val = e401
[  107.094097] PSE debug val = 4401
[  107.122792] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  107.395741] PSE debug val = e401
[  107.505552] PSE debug val = e401
[  107.620204] PSE debug val = e001
[  107.737359] PSE debug val = e401
[  107.844637] PSE debug val = e401
[  107.953569] PSE debug val = 4401
[  108.066664] PSE debug val = e001
[  108.178885] PSE debug val = e401
[  108.283915] PSE debug val = e001
[  108.394367] PSE debug val = 4401
[  108.428654] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  108.624498] PSE debug val = e401
[  108.735373] PSE debug val = e001
[  108.844878] PSE debug val = e401
[  108.958689] PSE debug val = e401
[  109.065765] PSE debug val = e401
[  109.174966] PSE debug val = e401
[  109.289276] PSE debug val = e001
[  109.503474] PSE debug val = e401
[  109.613434] PSE debug val = 4051
[  109.733900] PSE debug val = e001
[  109.843772] PSE debug val = e001
[  110.069388] PSE debug val = e401
[  110.184989] PSE debug val = 8001
[  110.404944] PSE debug val = e001
[  110.631664] PSE debug val = e401
[  110.744427] PSE debug val = e401
[  110.854842] PSE debug val = e001
[  110.963290] PSE debug val = 4001
[  111.072757] PSE debug val = 4001
[  111.182957] PSE debug val = 4001
[  111.292701] PSE debug val = 4001
[  111.402695] PSE debug val = 4001
[  111.512691] PSE debug val = 4001
[  111.622692] PSE debug val = 4001
[  111.626043] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  111.914098] PSE debug val = e401
[  112.043549] PSE debug val = 4051
[  112.157400] PSE debug val = e401
[  112.265426] PSE debug val = e401
[  112.373576] PSE debug val = e001
[  112.493358] PSE debug val = e401
[  112.605042] PSE debug val = e401
[  112.831865] PSE debug val = 4001
[  113.055903] PSE debug val = e001
[  113.167618] PSE debug val = e401
[  113.279334] PSE debug val = e401
[  113.616259] PSE debug val = e001
[  113.843741] PSE debug val = e401
[  113.964444] PSE debug val = 4001
[  114.072777] PSE debug val = 4001
[  114.182783] PSE debug val = 4001
[  114.292769] PSE debug val = 4001
[  114.402684] PSE debug val = 4001
[  114.512686] PSE debug val = 4001
[  114.622687] PSE debug val = 4001
[  114.732686] PSE debug val = 4001
[  114.842698] PSE debug val = 4001
[  114.846052] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  114.992680] PSE debug val = e001
[  115.102665] PSE debug val = e001
[  115.212686] PSE debug val = e001
[  115.322665] PSE debug val = e001
[  115.432689] PSE debug val = e001
[  115.542663] PSE debug val = e001
[  115.652666] PSE debug val = e001
[  115.762664] PSE debug val = e001
[  115.872664] PSE debug val = e001
[  115.982702] PSE debug val = e001
[  115.986176] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4

@nbd168
Copy link
Member

nbd168 commented Jul 27, 2023

I finally understand the bug now, and this patch should fix it: https://nbd.name/p/4ece22b2

The way it works is this: in the vendor code the function on its own does not detect a rx hang, it only detects if rx is busy, which could also happen due to normal rx activity. The missing part was that in the vendor driver it resets the counter on rx irqs (which indicate real activity), so that it only issues a reset if rx really encountered a hang.

In my patch, I adjusted the mt76 code accordingly.

@DragonBluep
Copy link

DragonBluep commented Jul 27, 2023

The watchdog will still reset the chip. It takes approximately one minute to recover from the hang state. It only took about one second before.
My chip version is MT7628 E2, MT7628AN ver:1 eco:2

[  143.792548] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  228.882903] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  585.630345] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  677.851328] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  752.621170] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4

@DragonBluep
Copy link

I tried to skip the RX PSE reset with your patch https://nbd.name/p/4ece22b2, but it would cause the client to disconnect after reset request.

--- a/mt7603/mac.c
+++ b/mt7603/mac.c
@@ -1425,6 +1425,10 @@ static void mt7603_mac_watchdog_reset(struct mt7603_dev *dev)
 	u32 mask = dev->mt76.mmio.irqmask;
 	int i;
 
+	dev_err(dev->mt76.dev, "Watchdog Reset, Reset Cause: %d\n", dev->cur_reset_cause);
+	if (dev->cur_reset_cause == RESET_CAUSE_RX_PSE_BUSY)
+		return;
+
 	ieee80211_stop_queues(dev->mt76.hw);
 	set_bit(MT76_RESET, &dev->mphy.state);
[  166.539323] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  167.529616] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 3

Therefore, I believe that reset is the expected behavior. It must be something else caused the RX_PSE_BUSY. Perhaps in some functions, MT7628 requires a different operation than MT7603.

@nbd168
Copy link
Member

nbd168 commented Jul 28, 2023

I found a few more 7628 specific things, here's a new combined patch: https://nbd.name/p/883e48cf

@DragonBluep
Copy link

Thanks for your hard work. It seems that we still need some fixes. With the patch https://nbd.name/p/883e48cf, when I start downloading something, the WiFi signal/SSID will disappear about 30 seconds after watchdog reset.

[   44.981696] br-lan: port 3(phy1-ap0) entered forwarding state
[  156.061964] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  235.007446] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  298.056256] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4

@nbd168
Copy link
Member

nbd168 commented Jul 28, 2023

Sorry, had a copy&paste bug in there. Fixed version: https://nbd.name/p/40608ec5

@DragonBluep
Copy link

Still no lucky. SSID disappear after reset.
WAN <--> MT7628 <--> Client

[   92.200741] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  203.249635] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  307.915254] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  377.955877] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
  1. I tried to run iperf3 on MT7628 and perform a pressure test, but this did not trigger a reset.
  2. I also tried to use MT7612 as wwan and then download data via mt7628 wireless, still can't trigger a reset.
    AP <--> MT7612 <--> MT7628 <--> Client

@Linaro1985 suspects that there are some DMA issues with the Ethernet driver of mt7628. openwrt/openwrt#10074 (comment)
Is it possible that there are some DMA conflicts between mt76 and OpenWrt ethernet driver.

@DragonBluep
Copy link

I found mt7628 vendor driver has some additional DMA related code in APCheckBcnQHandler() comparing to the mt7603.

#define DMA_FQCR0        (WF_DMA_BASE + 0x008)   /* 0x21c08 */
#define DMA_FQCR0_FQ_EN                     BIT31
#define DMA_FQCR0_FQ_STS                    BIT30
#define DMA_FQCR0_FQ_MODE                   BIT29
#define DMA_FQCR0_FQ_DEST_QID_MASK          (0x1f)
#define DMA_FQCR0_FQ_DEST_QID(p)            (((p) & DMA_FQCR0_FQ_DEST_QID_MASK) << 24)
#define DMA_FQCR0_FQ_DEST_PID_MASK          (0x3)
#define DMA_FQCR0_FQ_DEST_PID(p)            (((p) & DMA_FQCR0_FQ_DEST_PID_MASK) << 22)
#define DMA_FQCR0_FQ_TARG_QID_MASK          (0x1f)
#define DMA_FQCR0_FQ_TARG_QID(p)            (((p) & DMA_FQCR0_FQ_TARG_QID_MASK) << 16)
#define DMA_FQCR0_FQ_TARG_OM_MASK           (0x3f)
#define DMA_FQCR0_FQ_TARG_OM(p)             (((p) & DMA_FQCR0_FQ_TARG_OM_MASK) << 8)
#define DMA_FQCR0_FQ_TARG_WIDX_MASK         (0xff)
#define DMA_FQCR0_FQ_TARG_WIDX(p)           (((p) & DMA_FQCR0_FQ_TARG_WIDX_MASK))

#define DMA_FQCR1        (WF_DMA_BASE + 0x00c)   /* 0x21c0c */
#define RXSM_GROUP1_EN	(1 << 11)
#define RXSM_GROUP2_EN	(1 << 12)
#define RXSM_GROUP3_EN	(1 << 13)

@nbd168
Copy link
Member

nbd168 commented Jul 28, 2023

I did more testing and rework to make the reset and the beacon stuck check more reliable. Please try this patch: https://nbd.name/p/54045fb4

@DragonBluep
Copy link

It is still broken. I used top to observe CPU usage and found that every time the idle reach to 0%, the PSE watchdog reset will definitely be triggered. But if I use an (MT7628 ethernet +) MT7612 PCIe NIC for testing, even if the CPU usage reaches 100%, it still works.

Mem: 39184K used, 18068K free, 164K shrd, 0K buff, 13080K cached
CPU:   1% usr  30% sys   0% nic   0% idle   0% io   0% irq  66% sirq
Load average: 0.32 0.31 0.22 2/57 3916
  PID  PPID USER     STAT   VSZ %VSZ %CPU COMMAND
  452     2 root     SW       0   0%  41% [mt76-tx phy0]
   10     2 root     RW       0   0%  31% [ksoftirqd/0]
  444     2 root     SW       0   0%  19% [napi/phy0-3]
Mem: 39184K used, 18068K free, 164K shrd, 0K buff, 13080K cached
CPU:   1% usr  30% sys   0% nic   0% idle   0% io   0% irq  66% sirq
Load average: 0.32 0.31 0.22 2/57 3916
  PID  PPID USER     STAT   VSZ %VSZ %CPU COMMAND
  452     2 root     SW       0   0%  41% [mt76-tx phy0]
   10     2 root     RW       0   0%  31% [ksoftirqd/0]
  444     2 root     SW       0   0%  19% [napi/phy0-3]

------
[  404.894713] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  476.055148] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  671.444612] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  761.674225] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4
[  946.692878] mt76_wmac 10300000.wmac: Watchdog Reset, Reset Cause: 4

@nbd168
Copy link
Member

nbd168 commented Jul 28, 2023

When it triggers, does it break the connection?

@DragonBluep
Copy link

When it triggers, does it break the connection?

Yes, the SSID will disappear several seconds.

@nbd168
Copy link
Member

nbd168 commented Jul 28, 2023

Does bumping MT7603_RX_RING_SIZE in mt7603.h to 256 help?

@DragonBluep
Copy link

DragonBluep commented Jul 28, 2023

Does bumping MT7603_RX_RING_SIZE in mt7603.h to 256 help?

Edit:
The same behavior as before.

@DragonBluep
Copy link

Update:
The reset log appears after the SSID disappears.
Firstly, the WiFi SSID disappears when the CPU load reaches 100%. After hanging for 30+ seconds, the PSE reset is triggered, and finally the SSID is immediately restored again after reset.

@Dahhyunnee
Copy link

Hope this issue will have a fix soon. 5G wifi is the only stable connection as of now.

@DragonBluep
Copy link

@nbd168 Hi! Finally, I know what caused the PSE reset. It's WiFi fragmentation threshold.

Setting any frag value instead of using the default one (off?) can avoid PSE reset. I'm not sure if this is a problem with mt76 or some OpenWrt core packages.
image

Fragmentation Threshold default/off 1024 2346 4096
PSE Reset Counter (download ~1.5 GiB data) 27 0 0 0

@nbd168
Copy link
Member

nbd168 commented Aug 13, 2023

@DragonBluep, wow, nice find. I suspect that the main effect of that knob is that it likely disables A-MSDU tx. Please try removing this line from mac80211.c in mt76: ieee80211_hw_set(hw, TX_AMSDU);

If that makes it work reliably as well, please put the line back in and try gradually reducing the value of hw->max_tx_fragments in the same source file.

Thanks.

@DragonBluep
Copy link

@nbd168 Good news, removing ieee80211_hw_set(hw, TX_AMSDU); or changing hw->max_tx_fragments to 1 can avoid watchdog resetting.

These tests are based on patch #793 (comment)

hw->max_tx_fragments disable TX_AMSDU 16 8 4 2 1
Trigger PSE reset? No Yes Yes Yes Yes No

Summaries:

  1. We can workaround this PSE watchdog reset issue by changing max_tx_fragments to 1.
  2. PSE reset is not the reason but a result.
  3. With original mt76 repo, PSE reset is frequently triggered, and WiFi SSID/signal sometimes disappears under heavy load.
  4. With this patch WI-FI is unstable at 2.4 GHz #793 (comment), the WiFi SSID/signal will disappear 100% within 20 seconds and then trigger a PSE reset. This is not to say that it is an incorrect fix. On the contrary, I believe it touches the key code of the real bug.

@nbd168
Copy link
Member

nbd168 commented Aug 14, 2023

Please try this patch on top of current mt76: https://nbd.name/p/762e9946

@DragonBluep
Copy link

@shown19 MT7612 hardware restart issue is caused by USB3.0 port. Please focus on this issue as it goes beyond the topic here. #457 (comment)

@shown19
Copy link

shown19 commented Aug 22, 2023

@shown19 MT7612 hardware restart issue is caused by USB3.0 port. Please focus on this issue as it goes beyond the topic here. #457 (comment)

I actually commented in that post dated July 21 and don't even have hdd inserted but still got that issue. Anyway, this is unrelated issue to this topic here. I will try to figure this out. Thank you.

@nachalni
Copy link

Hi, has anyone tried to do long term tests with MT7628 with most recent version of the driver ?

@lukasz1992
Copy link

@nachalni no, we thought that you would do them :)

Joking - fix is too recent to have long-term test

@nachalni
Copy link

We did some tests with multiple clients running heavy http traffic for 24hrs to/from wan. Reset file output only had this one exception:
RX PSE busy stuck: 1
MCU didn't hang, clients still connected to AP

@dfateyev
Copy link

I actually commented in that post dated July 21 and don't even have hdd inserted but still got that issue.

@shown19 just for the record, I have a similar board:

[   12.168762] pci 0000:00:01.0: enabling device (0000 -> 0003)
[   12.174542] mt76x2e 0000:01:00.0: enabling device (0000 -> 0002)
[   12.180790] mt76x2e 0000:01:00.0: ASIC revision: 76120044
[   13.022770] mt76x2e 0000:01:00.0: ROM patch build: 20141115060606a
[   13.071036] mt76x2e 0000:01:00.0: Firmware Version: 0.0.00
[   13.076604] mt76x2e 0000:01:00.0: Build: 1
[   13.080692] mt76x2e 0000:01:00.0: Build Time: 201607111443____
[   13.110034] mt76x2e 0000:01:00.0: Firmware running!

but remember having "Hardware restart was requested" in logs just once or twice since 19.07. I suspect in your case there may be HW interference or a short circuit, etc.

@shown19
Copy link

shown19 commented Aug 23, 2023

but remember having "Hardware restart was requested" in logs just once or twice since 19.07. I suspect in your case there may be HW interference or a short circuit, etc.

that might be the case and also whenever I lowered the txpower from 20dbm to 12dbm, It doesn't log hardware restart requested so my guess also is maybe the 5ghz chipset cannot handle higher power anymore. I'm not experiencing it back then actually for months, it just so happened all of a sudden frequently now.

nbd168 added a commit that referenced this issue Aug 26, 2023
It was reported that this can cause the PSE hang issues, even with a low
number of fragments.

Link: #793 (comment)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit b14c235)
@Linaro1985
Copy link

Linaro1985 commented Aug 29, 2023

@DragonBluep @nbd168 I continue to test the mt7628 devices in hard conditions with many connected clients (about 20) on OpenWrt 22.03 snapshot. Sometimes wifi stops working and "Beacon stuck" counter increments in /sys/kernel/debug/ieee80211/phy0/mt76/reset until command wifi down && wifi up. After that wifi will continue to work.

Update: after a while Wi-Fi recovers itself

@Djfe

This comment was marked as resolved.

@Linaro1985
Copy link

Linaro1985 commented Aug 29, 2023

Does your snapshot already contain the commit from three days ago that contains the latest fixes? openwrt/openwrt@76b1e56

Yes. It contains.

@DragonBluep
Copy link

@Linaro1985 Have you tested the main branch? Did the "Beacon stuck" counter increasing before the SSID disappears or after the SSID disappears?

In the previous PSE reset issue, about one minute after the SSID disappeared, the PSE reset counter increased by 1, and finally WiFi returned to normal state. It seems that the AP will enter an uncontrolled state in some conditions and watchdog doesn't catch the MCU hang.

@Dahhyunnee
Copy link

Dahhyunnee commented Aug 29, 2023

@Linaro1985 add this 3 lines in /etc/config/wireless - wifi-device

option frag '2346'
option rts '2347'
list ht_capab 'SMPS-STATIC'

Stable Wi-Fi using 23.05-SNAPSHOT r23400 & 22.03-SNAPSHOT r20213 :)
R4A Gigabit - 23.05-SNAPSHOT r23400
R4A 100M - 22.03-SNAPSHOT r20213

@Linaro1985
Copy link

Linaro1985 commented Aug 29, 2023

add this 3 lines in /etc/config/wireless - wifi-device

@Dahhyunnee thanks! I try it. Have you tried without these parameters with the latest changes on openwrt 22.03/23.05/main?

Have you tested the main branch?

@DragonBluep only on devices that are near me and there is no any problems. But I have multiple access points in a remote office. They have many connected clients. After updating from version 19.07 to the latest 22.03 snapshot I have such a problem. Due to the fact that this is a work office, I can not put a version higher than 22.03 to check 23.05/main branches.

Did the "Beacon stuck" counter increasing before the SSID disappears or after the SSID disappears?

Good question, but I can't reproduce this moment by self. It may happen after some time. Wifi SSID disappears and no clients data exchange with AP.

I wrote a small script (launch by cron every 1 minute), for a temporary solution:

#!/bin/sh

bc=$(sed -n 's/        Beacon stuck: //p' /sys/kernel/debug/ieee80211/phy0/mt76/reset)
[ -f /tmp/bc ] && bcold=$(cat /tmp/bc) || bcold=0
[ $((bc-bcold)) -gt 50 ] && {
        logger -t "wifi" "reload because of beacon stuck detected"
        wifi down
        wifi up
}
echo "$bc" > /tmp/bc

@Linaro1985
Copy link

Linaro1985 commented Aug 30, 2023

@DragonBluep before "Beacon stuck" occurs in the log there are the following suspicious lines

Wed Aug 30 11:41:00 2023 cron.err crond[3755]: USER root pid 4627 cmd /root/wifi_check.sh
Wed Aug 30 11:41:06 2023 daemon.info hostapd: ap1003: STA c2:c8:25:c9:d2:57 IEEE 802.11: authenticated
Wed Aug 30 11:41:06 2023 daemon.info hostapd: ap1003: STA c2:c8:25:c9:d2:57 IEEE 802.11: associated (aid 12)
Wed Aug 30 11:41:07 2023 daemon.notice hostapd: ap1003: AP-STA-CONNECTED c2:c8:25:c9:d2:57
Wed Aug 30 11:41:07 2023 daemon.info hostapd: ap1003: STA c2:c8:25:c9:d2:57 RADIUS: starting accounting session EEDEBF5BA2B7E0DD
Wed Aug 30 11:41:07 2023 daemon.info hostapd: ap1003: STA c2:c8:25:c9:d2:57 WPA: pairwise key handshake completed (RSN)
Wed Aug 30 11:41:07 2023 daemon.notice hostapd: ap1003: EAPOL-4WAY-HS-COMPLETED c2:c8:25:c9:d2:57
Wed Aug 30 11:42:00 2023 cron.err crond[3755]: USER root pid 4638 cmd /root/wifi_check.sh
Wed Aug 30 11:42:07 2023 daemon.notice hostapd: ap1003: AP-STA-DISCONNECTED 9a:2c:da:e5:97:d3
Wed Aug 30 11:42:10 2023 daemon.notice hostapd: ap1001: AP-STA-DISCONNECTED 44:d7:91:0f:bb:23
Wed Aug 30 11:42:11 2023 daemon.info hostapd: ap1001: STA 44:d7:91:0f:bb:23 IEEE 802.11: authenticated
Wed Aug 30 11:42:11 2023 daemon.info hostapd: ap1001: STA 44:d7:91:0f:bb:23 IEEE 802.11: authenticated
Wed Aug 30 11:42:11 2023 daemon.info hostapd: ap1001: STA 44:d7:91:0f:bb:23 IEEE 802.11: authenticated
Wed Aug 30 11:42:11 2023 daemon.info hostapd: ap1001: STA 44:d7:91:0f:bb:23 IEEE 802.11: authenticated
Wed Aug 30 11:42:12 2023 daemon.info hostapd: ap1001: STA 44:d7:91:0f:bb:23 IEEE 802.11: authenticated
Wed Aug 30 11:42:39 2023 daemon.notice hostapd: ap1001: AP-STA-DISCONNECTED a0:88:b4:de:5a:64
Wed Aug 30 11:42:39 2023 daemon.info hostapd: ap1001: STA a0:88:b4:de:5a:64 IEEE 802.11: authenticated
Wed Aug 30 11:42:40 2023 daemon.info hostapd: ap1001: STA a0:88:b4:de:5a:64 IEEE 802.11: authenticated
Wed Aug 30 11:42:40 2023 daemon.info hostapd: ap1001: STA a0:88:b4:de:5a:64 IEEE 802.11: authenticated
Wed Aug 30 11:42:42 2023 daemon.info hostapd: ap1001: STA a0:88:b4:de:5a:64 IEEE 802.11: authenticated
Wed Aug 30 11:42:42 2023 daemon.info hostapd: ap1001: STA a0:88:b4:de:5a:64 IEEE 802.11: authenticated
Wed Aug 30 11:42:43 2023 daemon.info hostapd: ap1001: STA a0:88:b4:de:5a:64 IEEE 802.11: authenticated
Wed Aug 30 11:42:43 2023 daemon.info hostapd: ap1001: STA a0:88:b4:de:5a:64 IEEE 802.11: authenticated
Wed Aug 30 11:42:44 2023 daemon.info hostapd: ap1001: STA a0:88:b4:de:5a:64 IEEE 802.11: authenticated
Wed Aug 30 11:42:44 2023 daemon.info hostapd: ap1001: STA a0:88:b4:de:5a:64 IEEE 802.11: authenticated
Wed Aug 30 11:42:45 2023 daemon.info hostapd: ap1001: STA a0:88:b4:de:5a:64 IEEE 802.11: authenticated
Wed Aug 30 11:43:00 2023 cron.err crond[3755]: USER root pid 4641 cmd /root/wifi_check.sh
Wed Aug 30 11:43:00 2023 user.notice wifi: reload because of beacon stuck detected

/etc/config/wireless

config wifi-device 'radio0'
        option type 'mac80211'
        option path 'platform/10300000.wmac'
        option band '2g'
        option htmode 'HT40'
        option distance 'auto'
        option cell_density '2'
        option channel '2'

config wifi-iface 'ap_1001'
        option device 'radio0'
        option network 'wan'
        option mode 'ap'
        option ifname 'ap1001'
        option encryption 'psk2+ccmp'
        option disassoc_low_ack '0'
        option ssid '****'
        option key '**********'

config wifi-iface 'ap_1003'
        option device 'radio0'
        option network 'guest'
        option mode 'ap'
        option ifname 'ap1003'
        option ssid '***_Guest'
        option encryption 'psk2+ccmp'
        option disassoc_low_ack '0'
        option key '********'
        option isolate '1'

Maybe this will help in finding the cause.

@DragonBluep
Copy link

@Linaro1985 It seems that the SSID has already returned to normal state before crontab runs your script. These IEEE 802.11: authenticated logs indicate that the client has reconnected to the AP.

@Linaro1985
Copy link

These IEEE 802.11: authenticated logs indicate that the client has reconnected to the AP.

I don't know why there are so many authenticated messages from one client. Client signal level is normal. And without script wifi will no longer work normally. I'll try to update the device to snapshot 23.05, but it will take time to make own build with configs.

@DragonBluep
Copy link

@Linaro1985 Not sure if this new firmware has some help, but it's worth trying. I cannot reproduce your problem in daily use, perhaps it only appears in complex scenarios.
https://github.com/openwrt/mt76/blob/7c57e0f6ff8e94b333a6a117cb8f261bc6ae1a32/firmware/mt7628_e2.bin

@dfateyev
Copy link

dfateyev commented Sep 2, 2023

list ht_capab 'SMPS-STATIC'

Just curious: does this option require a specific hostapd?
I haven't found this option here, and setting it manually with default hostapd seems doesn't have an effect:

config wifi-device 'radio0'
	option type 'mac80211'
	option band '2g'
	list ht_capab 'SMPS-STATIC'
	option htmode 'HT20'
...

root@OpenWrt:~# cat /var/run/hostapd-phy0.conf | grep capab
ht_capab=[SHORT-GI-20][SHORT-GI-40][TX-STBC][RX-STBC1]

@Dahhyunnee
Copy link

Yes, it does not work anymore. I removed that option and this is my final configuration.

config wifi-device 'radio0'
option type 'mac80211'
option path '1e140000.pcie/pci0000:00/0000:00:01.0/0000:02:00.0'
option band '2g'
option htmode 'HT40'
option channel '1'
option country 'PH'
option noscan '1'
option txpower '14'
option frag '2346'
option rts '2347'
option cell_density '3'
option log_level '4'

@Dahhyunnee
Copy link

It was already disabled by default.

    Band 1:
            Capabilities: 0x1fe
                    HT20/HT40
                    SM Power Save disabled
                    RX Greenfield
                    RX HT20 SGI
                    RX HT40 SGI
                    TX STBC
                    RX STBC 1-stream
                    Max AMSDU length: 3839 bytes
                    No DSSS/CCK HT40

@Dahhyunnee
Copy link

2G is now stable but 5G is dropping under heavy load.

[299289.533871] mt76x2e 0000:01:00.0: Firmware Version: 0.0.00
[299289.533895] mt76x2e 0000:01:00.0: Build: 1
[299289.533905] mt76x2e 0000:01:00.0: Build Time: 201607111443____
[299289.552599] mt76x2e 0000:01:00.0: Firmware running!
[299289.553670] ieee80211 phy1: Hardware restart was requested

@HiGarfield
Copy link

2G is now stable but 5G is dropping under heavy load.

[299289.533871] mt76x2e 0000:01:00.0: Firmware Version: 0.0.00 [299289.533895] mt76x2e 0000:01:00.0: Build: 1 [299289.533905] mt76x2e 0000:01:00.0: Build Time: 201607111443____ [299289.552599] mt76x2e 0000:01:00.0: Firmware running! [299289.553670] ieee80211 phy1: Hardware restart was requested

Please try to apply this patch
#816

nbd168 added a commit to nbd168/wireless that referenced this issue Sep 11, 2023
It was reported that this can cause the PSE hang issues, even with a low
number of fragments.

Link: openwrt/mt76#793 (comment)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
nbd168 added a commit to nbd168/wireless that referenced this issue Sep 16, 2023
It was reported that this can cause the PSE hang issues, even with a low
number of fragments.

Link: openwrt/mt76#793 (comment)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
nbd168 added a commit to nbd168/wireless that referenced this issue Sep 21, 2023
It was reported that this can cause the PSE hang issues, even with a low
number of fragments.

Link: openwrt/mt76#793 (comment)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
nbd168 added a commit to nbd168/wireless that referenced this issue Sep 30, 2023
It was reported that this can cause the PSE hang issues, even with a low
number of fragments.

Link: openwrt/mt76#793 (comment)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
razvanphp pushed a commit to vampirebyte/mt76 that referenced this issue Nov 24, 2023
It was reported that this can cause the PSE hang issues, even with a low
number of fragments.

Link: openwrt#793 (comment)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit b14c235)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests