All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Ryder Lee <ryder.lee@mediatek.com>, Felix Fietkau <nbd@nbd.name>
Cc: kbuild-all@lists.01.org,
	Lorenzo Bianconi <lorenzo.bianconi@redhat.com>,
	Shayne Chen <shayne.chen@mediatek.com>,
	Evelyn Tsai <evelyn.tsai@mediatek.com>,
	linux-wireless@vger.kernel.org,
	linux-mediatek@lists.infradead.org,
	Ryder Lee <ryder.lee@mediatek.com>
Subject: Re: [PATCH 2/3] mt76: mt7915: report tx rate directly from tx status
Date: Wed, 14 Jul 2021 16:02:48 +0800	[thread overview]
Message-ID: <202107141517.Adp9UQNe-lkp@intel.com> (raw)
In-Reply-To: <016849a6985105c9a8a633241e31e37d80bfa315.1626240767.git.ryder.lee@mediatek.com>

[-- Attachment #1: Type: text/plain, Size: 17307 bytes --]

Hi Ryder,

I love your patch! Perhaps something to improve:

[auto build test WARNING on wireless-drivers-next/master]
[also build test WARNING on v5.14-rc1 next-20210714]
[cannot apply to wireless-drivers/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Ryder-Lee/mt76-mt7915-take-RCU-read-lock-when-calling-ieee80211_bss_get_elem/20210714-133745
base:   https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next.git master
config: xtensa-allyesconfig (attached as .config)
compiler: xtensa-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/787e54058191f647390d63f0f608de62a3d3a3e8
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Ryder-Lee/mt76-mt7915-take-RCU-read-lock-when-calling-ieee80211_bss_get_elem/20210714-133745
        git checkout 787e54058191f647390d63f0f608de62a3d3a3e8
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=xtensa 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   drivers/net/wireless/mediatek/mt76/mt7915/mac.c: In function 'mt7915_mac_tx_free':
>> drivers/net/wireless/mediatek/mt76/mt7915/mac.c:1221:23: warning: variable 'phy' set but not used [-Wunused-but-set-variable]
    1221 |    struct mt7915_phy *phy;
         |                       ^~~
   drivers/net/wireless/mediatek/mt76/mt7915/mac.c:1213:6: warning: variable 'stat' set but not used [-Wunused-but-set-variable]
    1213 |   u8 stat;
         |      ^~~~
   drivers/net/wireless/mediatek/mt76/mt7915/mac.c: In function 'mt7915_mac_add_txs_skb':
>> drivers/net/wireless/mediatek/mt76/mt7915/mac.c:1271:21: warning: variable 'msta' set but not used [-Wunused-but-set-variable]
    1271 |  struct mt7915_sta *msta;
         |                     ^~~~
   drivers/net/wireless/mediatek/mt76/mt7915/mac.c: In function 'mt7915_tx_complete_skb':
   drivers/net/wireless/mediatek/mt76/mt7915/mac.c:1463:21: warning: variable 'dev' set but not used [-Wunused-but-set-variable]
    1463 |  struct mt7915_dev *dev;
         |                     ^~~


vim +/phy +1221 drivers/net/wireless/mediatek/mt76/mt7915/mac.c

e57b7901469fc0 Ryder Lee        2020-04-25  1183  
338330bd26b1fe Felix Fietkau    2021-05-07  1184  static void
338330bd26b1fe Felix Fietkau    2021-05-07  1185  mt7915_mac_tx_free(struct mt7915_dev *dev, struct sk_buff *skb)
e57b7901469fc0 Ryder Lee        2020-04-25  1186  {
e57b7901469fc0 Ryder Lee        2020-04-25  1187  	struct mt7915_tx_free *free = (struct mt7915_tx_free *)skb->data;
e57b7901469fc0 Ryder Lee        2020-04-25  1188  	struct mt76_dev *mdev = &dev->mt76;
4c430774e01b06 Lorenzo Bianconi 2020-11-13  1189  	struct mt76_phy *mphy_ext = mdev->phy2;
e57b7901469fc0 Ryder Lee        2020-04-25  1190  	struct mt76_txwi_cache *txwi;
e57b7901469fc0 Ryder Lee        2020-04-25  1191  	struct ieee80211_sta *sta = NULL;
660915d052c606 Felix Fietkau    2020-09-01  1192  	LIST_HEAD(free_list);
660915d052c606 Felix Fietkau    2020-09-01  1193  	struct sk_buff *tmp;
e57b7901469fc0 Ryder Lee        2020-04-25  1194  	u8 i, count;
5342758d5522db Felix Fietkau    2020-11-21  1195  	bool wake = false;
e57b7901469fc0 Ryder Lee        2020-04-25  1196  
f8a667a9af9198 Felix Fietkau    2020-08-22  1197  	/* clean DMA queues and unmap buffers first */
91990519298e23 Lorenzo Bianconi 2020-11-11  1198  	mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_PSD], false);
91990519298e23 Lorenzo Bianconi 2020-11-11  1199  	mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_BE], false);
4c430774e01b06 Lorenzo Bianconi 2020-11-13  1200  	if (mphy_ext) {
4c430774e01b06 Lorenzo Bianconi 2020-11-13  1201  		mt76_queue_tx_cleanup(dev, mphy_ext->q_tx[MT_TXQ_PSD], false);
4c430774e01b06 Lorenzo Bianconi 2020-11-13  1202  		mt76_queue_tx_cleanup(dev, mphy_ext->q_tx[MT_TXQ_BE], false);
4c430774e01b06 Lorenzo Bianconi 2020-11-13  1203  	}
f8a667a9af9198 Felix Fietkau    2020-08-22  1204  
e57b7901469fc0 Ryder Lee        2020-04-25  1205  	/*
e57b7901469fc0 Ryder Lee        2020-04-25  1206  	 * TODO: MT_TX_FREE_LATENCY is msdu time from the TXD is queued into PLE,
e57b7901469fc0 Ryder Lee        2020-04-25  1207  	 * to the time ack is received or dropped by hw (air + hw queue time).
e57b7901469fc0 Ryder Lee        2020-04-25  1208  	 * Should avoid accessing WTBL to get Tx airtime, and use it instead.
e57b7901469fc0 Ryder Lee        2020-04-25  1209  	 */
e57b7901469fc0 Ryder Lee        2020-04-25  1210  	count = FIELD_GET(MT_TX_FREE_MSDU_CNT, le16_to_cpu(free->ctrl));
e57b7901469fc0 Ryder Lee        2020-04-25  1211  	for (i = 0; i < count; i++) {
e57b7901469fc0 Ryder Lee        2020-04-25  1212  		u32 msdu, info = le32_to_cpu(free->info[i]);
e57b7901469fc0 Ryder Lee        2020-04-25  1213  		u8 stat;
e57b7901469fc0 Ryder Lee        2020-04-25  1214  
e57b7901469fc0 Ryder Lee        2020-04-25  1215  		/*
e57b7901469fc0 Ryder Lee        2020-04-25  1216  		 * 1'b1: new wcid pair.
e57b7901469fc0 Ryder Lee        2020-04-25  1217  		 * 1'b0: msdu_id with the same 'wcid pair' as above.
e57b7901469fc0 Ryder Lee        2020-04-25  1218  		 */
e57b7901469fc0 Ryder Lee        2020-04-25  1219  		if (info & MT_TX_FREE_PAIR) {
e57b7901469fc0 Ryder Lee        2020-04-25  1220  			struct mt7915_sta *msta;
1daf2522fa1604 Felix Fietkau    2020-07-26 @1221  			struct mt7915_phy *phy;
e57b7901469fc0 Ryder Lee        2020-04-25  1222  			struct mt76_wcid *wcid;
e57b7901469fc0 Ryder Lee        2020-04-25  1223  			u16 idx;
e57b7901469fc0 Ryder Lee        2020-04-25  1224  
e57b7901469fc0 Ryder Lee        2020-04-25  1225  			count++;
e57b7901469fc0 Ryder Lee        2020-04-25  1226  			idx = FIELD_GET(MT_TX_FREE_WLAN_ID, info);
e57b7901469fc0 Ryder Lee        2020-04-25  1227  			wcid = rcu_dereference(dev->mt76.wcid[idx]);
e57b7901469fc0 Ryder Lee        2020-04-25  1228  			sta = wcid_to_sta(wcid);
e57b7901469fc0 Ryder Lee        2020-04-25  1229  			if (!sta)
e57b7901469fc0 Ryder Lee        2020-04-25  1230  				continue;
e57b7901469fc0 Ryder Lee        2020-04-25  1231  
e57b7901469fc0 Ryder Lee        2020-04-25  1232  			msta = container_of(wcid, struct mt7915_sta, wcid);
1daf2522fa1604 Felix Fietkau    2020-07-26  1233  			phy = msta->vif->phy;
1daf2522fa1604 Felix Fietkau    2020-07-26  1234  			spin_lock_bh(&dev->sta_poll_lock);
1daf2522fa1604 Felix Fietkau    2020-07-26  1235  			if (list_empty(&msta->poll_list))
1daf2522fa1604 Felix Fietkau    2020-07-26  1236  				list_add_tail(&msta->poll_list, &dev->sta_poll_list);
1daf2522fa1604 Felix Fietkau    2020-07-26  1237  			spin_unlock_bh(&dev->sta_poll_lock);
6425791d350301 Felix Fietkau    2020-09-27  1238  			continue;
e57b7901469fc0 Ryder Lee        2020-04-25  1239  		}
e57b7901469fc0 Ryder Lee        2020-04-25  1240  
e57b7901469fc0 Ryder Lee        2020-04-25  1241  		msdu = FIELD_GET(MT_TX_FREE_MSDU_ID, info);
e57b7901469fc0 Ryder Lee        2020-04-25  1242  		stat = FIELD_GET(MT_TX_FREE_STATUS, info);
e57b7901469fc0 Ryder Lee        2020-04-25  1243  
d089692bc7938a Lorenzo Bianconi 2021-04-20  1244  		txwi = mt76_token_release(mdev, msdu, &wake);
e57b7901469fc0 Ryder Lee        2020-04-25  1245  		if (!txwi)
e57b7901469fc0 Ryder Lee        2020-04-25  1246  			continue;
e57b7901469fc0 Ryder Lee        2020-04-25  1247  
223fd4f8430810 Felix Fietkau    2021-05-07  1248  		mt7915_txwi_free(dev, txwi, sta, &free_list);
e57b7901469fc0 Ryder Lee        2020-04-25  1249  	}
0f1c443ca9cfa0 Felix Fietkau    2020-08-20  1250  
0f1c443ca9cfa0 Felix Fietkau    2020-08-20  1251  	mt7915_mac_sta_poll(dev);
5342758d5522db Felix Fietkau    2020-11-21  1252  
d089692bc7938a Lorenzo Bianconi 2021-04-20  1253  	if (wake)
d089692bc7938a Lorenzo Bianconi 2021-04-20  1254  		mt76_set_tx_blocked(&dev->mt76, false);
5342758d5522db Felix Fietkau    2020-11-21  1255  
781eef5b34c57d Felix Fietkau    2020-07-24  1256  	mt76_worker_schedule(&dev->mt76.tx_worker);
660915d052c606 Felix Fietkau    2020-09-01  1257  
660915d052c606 Felix Fietkau    2020-09-01  1258  	napi_consume_skb(skb, 1);
660915d052c606 Felix Fietkau    2020-09-01  1259  
660915d052c606 Felix Fietkau    2020-09-01  1260  	list_for_each_entry_safe(skb, tmp, &free_list, list) {
660915d052c606 Felix Fietkau    2020-09-01  1261  		skb_list_del_init(skb);
660915d052c606 Felix Fietkau    2020-09-01  1262  		napi_consume_skb(skb, 1);
660915d052c606 Felix Fietkau    2020-09-01  1263  	}
e57b7901469fc0 Ryder Lee        2020-04-25  1264  }
e57b7901469fc0 Ryder Lee        2020-04-25  1265  
3de4cb1756565a Felix Fietkau    2021-05-07  1266  static bool
3de4cb1756565a Felix Fietkau    2021-05-07  1267  mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid,
3de4cb1756565a Felix Fietkau    2021-05-07  1268  		       __le32 *txs_data)
3de4cb1756565a Felix Fietkau    2021-05-07  1269  {
787e54058191f6 Ryder Lee        2021-07-14  1270  	struct ieee80211_supported_band *sband;
787e54058191f6 Ryder Lee        2021-07-14 @1271  	struct mt7915_sta *msta;
3de4cb1756565a Felix Fietkau    2021-05-07  1272  	struct mt76_dev *mdev = &dev->mt76;
787e54058191f6 Ryder Lee        2021-07-14  1273  	struct mt76_phy *mphy;
3de4cb1756565a Felix Fietkau    2021-05-07  1274  	struct ieee80211_tx_info *info;
3de4cb1756565a Felix Fietkau    2021-05-07  1275  	struct sk_buff_head list;
787e54058191f6 Ryder Lee        2021-07-14  1276  	struct rate_info rate = {};
3de4cb1756565a Felix Fietkau    2021-05-07  1277  	struct sk_buff *skb;
787e54058191f6 Ryder Lee        2021-07-14  1278  	bool cck = false;
787e54058191f6 Ryder Lee        2021-07-14  1279  	u32 txrate, txs;
3de4cb1756565a Felix Fietkau    2021-05-07  1280  
3de4cb1756565a Felix Fietkau    2021-05-07  1281  	mt76_tx_status_lock(mdev, &list);
3de4cb1756565a Felix Fietkau    2021-05-07  1282  	skb = mt76_tx_status_skb_get(mdev, wcid, pid, &list);
3de4cb1756565a Felix Fietkau    2021-05-07  1283  	if (!skb)
3de4cb1756565a Felix Fietkau    2021-05-07  1284  		goto out;
3de4cb1756565a Felix Fietkau    2021-05-07  1285  
787e54058191f6 Ryder Lee        2021-07-14  1286  	txs = le32_to_cpu(txs_data[0]);
787e54058191f6 Ryder Lee        2021-07-14  1287  
3de4cb1756565a Felix Fietkau    2021-05-07  1288  	info = IEEE80211_SKB_CB(skb);
787e54058191f6 Ryder Lee        2021-07-14  1289  	if (!(txs & MT_TXS0_ACK_ERROR_MASK))
3de4cb1756565a Felix Fietkau    2021-05-07  1290  		info->flags |= IEEE80211_TX_STAT_ACK;
3de4cb1756565a Felix Fietkau    2021-05-07  1291  
3de4cb1756565a Felix Fietkau    2021-05-07  1292  	info->status.ampdu_len = 1;
3de4cb1756565a Felix Fietkau    2021-05-07  1293  	info->status.ampdu_ack_len = !!(info->flags &
3de4cb1756565a Felix Fietkau    2021-05-07  1294  					IEEE80211_TX_STAT_ACK);
3de4cb1756565a Felix Fietkau    2021-05-07  1295  
3de4cb1756565a Felix Fietkau    2021-05-07  1296  	info->status.rates[0].idx = -1;
787e54058191f6 Ryder Lee        2021-07-14  1297  
787e54058191f6 Ryder Lee        2021-07-14  1298  	if (!wcid->sta)
787e54058191f6 Ryder Lee        2021-07-14  1299  		goto out;
787e54058191f6 Ryder Lee        2021-07-14  1300  
787e54058191f6 Ryder Lee        2021-07-14  1301  	msta = container_of(wcid, struct mt7915_sta, wcid);
787e54058191f6 Ryder Lee        2021-07-14  1302  	txrate = FIELD_GET(MT_TXS0_TX_RATE, txs);
787e54058191f6 Ryder Lee        2021-07-14  1303  
787e54058191f6 Ryder Lee        2021-07-14  1304  	rate.mcs = FIELD_GET(MT_TX_RATE_IDX, txrate);
787e54058191f6 Ryder Lee        2021-07-14  1305  	rate.nss = FIELD_GET(MT_TX_RATE_NSS, txrate) + 1;
787e54058191f6 Ryder Lee        2021-07-14  1306  
787e54058191f6 Ryder Lee        2021-07-14  1307  	switch (FIELD_GET(MT_TX_RATE_MODE, txrate)) {
787e54058191f6 Ryder Lee        2021-07-14  1308  	case MT_PHY_TYPE_CCK:
787e54058191f6 Ryder Lee        2021-07-14  1309  		cck = true;
787e54058191f6 Ryder Lee        2021-07-14  1310  		fallthrough;
787e54058191f6 Ryder Lee        2021-07-14  1311  	case MT_PHY_TYPE_OFDM:
787e54058191f6 Ryder Lee        2021-07-14  1312  		mphy = &dev->mphy;
787e54058191f6 Ryder Lee        2021-07-14  1313  		if (wcid->ext_phy && dev->mt76.phy2)
787e54058191f6 Ryder Lee        2021-07-14  1314  			mphy = dev->mt76.phy2;
787e54058191f6 Ryder Lee        2021-07-14  1315  
787e54058191f6 Ryder Lee        2021-07-14  1316  		if (mphy->chandef.chan->band == NL80211_BAND_5GHZ)
787e54058191f6 Ryder Lee        2021-07-14  1317  			sband = &mphy->sband_5g.sband;
787e54058191f6 Ryder Lee        2021-07-14  1318  		else
787e54058191f6 Ryder Lee        2021-07-14  1319  			sband = &mphy->sband_2g.sband;
787e54058191f6 Ryder Lee        2021-07-14  1320  
787e54058191f6 Ryder Lee        2021-07-14  1321  		rate.mcs = mt76_get_rate(mphy->dev, sband, rate.mcs, cck);
787e54058191f6 Ryder Lee        2021-07-14  1322  		rate.legacy = sband->bitrates[rate.mcs].bitrate;
787e54058191f6 Ryder Lee        2021-07-14  1323  		break;
787e54058191f6 Ryder Lee        2021-07-14  1324  	case MT_PHY_TYPE_HT:
787e54058191f6 Ryder Lee        2021-07-14  1325  	case MT_PHY_TYPE_HT_GF:
787e54058191f6 Ryder Lee        2021-07-14  1326  		rate.mcs += (rate.nss - 1) * 8;
787e54058191f6 Ryder Lee        2021-07-14  1327  		if (rate.mcs > 31)
787e54058191f6 Ryder Lee        2021-07-14  1328  			goto out;
787e54058191f6 Ryder Lee        2021-07-14  1329  
787e54058191f6 Ryder Lee        2021-07-14  1330  		rate.flags = RATE_INFO_FLAGS_MCS;
787e54058191f6 Ryder Lee        2021-07-14  1331  		if (wcid->rate.flags & RATE_INFO_FLAGS_SHORT_GI)
787e54058191f6 Ryder Lee        2021-07-14  1332  			rate.flags |= RATE_INFO_FLAGS_SHORT_GI;
787e54058191f6 Ryder Lee        2021-07-14  1333  		break;
787e54058191f6 Ryder Lee        2021-07-14  1334  	case MT_PHY_TYPE_VHT:
787e54058191f6 Ryder Lee        2021-07-14  1335  		if (rate.mcs > 9)
787e54058191f6 Ryder Lee        2021-07-14  1336  			goto out;
787e54058191f6 Ryder Lee        2021-07-14  1337  
787e54058191f6 Ryder Lee        2021-07-14  1338  		rate.flags = RATE_INFO_FLAGS_VHT_MCS;
787e54058191f6 Ryder Lee        2021-07-14  1339  		break;
787e54058191f6 Ryder Lee        2021-07-14  1340  	case MT_PHY_TYPE_HE_SU:
787e54058191f6 Ryder Lee        2021-07-14  1341  	case MT_PHY_TYPE_HE_EXT_SU:
787e54058191f6 Ryder Lee        2021-07-14  1342  	case MT_PHY_TYPE_HE_TB:
787e54058191f6 Ryder Lee        2021-07-14  1343  	case MT_PHY_TYPE_HE_MU:
787e54058191f6 Ryder Lee        2021-07-14  1344  		if (rate.mcs > 11)
787e54058191f6 Ryder Lee        2021-07-14  1345  			goto out;
787e54058191f6 Ryder Lee        2021-07-14  1346  
787e54058191f6 Ryder Lee        2021-07-14  1347  		rate.he_gi = wcid->rate.he_gi;
787e54058191f6 Ryder Lee        2021-07-14  1348  		rate.he_dcm = FIELD_GET(MT_TX_RATE_DCM, txrate);
787e54058191f6 Ryder Lee        2021-07-14  1349  		rate.flags = RATE_INFO_FLAGS_HE_MCS;
787e54058191f6 Ryder Lee        2021-07-14  1350  		break;
787e54058191f6 Ryder Lee        2021-07-14  1351  	default:
787e54058191f6 Ryder Lee        2021-07-14  1352  		goto out;
787e54058191f6 Ryder Lee        2021-07-14  1353  	}
787e54058191f6 Ryder Lee        2021-07-14  1354  
787e54058191f6 Ryder Lee        2021-07-14  1355  	switch (FIELD_GET(MT_TXS0_BW, txs)) {
787e54058191f6 Ryder Lee        2021-07-14  1356  	case IEEE80211_STA_RX_BW_160:
787e54058191f6 Ryder Lee        2021-07-14  1357  		rate.bw = RATE_INFO_BW_160;
787e54058191f6 Ryder Lee        2021-07-14  1358  		break;
787e54058191f6 Ryder Lee        2021-07-14  1359  	case IEEE80211_STA_RX_BW_80:
787e54058191f6 Ryder Lee        2021-07-14  1360  		rate.bw = RATE_INFO_BW_80;
787e54058191f6 Ryder Lee        2021-07-14  1361  		break;
787e54058191f6 Ryder Lee        2021-07-14  1362  	case IEEE80211_STA_RX_BW_40:
787e54058191f6 Ryder Lee        2021-07-14  1363  		rate.bw = RATE_INFO_BW_40;
787e54058191f6 Ryder Lee        2021-07-14  1364  		break;
787e54058191f6 Ryder Lee        2021-07-14  1365  	default:
787e54058191f6 Ryder Lee        2021-07-14  1366  		rate.bw = RATE_INFO_BW_20;
787e54058191f6 Ryder Lee        2021-07-14  1367  		break;
787e54058191f6 Ryder Lee        2021-07-14  1368  	}
787e54058191f6 Ryder Lee        2021-07-14  1369  	wcid->rate = rate;
3de4cb1756565a Felix Fietkau    2021-05-07  1370  
3de4cb1756565a Felix Fietkau    2021-05-07  1371  out:
787e54058191f6 Ryder Lee        2021-07-14  1372  	mt76_tx_status_skb_done(mdev, skb, &list);
3de4cb1756565a Felix Fietkau    2021-05-07  1373  	mt76_tx_status_unlock(mdev, &list);
3de4cb1756565a Felix Fietkau    2021-05-07  1374  
3de4cb1756565a Felix Fietkau    2021-05-07  1375  	return !!skb;
3de4cb1756565a Felix Fietkau    2021-05-07  1376  }
3de4cb1756565a Felix Fietkau    2021-05-07  1377  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 68005 bytes --]

