Messages in this thread | | | Date | Wed, 3 Apr 2024 00:54:52 +0800 | Subject | Re: [PATCH] wifi: mt76: mt7603: add debugfs attr for disabling frames buffering | From | Shengyu Qu <> |
| |
Hi Rafal,
Maybe we could disable frames buffering by default until it is fixed? Also, maybe we could do more tests on newer models such as mt7986/81 to make this patch benefit more models?
Best regards, Shengyu
在 2024/3/26 6:33, Rafał Miłecki 写道: > From: Rafał Miłecki <rafal@milecki.pl> > > MT7603EN and MT7628AN were reported by multiple users to be unstable > under high traffic. Transmission of packets could stop for seconds often > leading to disconnections. > > Long research & debugging revelaed a close relation between MCU > interrupts of type PKT_TYPE_TXS and slowdowns / stalls. That led to > questioning frames buffering feature. > > It turns out that disabling SKBs loopback code makes mt7603 devices much > more stable under load. There are still some traffic hiccups but those > happen like once every an hour and end up in recovery in most cases. > > Add a debugfs option for disabling frames buffering so users can give it > a try. If this solution yields a success we can make this feature > disabled by default. > > This change was successfully tested using 2 GHz AP interface on: > 1. Netgear R6220 - MT7621ST (SoC) + MT7603EN (WiFi) + MT7612EN (WiFi) > 2. Xiaomi Mi Router 4C - MT7628AN (Wi-Fi SoC) > > Link: https://lore.kernel.org/linux-wireless/7c96d5ee-86c1-8068-1b58-40db6087a24f@gmail.com/ > Closes: https://github.com/openwrt/mt76/issues/865 > Fixes: c8846e101502 ("mt76: add driver for MT7603E and MT7628/7688") > Signed-off-by: Rafał Miłecki <rafal@milecki.pl> > --- > drivers/net/wireless/mediatek/mt76/mt7603/debugfs.c | 2 ++ > drivers/net/wireless/mediatek/mt76/mt7603/dma.c | 3 +++ > drivers/net/wireless/mediatek/mt76/mt7603/init.c | 1 + > drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h | 2 ++ > 4 files changed, 8 insertions(+) > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/debugfs.c b/drivers/net/wireless/mediatek/mt76/mt7603/debugfs.c > index 3967f2f05774..c80baba7a402 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7603/debugfs.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7603/debugfs.c > @@ -115,4 +115,6 @@ void mt7603_init_debugfs(struct mt7603_dev *dev) > &dev->sensitivity_limit); > debugfs_create_bool("dynamic_sensitivity", 0600, dir, > &dev->dynamic_sensitivity); > + debugfs_create_bool("frames_buffering", 0600, dir, > + &dev->frames_buffering); > } > diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/dma.c b/drivers/net/wireless/mediatek/mt76/mt7603/dma.c > index 7a2f5d38562b..f5ab729dec31 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7603/dma.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7603/dma.c > @@ -27,6 +27,9 @@ mt7603_rx_loopback_skb(struct mt7603_dev *dev, struct sk_buff *skb) > u32 val; > u8 tid = 0; > > + if (!dev->frames_buffering) > + goto free; > + > if (skb->len < MT_TXD_SIZE + sizeof(struct ieee80211_hdr)) > goto free; > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/init.c b/drivers/net/wireless/mediatek/mt76/mt7603/init.c > index 6c55c72f28a2..5abc2618ec8b 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7603/init.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7603/init.c > @@ -515,6 +515,7 @@ int mt7603_register_device(struct mt7603_dev *dev) > dev->slottime = 9; > dev->sensitivity_limit = 28; > dev->dynamic_sensitivity = true; > + dev->frames_buffering = true; > > ret = mt7603_init_hardware(dev); > if (ret) > diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h b/drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h > index 9e58df7042ad..02c88334cdc0 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h > +++ b/drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h > @@ -155,6 +155,8 @@ struct mt7603_dev { > u32 reset_test; > > unsigned int reset_cause[__RESET_CAUSE_MAX]; > + > + bool frames_buffering; > }; > > extern const struct mt76_driver_ops mt7603_drv_ops; [unhandled content-type:application/pgp-keys][unhandled content-type:application/pgp-signature] | |