[-- Attachment #3: Type: text/plain, Size: 170 bytes --]

_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Ryder Lee <ryder.lee@mediatek.com>, Felix Fietkau <nbd@nbd.name>
Cc: kbuild-all@lists.01.org,
	Lorenzo Bianconi <lorenzo.bianconi@redhat.com>,
	Shayne Chen <shayne.chen@mediatek.com>,
	Evelyn Tsai <evelyn.tsai@mediatek.com>,
	linux-wireless@vger.kernel.org,
	linux-mediatek@lists.infradead.org,
	Ryder Lee <ryder.lee@mediatek.com>
Subject: Re: [PATCH 2/3] mt76: mt7915: report tx rate directly from tx status
Date: Wed, 14 Jul 2021 16:02:48 +0800	[thread overview]
Message-ID: <202107141517.Adp9UQNe-lkp@intel.com> (raw)
In-Reply-To: <016849a6985105c9a8a633241e31e37d80bfa315.1626240767.git.ryder.lee@mediatek.com>

[-- Attachment #1: Type: text/plain, Size: 17307 bytes --]

Hi Ryder,

I love your patch! Perhaps something to improve:

[auto build test WARNING on wireless-drivers-next/master]
[also build test WARNING on v5.14-rc1 next-20210714]
[cannot apply to wireless-drivers/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Ryder-Lee/mt76-mt7915-take-RCU-read-lock-when-calling-ieee80211_bss_get_elem/20210714-133745
base:   https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next.git master
config: xtensa-allyesconfig (attached as .config)
compiler: xtensa-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/787e54058191f647390d63f0f608de62a3d3a3e8
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Ryder-Lee/mt76-mt7915-take-RCU-read-lock-when-calling-ieee80211_bss_get_elem/20210714-133745
        git checkout 787e54058191f647390d63f0f608de62a3d3a3e8
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=xtensa 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   drivers/net/wireless/mediatek/mt76/mt7915/mac.c: In function 'mt7915_mac_tx_free':
>> drivers/net/wireless/mediatek/mt76/mt7915/mac.c:1221:23: warning: variable 'phy' set but not used [-Wunused-but-set-variable]
    1221 |    struct mt7915_phy *phy;
         |                       ^~~
   drivers/net/wireless/mediatek/mt76/mt7915/mac.c:1213:6: warning: variable 'stat' set but not used [-Wunused-but-set-variable]
    1213 |   u8 stat;
         |      ^~~~
   drivers/net/wireless/mediatek/mt76/mt7915/mac.c: In function 'mt7915_mac_add_txs_skb':
>> drivers/net/wireless/mediatek/mt76/mt7915/mac.c:1271:21: warning: variable 'msta' set but not used [-Wunused-but-set-variable]
    1271 |  struct mt7915_sta *msta;
         |                     ^~~~
   drivers/net/wireless/mediatek/mt76/mt7915/mac.c: In function 'mt7915_tx_complete_skb':
   drivers/net/wireless/mediatek/mt76/mt7915/mac.c:1463:21: warning: variable 'dev' set but not used [-Wunused-but-set-variable]
    1463 |  struct mt7915_dev *dev;
         |                     ^~~


vim +/phy +1221 drivers/net/wireless/mediatek/mt76/mt7915/mac.c

e57b7901469fc0 Ryder Lee        2020-04-25  1183  
338330bd26b1fe Felix Fietkau    2021-05-07  1184  static void
338330bd26b1fe Felix Fietkau    2021-05-07  1185  mt7915_mac_tx_free(struct mt7915_dev *dev, struct sk_buff *skb)
e57b7901469fc0 Ryder Lee        2020-04-25  1186  {
e57b7901469fc0 Ryder Lee        2020-04-25  1187  	struct mt7915_tx_free *free = (struct mt7915_tx_free *)skb->data;
e57b7901469fc0 Ryder Lee        2020-04-25  1188  	struct mt76_dev *mdev = &dev->mt76;
4c430774e01b06 Lorenzo Bianconi 2020-11-13  1189  	struct mt76_phy *mphy_ext = mdev->phy2;
e57b7901469fc0 Ryder Lee        2020-04-25  1190  	struct mt76_txwi_cache *txwi;
e57b7901469fc0 Ryder Lee        2020-04-25  1191  	struct ieee80211_sta *sta = NULL;
660915d052c606 Felix Fietkau    2020-09-01  1192  	LIST_HEAD(free_list);
660915d052c606 Felix Fietkau    2020-09-01  1193  	struct sk_buff *tmp;
e57b7901469fc0 Ryder Lee        2020-04-25  1194  	u8 i, count;
5342758d5522db Felix Fietkau    2020-11-21  1195  	bool wake = false;
e57b7901469fc0 Ryder Lee        2020-04-25  1196  
f8a667a9af9198 Felix Fietkau    2020-08-22  1197  	/* clean DMA queues and unmap buffers first */
91990519298e23 Lorenzo Bianconi 2020-11-11  1198  	mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_PSD], false);
91990519298e23 Lorenzo Bianconi 2020-11-11  1199  	mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_BE], false);
4c430774e01b06 Lorenzo Bianconi 2020-11-13  1200  	if (mphy_ext) {
4c430774e01b06 Lorenzo Bianconi 2020-11-13  1201  		mt76_queue_tx_cleanup(dev, mphy_ext->q_tx[MT_TXQ_PSD], false);
4c430774e01b06 Lorenzo Bianconi 2020-11-13  1202  		mt76_queue_tx_cleanup(dev, mphy_ext->q_tx[MT_TXQ_BE], false);
4c430774e01b06 Lorenzo Bianconi 2020-11-13  1203  	}
f8a667a9af9198 Felix Fietkau    2020-08-22  1204  
e57b7901469fc0 Ryder Lee        2020-04-25  1205  	/*
e57b7901469fc0 Ryder Lee        2020-04-25  1206  	 * TODO: MT_TX_FREE_LATENCY is msdu time from the TXD is queued into PLE,
e57b7901469fc0 Ryder Lee        2020-04-25  1207  	 * to the time ack is received or dropped by hw (air + hw queue time).
e57b7901469fc0 Ryder Lee        2020-04-25  1208  	 * Should avoid accessing WTBL to get Tx airtime, and use it instead.
e57b7901469fc0 Ryder Lee        2020-04-25  1209  	 */
e57b7901469fc0 Ryder Lee        2020-04-25  1210  	count = FIELD_GET(MT_TX_FREE_MSDU_CNT, le16_to_cpu(free->ctrl));
e57b7901469fc0 Ryder Lee        2020-04-25  1211  	for (i = 0; i < count; i++) {
e57b7901469fc0 Ryder Lee        2020-04-25  1212  		u32 msdu, info = le32_to_cpu(free->info[i]);
e57b7901469fc0 Ryder Lee        2020-04-25  1213  		u8 stat;
e57b7901469fc0 Ryder Lee        2020-04-25  1214  
e57b7901469fc0 Ryder Lee        2020-04-25  1215  		/*
e57b7901469fc0 Ryder Lee        2020-04-25  1216  		 * 1'b1: new wcid pair.
e57b7901469fc0 Ryder Lee        2020-04-25  1217  		 * 1'b0: msdu_id with the same 'wcid pair' as above.
e57b7901469fc0 Ryder Lee        2020-04-25  1218  		 */
e57b7901469fc0 Ryder Lee        2020-04-25  1219  		if (info & MT_TX_FREE_PAIR) {
e57b7901469fc0 Ryder Lee        2020-04-25  1220  			struct mt7915_sta *msta;
1daf2522fa1604 Felix Fietkau    2020-07-26 @1221  			struct mt7915_phy *phy;
e57b7901469fc0 Ryder Lee        2020-04-25  1222  			struct mt76_wcid *wcid;
e57b7901469fc0 Ryder Lee        2020-04-25  1223  			u16 idx;
e57b7901469fc0 Ryder Lee        2020-04-25  1224  
e57b7901469fc0 Ryder Lee        2020-04-25  1225  			count++;
e57b7901469fc0 Ryder Lee        2020-04-25  1226  			idx = FIELD_GET(MT_TX_FREE_WLAN_ID, info);
e57b7901469fc0 Ryder Lee        2020-04-25  1227  			wcid = rcu_dereference(dev->mt76.wcid[idx]);
e57b7901469fc0 Ryder Lee        2020-04-25  1228  			sta = wcid_to_sta(wcid);
e57b7901469fc0 Ryder Lee        2020-04-25  1229  			if (!sta)
e57b7901469fc0 Ryder Lee        2020-04-25  1230  				continue;
e57b7901469fc0 Ryder Lee        2020-04-25  1231  
e57b7901469fc0 Ryder Lee        2020-04-25  1232  			msta = container_of(wcid, struct mt7915_sta, wcid);
1daf2522fa1604 Felix Fietkau    2020-07-26  1233  			phy = msta->vif->phy;
1daf2522fa1604 Felix Fietkau    2020-07-26  1234  			spin_lock_bh(&dev->sta_poll_lock);
1daf2522fa1604 Felix Fietkau    2020-07-26  1235  			if (list_empty(&msta->poll_list))
1daf2522fa1604 Felix Fietkau    2020-07-26  1236  				list_add_tail(&msta->poll_list, &dev->sta_poll_list);
1daf2522fa1604 Felix Fietkau    2020-07-26  1237  			spin_unlock_bh(&dev->sta_poll_lock);
6425791d350301 Felix Fietkau    2020-09-27  1238  			continue;
e57b7901469fc0 Ryder Lee        2020-04-25  1239  		}
e57b7901469fc0 Ryder Lee        2020-04-25  1240  
e57b7901469fc0 Ryder Lee        2020-04-25  1241  		msdu = FIELD_GET(MT_TX_FREE_MSDU_ID, info);
e57b7901469fc0 Ryder Lee        2020-04-25  1242  		stat = FIELD_GET(MT_TX_FREE_STATUS, info);
e57b7901469fc0 Ryder Lee        2020-04-25  1243  
d089692bc7938a Lorenzo Bianconi 2021-04-20  1244  		txwi = mt76_token_release(mdev, msdu, &wake);
e57b7901469fc0 Ryder Lee        2020-04-25  1245  		if (!txwi)
e57b7901469fc0 Ryder Lee        2020-04-25  1246  			continue;
e57b7901469fc0 Ryder Lee        2020-04-25  1247  
223fd4f8430810 Felix Fietkau    2021-05-07  1248  		mt7915_txwi_free(dev, txwi, sta, &free_list);
e57b7901469fc0 Ryder Lee        2020-04-25  1249  	}
0f1c443ca9cfa0 Felix Fietkau    2020-08-20  1250  
0f1c443ca9cfa0 Felix Fietkau    2020-08-20  1251  	mt7915_mac_sta_poll(dev);
5342758d5522db Felix Fietkau    2020-11-21  1252  
d089692bc7938a Lorenzo Bianconi 2021-04-20  1253  	if (wake)
d089692bc7938a Lorenzo Bianconi 2021-04-20  1254  		mt76_set_tx_blocked(&dev->mt76, false);
5342758d5522db Felix Fietkau    2020-11-21  1255  
781eef5b34c57d Felix Fietkau    2020-07-24  1256  	mt76_worker_schedule(&dev->mt76.tx_worker);
660915d052c606 Felix Fietkau    2020-09-01  1257  
660915d052c606 Felix Fietkau    2020-09-01  1258  	napi_consume_skb(skb, 1);
660915d052c606 Felix Fietkau    2020-09-01  1259  
660915d052c606 Felix Fietkau    2020-09-01  1260  	list_for_each_entry_safe(skb, tmp, &free_list, list) {
660915d052c606 Felix Fietkau    2020-09-01  1261  		skb_list_del_init(skb);
660915d052c606 Felix Fietkau    2020-09-01  1262  		napi_consume_skb(skb, 1);
660915d052c606 Felix Fietkau    2020-09-01  1263  	}
e57b7901469fc0 Ryder Lee        2020-04-25  1264  }
e57b7901469fc0 Ryder Lee        2020-04-25  1265  
3de4cb1756565a Felix Fietkau    2021-05-07  1266  static bool
3de4cb1756565a Felix Fietkau    2021-05-07  1267  mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid,
3de4cb1756565a Felix Fietkau    2021-05-07  1268  		       __le32 *txs_data)
3de4cb1756565a Felix Fietkau    2021-05-07  1269  {
787e54058191f6 Ryder Lee        2021-07-14  1270  	struct ieee80211_supported_band *sband;
787e54058191f6 Ryder Lee        2021-07-14 @1271  	struct mt7915_sta *msta;
3de4cb1756565a Felix Fietkau    2021-05-07  1272  	struct mt76_dev *mdev = &dev->mt76;
787e54058191f6 Ryder Lee        2021-07-14  1273  	struct mt76_phy *mphy;
3de4cb1756565a Felix Fietkau    2021-05-07  1274  	struct ieee80211_tx_info *info;
3de4cb1756565a Felix Fietkau    2021-05-07  1275  	struct sk_buff_head list;
787e54058191f6 Ryder Lee        2021-07-14  1276  	struct rate_info rate = {};
3de4cb1756565a Felix Fietkau    2021-05-07  1277  	struct sk_buff *skb;
787e54058191f6 Ryder Lee        2021-07-14  1278  	bool cck = false;
787e54058191f6 Ryder Lee        2021-07-14  1279  	u32 txrate, txs;
3de4cb1756565a Felix Fietkau    2021-05-07  1280  
3de4cb1756565a Felix Fietkau    2021-05-07  1281  	mt76_tx_status_lock(mdev, &list);
3de4cb1756565a Felix Fietkau    2021-05-07  1282  	skb = mt76_tx_status_skb_get(mdev, wcid, pid, &list);
3de4cb1756565a Felix Fietkau    2021-05-07  1283  	if (!skb)
3de4cb1756565a Felix Fietkau    2021-05-07  1284  		goto out;
3de4cb1756565a Felix Fietkau    2021-05-07  1285  
787e54058191f6 Ryder Lee        2021-07-14  1286  	txs = le32_to_cpu(txs_data[0]);
787e54058191f6 Ryder Lee        2021-07-14  1287  
3de4cb1756565a Felix Fietkau    2021-05-07  1288  	info = IEEE80211_SKB_CB(skb);
787e54058191f6 Ryder Lee        2021-07-14  1289  	if (!(txs & MT_TXS0_ACK_ERROR_MASK))
3de4cb1756565a Felix Fietkau    2021-05-07  1290  		info->flags |= IEEE80211_TX_STAT_ACK;
3de4cb1756565a Felix Fietkau    2021-05-07  1291  
3de4cb1756565a Felix Fietkau    2021-05-07  1292  	info->status.ampdu_len = 1;
3de4cb1756565a Felix Fietkau    2021-05-07  1293  	info->status.ampdu_ack_len = !!(info->flags &
3de4cb1756565a Felix Fietkau    2021-05-07  1294  					IEEE80211_TX_STAT_ACK);
3de4cb1756565a Felix Fietkau    2021-05-07  1295  
3de4cb1756565a Felix Fietkau    2021-05-07  1296  	info->status.rates[0].idx = -1;
787e54058191f6 Ryder Lee        2021-07-14  1297  
787e54058191f6 Ryder Lee        2021-07-14  1298  	if (!wcid->sta)
787e54058191f6 Ryder Lee        2021-07-14  1299  		goto out;
787e54058191f6 Ryder Lee        2021-07-14  1300  
787e54058191f6 Ryder Lee        2021-07-14  1301  	msta = container_of(wcid, struct mt7915_sta, wcid);
787e54058191f6 Ryder Lee        2021-07-14  1302  	txrate = FIELD_GET(MT_TXS0_TX_RATE, txs);
787e54058191f6 Ryder Lee        2021-07-14  1303  
787e54058191f6 Ryder Lee        2021-07-14  1304  	rate.mcs = FIELD_GET(MT_TX_RATE_IDX, txrate);
787e54058191f6 Ryder Lee        2021-07-14  1305  	rate.nss = FIELD_GET(MT_TX_RATE_NSS, txrate) + 1;
787e54058191f6 Ryder Lee        2021-07-14  1306  
787e54058191f6 Ryder Lee        2021-07-14  1307  	switch (FIELD_GET(MT_TX_RATE_MODE, txrate)) {
787e54058191f6 Ryder Lee        2021-07-14  1308  	case MT_PHY_TYPE_CCK:
787e54058191f6 Ryder Lee        2021-07-14  1309  		cck = true;
787e54058191f6 Ryder Lee        2021-07-14  1310  		fallthrough;
787e54058191f6 Ryder Lee        2021-07-14  1311  	case MT_PHY_TYPE_OFDM:
787e54058191f6 Ryder Lee        2021-07-14  1312  		mphy = &dev->mphy;
787e54058191f6 Ryder Lee        2021-07-14  1313  		if (wcid->ext_phy && dev->mt76.phy2)
787e54058191f6 Ryder Lee        2021-07-14  1314  			mphy = dev->mt76.phy2;
787e54058191f6 Ryder Lee        2021-07-14  1315  
787e54058191f6 Ryder Lee        2021-07-14  1316  		if (mphy->chandef.chan->band == NL80211_BAND_5GHZ)
787e54058191f6 Ryder Lee        2021-07-14  1317  			sband = &mphy->sband_5g.sband;
787e54058191f6 Ryder Lee        2021-07-14  1318  		else
787e54058191f6 Ryder Lee        2021-07-14  1319  			sband = &mphy->sband_2g.sband;
787e54058191f6 Ryder Lee        2021-07-14  1320  
787e54058191f6 Ryder Lee        2021-07-14  1321  		rate.mcs = mt76_get_rate(mphy->dev, sband, rate.mcs, cck);
787e54058191f6 Ryder Lee        2021-07-14  1322  		rate.legacy = sband->bitrates[rate.mcs].bitrate;
787e54058191f6 Ryder Lee        2021-07-14  1323  		break;
787e54058191f6 Ryder Lee        2021-07-14  1324  	case MT_PHY_TYPE_HT:
787e54058191f6 Ryder Lee        2021-07-14  1325  	case MT_PHY_TYPE_HT_GF:
787e54058191f6 Ryder Lee        2021-07-14  1326  		rate.mcs += (rate.nss - 1) * 8;
787e54058191f6 Ryder Lee        2021-07-14  1327  		if (rate.mcs > 31)
787e54058191f6 Ryder Lee        2021-07-14  1328  			goto out;
787e54058191f6 Ryder Lee        2021-07-14  1329  
787e54058191f6 Ryder Lee        2021-07-14  1330  		rate.flags = RATE_INFO_FLAGS_MCS;
787e54058191f6 Ryder Lee        2021-07-14  1331  		if (wcid->rate.flags & RATE_INFO_FLAGS_SHORT_GI)
787e54058191f6 Ryder Lee        2021-07-14  1332  			rate.flags |= RATE_INFO_FLAGS_SHORT_GI;
787e54058191f6 Ryder Lee        2021-07-14  1333  		break;
787e54058191f6 Ryder Lee        2021-07-14  1334  	case MT_PHY_TYPE_VHT:
787e54058191f6 Ryder Lee        2021-07-14  1335  		if (rate.mcs > 9)
787e54058191f6 Ryder Lee        2021-07-14  1336  			goto out;
787e54058191f6 Ryder Lee        2021-07-14  1337  
787e54058191f6 Ryder Lee        2021-07-14  1338  		rate.flags = RATE_INFO_FLAGS_VHT_MCS;
787e54058191f6 Ryder Lee        2021-07-14  1339  		break;
787e54058191f6 Ryder Lee        2021-07-14  1340  	case MT_PHY_TYPE_HE_SU:
787e54058191f6 Ryder Lee        2021-07-14  1341  	case MT_PHY_TYPE_HE_EXT_SU:
787e54058191f6 Ryder Lee        2021-07-14  1342  	case MT_PHY_TYPE_HE_TB:
787e54058191f6 Ryder Lee        2021-07-14  1343  	case MT_PHY_TYPE_HE_MU:
787e54058191f6 Ryder Lee        2021-07-14  1344  		if (rate.mcs > 11)
787e54058191f6 Ryder Lee        2021-07-14  1345  			goto out;
787e54058191f6 Ryder Lee        2021-07-14  1346  
787e54058191f6 Ryder Lee        2021-07-14  1347  		rate.he_gi = wcid->rate.he_gi;
787e54058191f6 Ryder Lee        2021-07-14  1348  		rate.he_dcm = FIELD_GET(MT_TX_RATE_DCM, txrate);
787e54058191f6 Ryder Lee        2021-07-14  1349  		rate.flags = RATE_INFO_FLAGS_HE_MCS;
787e54058191f6 Ryder Lee        2021-07-14  1350  		break;
787e54058191f6 Ryder Lee        2021-07-14  1351  	default:
787e54058191f6 Ryder Lee        2021-07-14  1352  		goto out;
787e54058191f6 Ryder Lee        2021-07-14  1353  	}
787e54058191f6 Ryder Lee        2021-07-14  1354  
787e54058191f6 Ryder Lee        2021-07-14  1355  	switch (FIELD_GET(MT_TXS0_BW, txs)) {
787e54058191f6 Ryder Lee        2021-07-14  1356  	case IEEE80211_STA_RX_BW_160:
787e54058191f6 Ryder Lee        2021-07-14  1357  		rate.bw = RATE_INFO_BW_160;
787e54058191f6 Ryder Lee        2021-07-14  1358  		break;
787e54058191f6 Ryder Lee        2021-07-14  1359  	case IEEE80211_STA_RX_BW_80:
787e54058191f6 Ryder Lee        2021-07-14  1360  		rate.bw = RATE_INFO_BW_80;
787e54058191f6 Ryder Lee        2021-07-14  1361  		break;
787e54058191f6 Ryder Lee        2021-07-14  1362  	case IEEE80211_STA_RX_BW_40:
787e54058191f6 Ryder Lee        2021-07-14  1363  		rate.bw = RATE_INFO_BW_40;
787e54058191f6 Ryder Lee        2021-07-14  1364  		break;
787e54058191f6 Ryder Lee        2021-07-14  1365  	default:
787e54058191f6 Ryder Lee        2021-07-14  1366  		rate.bw = RATE_INFO_BW_20;
787e54058191f6 Ryder Lee        2021-07-14  1367  		break;
787e54058191f6 Ryder Lee        2021-07-14  1368  	}
787e54058191f6 Ryder Lee        2021-07-14  1369  	wcid->rate = rate;
3de4cb1756565a Felix Fietkau    2021-05-07  1370  
3de4cb1756565a Felix Fietkau    2021-05-07  1371  out:
787e54058191f6 Ryder Lee        2021-07-14  1372  	mt76_tx_status_skb_done(mdev, skb, &list);
3de4cb1756565a Felix Fietkau    2021-05-07  1373  	mt76_tx_status_unlock(mdev, &list);
3de4cb1756565a Felix Fietkau    2021-05-07  1374  
3de4cb1756565a Felix Fietkau    2021-05-07  1375  	return !!skb;
3de4cb1756565a Felix Fietkau    2021-05-07  1376  }
3de4cb1756565a Felix Fietkau    2021-05-07  1377  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 68005 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH 2/3] mt76: mt7915: report tx rate directly from tx status
Date: Wed, 14 Jul 2021 16:02:48 +0800	[thread overview]
Message-ID: <202107141517.Adp9UQNe-lkp@intel.com> (raw)
In-Reply-To: <016849a6985105c9a8a633241e31e37d80bfa315.1626240767.git.ryder.lee@mediatek.com>

[-- Attachment #1: Type: text/plain, Size: 17557 bytes --]

Hi Ryder,

I love your patch! Perhaps something to improve:

[auto build test WARNING on wireless-drivers-next/master]
[also build test WARNING on v5.14-rc1 next-20210714]
[cannot apply to wireless-drivers/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Ryder-Lee/mt76-mt7915-take-RCU-read-lock-when-calling-ieee80211_bss_get_elem/20210714-133745
base:   https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next.git master
config: xtensa-allyesconfig (attached as .config)
compiler: xtensa-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/787e54058191f647390d63f0f608de62a3d3a3e8
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Ryder-Lee/mt76-mt7915-take-RCU-read-lock-when-calling-ieee80211_bss_get_elem/20210714-133745
        git checkout 787e54058191f647390d63f0f608de62a3d3a3e8
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=xtensa 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   drivers/net/wireless/mediatek/mt76/mt7915/mac.c: In function 'mt7915_mac_tx_free':
>> drivers/net/wireless/mediatek/mt76/mt7915/mac.c:1221:23: warning: variable 'phy' set but not used [-Wunused-but-set-variable]
    1221 |    struct mt7915_phy *phy;
         |                       ^~~
   drivers/net/wireless/mediatek/mt76/mt7915/mac.c:1213:6: warning: variable 'stat' set but not used [-Wunused-but-set-variable]
    1213 |   u8 stat;
         |      ^~~~
   drivers/net/wireless/mediatek/mt76/mt7915/mac.c: In function 'mt7915_mac_add_txs_skb':
>> drivers/net/wireless/mediatek/mt76/mt7915/mac.c:1271:21: warning: variable 'msta' set but not used [-Wunused-but-set-variable]
    1271 |  struct mt7915_sta *msta;
         |                     ^~~~
   drivers/net/wireless/mediatek/mt76/mt7915/mac.c: In function 'mt7915_tx_complete_skb':
   drivers/net/wireless/mediatek/mt76/mt7915/mac.c:1463:21: warning: variable 'dev' set but not used [-Wunused-but-set-variable]
    1463 |  struct mt7915_dev *dev;
         |                     ^~~


vim +/phy +1221 drivers/net/wireless/mediatek/mt76/mt7915/mac.c

e57b7901469fc0 Ryder Lee        2020-04-25  1183  
338330bd26b1fe Felix Fietkau    2021-05-07  1184  static void
338330bd26b1fe Felix Fietkau    2021-05-07  1185  mt7915_mac_tx_free(struct mt7915_dev *dev, struct sk_buff *skb)
e57b7901469fc0 Ryder Lee        2020-04-25  1186  {
e57b7901469fc0 Ryder Lee        2020-04-25  1187  	struct mt7915_tx_free *free = (struct mt7915_tx_free *)skb->data;
e57b7901469fc0 Ryder Lee        2020-04-25  1188  	struct mt76_dev *mdev = &dev->mt76;
4c430774e01b06 Lorenzo Bianconi 2020-11-13  1189  	struct mt76_phy *mphy_ext = mdev->phy2;
e57b7901469fc0 Ryder Lee        2020-04-25  1190  	struct mt76_txwi_cache *txwi;
e57b7901469fc0 Ryder Lee        2020-04-25  1191  	struct ieee80211_sta *sta = NULL;
660915d052c606 Felix Fietkau    2020-09-01  1192  	LIST_HEAD(free_list);
660915d052c606 Felix Fietkau    2020-09-01  1193  	struct sk_buff *tmp;
e57b7901469fc0 Ryder Lee        2020-04-25  1194  	u8 i, count;
5342758d5522db Felix Fietkau    2020-11-21  1195  	bool wake = false;
e57b7901469fc0 Ryder Lee        2020-04-25  1196  
f8a667a9af9198 Felix Fietkau    2020-08-22  1197  	/* clean DMA queues and unmap buffers first */
91990519298e23 Lorenzo Bianconi 2020-11-11  1198  	mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_PSD], false);
91990519298e23 Lorenzo Bianconi 2020-11-11  1199  	mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_BE], false);
4c430774e01b06 Lorenzo Bianconi 2020-11-13  1200  	if (mphy_ext) {
4c430774e01b06 Lorenzo Bianconi 2020-11-13  1201  		mt76_queue_tx_cleanup(dev, mphy_ext->q_tx[MT_TXQ_PSD], false);
4c430774e01b06 Lorenzo Bianconi 2020-11-13  1202  		mt76_queue_tx_cleanup(dev, mphy_ext->q_tx[MT_TXQ_BE], false);
4c430774e01b06 Lorenzo Bianconi 2020-11-13  1203  	}
f8a667a9af9198 Felix Fietkau    2020-08-22  1204  
e57b7901469fc0 Ryder Lee        2020-04-25  1205  	/*
e57b7901469fc0 Ryder Lee        2020-04-25  1206  	 * TODO: MT_TX_FREE_LATENCY is msdu time from the TXD is queued into PLE,
e57b7901469fc0 Ryder Lee        2020-04-25  1207  	 * to the time ack is received or dropped by hw (air + hw queue time).
e57b7901469fc0 Ryder Lee        2020-04-25  1208  	 * Should avoid accessing WTBL to get Tx airtime, and use it instead.
e57b7901469fc0 Ryder Lee        2020-04-25  1209  	 */
e57b7901469fc0 Ryder Lee        2020-04-25  1210  	count = FIELD_GET(MT_TX_FREE_MSDU_CNT, le16_to_cpu(free->ctrl));
e57b7901469fc0 Ryder Lee        2020-04-25  1211  	for (i = 0; i < count; i++) {
e57b7901469fc0 Ryder Lee        2020-04-25  1212  		u32 msdu, info = le32_to_cpu(free->info[i]);
e57b7901469fc0 Ryder Lee        2020-04-25  1213  		u8 stat;
e57b7901469fc0 Ryder Lee        2020-04-25  1214  
e57b7901469fc0 Ryder Lee        2020-04-25  1215  		/*
e57b7901469fc0 Ryder Lee        2020-04-25  1216  		 * 1'b1: new wcid pair.
e57b7901469fc0 Ryder Lee        2020-04-25  1217  		 * 1'b0: msdu_id with the same 'wcid pair' as above.
e57b7901469fc0 Ryder Lee        2020-04-25  1218  		 */
e57b7901469fc0 Ryder Lee        2020-04-25  1219  		if (info & MT_TX_FREE_PAIR) {
e57b7901469fc0 Ryder Lee        2020-04-25  1220  			struct mt7915_sta *msta;
1daf2522fa1604 Felix Fietkau    2020-07-26 @1221  			struct mt7915_phy *phy;
e57b7901469fc0 Ryder Lee        2020-04-25  1222  			struct mt76_wcid *wcid;
e57b7901469fc0 Ryder Lee        2020-04-25  1223  			u16 idx;
e57b7901469fc0 Ryder Lee        2020-04-25  1224  
e57b7901469fc0 Ryder Lee        2020-04-25  1225  			count++;
e57b7901469fc0 Ryder Lee        2020-04-25  1226  			idx = FIELD_GET(MT_TX_FREE_WLAN_ID, info);
e57b7901469fc0 Ryder Lee        2020-04-25  1227  			wcid = rcu_dereference(dev->mt76.wcid[idx]);
e57b7901469fc0 Ryder Lee        2020-04-25  1228  			sta = wcid_to_sta(wcid);
e57b7901469fc0 Ryder Lee        2020-04-25  1229  			if (!sta)
e57b7901469fc0 Ryder Lee        2020-04-25  1230  				continue;
e57b7901469fc0 Ryder Lee        2020-04-25  1231  
e57b7901469fc0 Ryder Lee        2020-04-25  1232  			msta = container_of(wcid, struct mt7915_sta, wcid);
1daf2522fa1604 Felix Fietkau    2020-07-26  1233  			phy = msta->vif->phy;
1daf2522fa1604 Felix Fietkau    2020-07-26  1234  			spin_lock_bh(&dev->sta_poll_lock);
1daf2522fa1604 Felix Fietkau    2020-07-26  1235  			if (list_empty(&msta->poll_list))
1daf2522fa1604 Felix Fietkau    2020-07-26  1236  				list_add_tail(&msta->poll_list, &dev->sta_poll_list);
1daf2522fa1604 Felix Fietkau    2020-07-26  1237  			spin_unlock_bh(&dev->sta_poll_lock);
6425791d350301 Felix Fietkau    2020-09-27  1238  			continue;
e57b7901469fc0 Ryder Lee        2020-04-25  1239  		}
e57b7901469fc0 Ryder Lee        2020-04-25  1240  
e57b7901469fc0 Ryder Lee        2020-04-25  1241  		msdu = FIELD_GET(MT_TX_FREE_MSDU_ID, info);
e57b7901469fc0 Ryder Lee        2020-04-25  1242  		stat = FIELD_GET(MT_TX_FREE_STATUS, info);
e57b7901469fc0 Ryder Lee        2020-04-25  1243  
d089692bc7938a Lorenzo Bianconi 2021-04-20  1244  		txwi = mt76_token_release(mdev, msdu, &wake);
e57b7901469fc0 Ryder Lee        2020-04-25  1245  		if (!txwi)
e57b7901469fc0 Ryder Lee        2020-04-25  1246  			continue;
e57b7901469fc0 Ryder Lee        2020-04-25  1247  
223fd4f8430810 Felix Fietkau    2021-05-07  1248  		mt7915_txwi_free(dev, txwi, sta, &free_list);
e57b7901469fc0 Ryder Lee        2020-04-25  1249  	}
0f1c443ca9cfa0 Felix Fietkau    2020-08-20  1250  
0f1c443ca9cfa0 Felix Fietkau    2020-08-20  1251  	mt7915_mac_sta_poll(dev);
5342758d5522db Felix Fietkau    2020-11-21  1252  
d089692bc7938a Lorenzo Bianconi 2021-04-20  1253  	if (wake)
d089692bc7938a Lorenzo Bianconi 2021-04-20  1254  		mt76_set_tx_blocked(&dev->mt76, false);
5342758d5522db Felix Fietkau    2020-11-21  1255  
781eef5b34c57d Felix Fietkau    2020-07-24  1256  	mt76_worker_schedule(&dev->mt76.tx_worker);
660915d052c606 Felix Fietkau    2020-09-01  1257  
660915d052c606 Felix Fietkau    2020-09-01  1258  	napi_consume_skb(skb, 1);
660915d052c606 Felix Fietkau    2020-09-01  1259  
660915d052c606 Felix Fietkau    2020-09-01  1260  	list_for_each_entry_safe(skb, tmp, &free_list, list) {
660915d052c606 Felix Fietkau    2020-09-01  1261  		skb_list_del_init(skb);
660915d052c606 Felix Fietkau    2020-09-01  1262  		napi_consume_skb(skb, 1);
660915d052c606 Felix Fietkau    2020-09-01  1263  	}
e57b7901469fc0 Ryder Lee        2020-04-25  1264  }
e57b7901469fc0 Ryder Lee        2020-04-25  1265  
3de4cb1756565a Felix Fietkau    2021-05-07  1266  static bool
3de4cb1756565a Felix Fietkau    2021-05-07  1267  mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid,
3de4cb1756565a Felix Fietkau    2021-05-07  1268  		       __le32 *txs_data)
3de4cb1756565a Felix Fietkau    2021-05-07  1269  {
787e54058191f6 Ryder Lee        2021-07-14  1270  	struct ieee80211_supported_band *sband;
787e54058191f6 Ryder Lee        2021-07-14 @1271  	struct mt7915_sta *msta;
3de4cb1756565a Felix Fietkau    2021-05-07  1272  	struct mt76_dev *mdev = &dev->mt76;
787e54058191f6 Ryder Lee        2021-07-14  1273  	struct mt76_phy *mphy;
3de4cb1756565a Felix Fietkau    2021-05-07  1274  	struct ieee80211_tx_info *info;
3de4cb1756565a Felix Fietkau    2021-05-07  1275  	struct sk_buff_head list;
787e54058191f6 Ryder Lee        2021-07-14  1276  	struct rate_info rate = {};
3de4cb1756565a Felix Fietkau    2021-05-07  1277  	struct sk_buff *skb;
787e54058191f6 Ryder Lee        2021-07-14  1278  	bool cck = false;
787e54058191f6 Ryder Lee        2021-07-14  1279  	u32 txrate, txs;
3de4cb1756565a Felix Fietkau    2021-05-07  1280  
3de4cb1756565a Felix Fietkau    2021-05-07  1281  	mt76_tx_status_lock(mdev, &list);
3de4cb1756565a Felix Fietkau    2021-05-07  1282  	skb = mt76_tx_status_skb_get(mdev, wcid, pid, &list);
3de4cb1756565a Felix Fietkau    2021-05-07  1283  	if (!skb)
3de4cb1756565a Felix Fietkau    2021-05-07  1284  		goto out;
3de4cb1756565a Felix Fietkau    2021-05-07  1285  
787e54058191f6 Ryder Lee        2021-07-14  1286  	txs = le32_to_cpu(txs_data[0]);
787e54058191f6 Ryder Lee        2021-07-14  1287  
3de4cb1756565a Felix Fietkau    2021-05-07  1288  	info = IEEE80211_SKB_CB(skb);
787e54058191f6 Ryder Lee        2021-07-14  1289  	if (!(txs & MT_TXS0_ACK_ERROR_MASK))
3de4cb1756565a Felix Fietkau    2021-05-07  1290  		info->flags |= IEEE80211_TX_STAT_ACK;
3de4cb1756565a Felix Fietkau    2021-05-07  1291  
3de4cb1756565a Felix Fietkau    2021-05-07  1292  	info->status.ampdu_len = 1;
3de4cb1756565a Felix Fietkau    2021-05-07  1293  	info->status.ampdu_ack_len = !!(info->flags &
3de4cb1756565a Felix Fietkau    2021-05-07  1294  					IEEE80211_TX_STAT_ACK);
3de4cb1756565a Felix Fietkau    2021-05-07  1295  
3de4cb1756565a Felix Fietkau    2021-05-07  1296  	info->status.rates[0].idx = -1;
787e54058191f6 Ryder Lee        2021-07-14  1297  
787e54058191f6 Ryder Lee        2021-07-14  1298  	if (!wcid->sta)
787e54058191f6 Ryder Lee        2021-07-14  1299  		goto out;
787e54058191f6 Ryder Lee        2021-07-14  1300  
787e54058191f6 Ryder Lee        2021-07-14  1301  	msta = container_of(wcid, struct mt7915_sta, wcid);
787e54058191f6 Ryder Lee        2021-07-14  1302  	txrate = FIELD_GET(MT_TXS0_TX_RATE, txs);
787e54058191f6 Ryder Lee        2021-07-14  1303  
787e54058191f6 Ryder Lee        2021-07-14  1304  	rate.mcs = FIELD_GET(MT_TX_RATE_IDX, txrate);
787e54058191f6 Ryder Lee        2021-07-14  1305  	rate.nss = FIELD_GET(MT_TX_RATE_NSS, txrate) + 1;
787e54058191f6 Ryder Lee        2021-07-14  1306  
787e54058191f6 Ryder Lee        2021-07-14  1307  	switch (FIELD_GET(MT_TX_RATE_MODE, txrate)) {
787e54058191f6 Ryder Lee        2021-07-14  1308  	case MT_PHY_TYPE_CCK:
787e54058191f6 Ryder Lee        2021-07-14  1309  		cck = true;
787e54058191f6 Ryder Lee        2021-07-14  1310  		fallthrough;
787e54058191f6 Ryder Lee        2021-07-14  1311  	case MT_PHY_TYPE_OFDM:
787e54058191f6 Ryder Lee        2021-07-14  1312  		mphy = &dev->mphy;
787e54058191f6 Ryder Lee        2021-07-14  1313  		if (wcid->ext_phy && dev->mt76.phy2)
787e54058191f6 Ryder Lee        2021-07-14  1314  			mphy = dev->mt76.phy2;
787e54058191f6 Ryder Lee        2021-07-14  1315  
787e54058191f6 Ryder Lee        2021-07-14  1316  		if (mphy->chandef.chan->band == NL80211_BAND_5GHZ)
787e54058191f6 Ryder Lee        2021-07-14  1317  			sband = &mphy->sband_5g.sband;
787e54058191f6 Ryder Lee        2021-07-14  1318  		else
787e54058191f6 Ryder Lee        2021-07-14  1319  			sband = &mphy->sband_2g.sband;
787e54058191f6 Ryder Lee        2021-07-14  1320  
787e54058191f6 Ryder Lee        2021-07-14  1321  		rate.mcs = mt76_get_rate(mphy->dev, sband, rate.mcs, cck);
787e54058191f6 Ryder Lee        2021-07-14  1322  		rate.legacy = sband->bitrates[rate.mcs].bitrate;
787e54058191f6 Ryder Lee        2021-07-14  1323  		break;
787e54058191f6 Ryder Lee        2021-07-14  1324  	case MT_PHY_TYPE_HT:
787e54058191f6 Ryder Lee        2021-07-14  1325  	case MT_PHY_TYPE_HT_GF:
787e54058191f6 Ryder Lee        2021-07-14  1326  		rate.mcs += (rate.nss - 1) * 8;
787e54058191f6 Ryder Lee        2021-07-14  1327  		if (rate.mcs > 31)
787e54058191f6 Ryder Lee        2021-07-14  1328  			goto out;
787e54058191f6 Ryder Lee        2021-07-14  1329  
787e54058191f6 Ryder Lee        2021-07-14  1330  		rate.flags = RATE_INFO_FLAGS_MCS;
787e54058191f6 Ryder Lee        2021-07-14  1331  		if (wcid->rate.flags & RATE_INFO_FLAGS_SHORT_GI)
787e54058191f6 Ryder Lee        2021-07-14  1332  			rate.flags |= RATE_INFO_FLAGS_SHORT_GI;
787e54058191f6 Ryder Lee        2021-07-14  1333  		break;
787e54058191f6 Ryder Lee        2021-07-14  1334  	case MT_PHY_TYPE_VHT:
787e54058191f6 Ryder Lee        2021-07-14  1335  		if (rate.mcs > 9)
787e54058191f6 Ryder Lee        2021-07-14  1336  			goto out;
787e54058191f6 Ryder Lee        2021-07-14  1337  
787e54058191f6 Ryder Lee        2021-07-14  1338  		rate.flags = RATE_INFO_FLAGS_VHT_MCS;
787e54058191f6 Ryder Lee        2021-07-14  1339  		break;
787e54058191f6 Ryder Lee        2021-07-14  1340  	case MT_PHY_TYPE_HE_SU:
787e54058191f6 Ryder Lee        2021-07-14  1341  	case MT_PHY_TYPE_HE_EXT_SU:
787e54058191f6 Ryder Lee        2021-07-14  1342  	case MT_PHY_TYPE_HE_TB:
787e54058191f6 Ryder Lee        2021-07-14  1343  	case MT_PHY_TYPE_HE_MU:
787e54058191f6 Ryder Lee        2021-07-14  1344  		if (rate.mcs > 11)
787e54058191f6 Ryder Lee        2021-07-14  1345  			goto out;
787e54058191f6 Ryder Lee        2021-07-14  1346  
787e54058191f6 Ryder Lee        2021-07-14  1347  		rate.he_gi = wcid->rate.he_gi;
787e54058191f6 Ryder Lee        2021-07-14  1348  		rate.he_dcm = FIELD_GET(MT_TX_RATE_DCM, txrate);
787e54058191f6 Ryder Lee        2021-07-14  1349  		rate.flags = RATE_INFO_FLAGS_HE_MCS;
787e54058191f6 Ryder Lee        2021-07-14  1350  		break;
787e54058191f6 Ryder Lee        2021-07-14  1351  	default:
787e54058191f6 Ryder Lee        2021-07-14  1352  		goto out;
787e54058191f6 Ryder Lee        2021-07-14  1353  	}
787e54058191f6 Ryder Lee        2021-07-14  1354  
787e54058191f6 Ryder Lee        2021-07-14  1355  	switch (FIELD_GET(MT_TXS0_BW, txs)) {
787e54058191f6 Ryder Lee        2021-07-14  1356  	case IEEE80211_STA_RX_BW_160:
787e54058191f6 Ryder Lee        2021-07-14  1357  		rate.bw = RATE_INFO_BW_160;
787e54058191f6 Ryder Lee        2021-07-14  1358  		break;
787e54058191f6 Ryder Lee        2021-07-14  1359  	case IEEE80211_STA_RX_BW_80:
787e54058191f6 Ryder Lee        2021-07-14  1360  		rate.bw = RATE_INFO_BW_80;
787e54058191f6 Ryder Lee        2021-07-14  1361  		break;
787e54058191f6 Ryder Lee        2021-07-14  1362  	case IEEE80211_STA_RX_BW_40:
787e54058191f6 Ryder Lee        2021-07-14  1363  		rate.bw = RATE_INFO_BW_40;
787e54058191f6 Ryder Lee        2021-07-14  1364  		break;
787e54058191f6 Ryder Lee        2021-07-14  1365  	default:
787e54058191f6 Ryder Lee        2021-07-14  1366  		rate.bw = RATE_INFO_BW_20;
787e54058191f6 Ryder Lee        2021-07-14  1367  		break;
787e54058191f6 Ryder Lee        2021-07-14  1368  	}
787e54058191f6 Ryder Lee        2021-07-14  1369  	wcid->rate = rate;
3de4cb1756565a Felix Fietkau    2021-05-07  1370  
3de4cb1756565a Felix Fietkau    2021-05-07  1371  out:
787e54058191f6 Ryder Lee        2021-07-14  1372  	mt76_tx_status_skb_done(mdev, skb, &list);
3de4cb1756565a Felix Fietkau    2021-05-07  1373  	mt76_tx_status_unlock(mdev, &list);
3de4cb1756565a Felix Fietkau    2021-05-07  1374  
3de4cb1756565a Felix Fietkau    2021-05-07  1375  	return !!skb;
3de4cb1756565a Felix Fietkau    2021-05-07  1376  }
3de4cb1756565a Felix Fietkau    2021-05-07  1377  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 68005 bytes --]

  reply	other threads:[~2021-07-14  8:04 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-14  5:36 [PATCH 1/3] mt76 mt7915: take RCU read lock when calling ieee80211_bss_get_elem() Ryder Lee
2021-07-14  5:36 ` Ryder Lee
2021-07-14  5:36 ` [PATCH 2/3] mt76: mt7915: report tx rate directly from tx status Ryder Lee
2021-07-14  5:36   ` Ryder Lee
2021-07-14  8:02   ` kernel test robot [this message]
2021-07-14  8:02     ` kernel test robot
2021-07-14  8:02     ` kernel test robot
2021-07-14  5:36 ` [PATCH 3/3] mt76: mt7915: remove mt7915_sta_stats Ryder Lee
2021-07-14  5:36   ` Ryder Lee
2021-07-14  7:31 ` [PATCH 1/3] mt76 mt7915: take RCU read lock when calling ieee80211_bss_get_elem() Johannes Berg
2021-07-14  7:31   ` Johannes Berg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202107141517.Adp9UQNe-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=evelyn.tsai@mediatek.com \
    --cc=kbuild-all@lists.01.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=lorenzo.bianconi@redhat.com \
    --cc=nbd@nbd.name \
    --cc=ryder.lee@mediatek.com \
    --cc=shayne.chen@mediatek.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.