[PATCH v2 3/5] wifi: ath12k: add EHT support for TX rate
kernel test robot
lkp at intel.com
Sat Feb 22 06:23:33 PST 2025
Hi Sarika,
kernel test robot noticed the following build errors:
[auto build test ERROR on 704a2d7237043317ed1b0f8a08203e9ddde70097]
url: https://github.com/intel-lab-lkp/linux/commits/Sarika-Sharma/wifi-mac80211-correct-RX-stats-packet-increment-for-multi-link/20250214-014020
base: 704a2d7237043317ed1b0f8a08203e9ddde70097
patch link: https://lore.kernel.org/r/20250213173206.1665731-4-quic_sarishar%40quicinc.com
patch subject: [PATCH v2 3/5] wifi: ath12k: add EHT support for TX rate
config: powerpc-allmodconfig (https://download.01.org/0day-ci/archive/20250222/202502222240.pXNQqv36-lkp@intel.com/config)
compiler: powerpc64-linux-gcc (GCC) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250222/202502222240.pXNQqv36-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp at intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202502222240.pXNQqv36-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/net/wireless/ath/ath12k/dp_rx.c: In function 'ath12k_update_per_peer_tx_stats':
>> drivers/net/wireless/ath/ath12k/dp_rx.c:1488:40: error: implicit declaration of function 'ath12k_eht_gi_to_nl80211_eht_gi'; did you mean 'ath12k_he_gi_to_nl80211_he_gi'? [-Wimplicit-function-declaration]
1488 | arsta->txrate.eht_gi = ath12k_eht_gi_to_nl80211_eht_gi(sgi);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| ath12k_he_gi_to_nl80211_he_gi
drivers/net/wireless/ath/ath12k/dp_rx.c:1364:31: warning: variable 'sta' set but not used [-Wunused-but-set-variable]
1364 | struct ieee80211_sta *sta;
| ^~~
vim +1488 drivers/net/wireless/ath/ath12k/dp_rx.c
1357
1358 static void
1359 ath12k_update_per_peer_tx_stats(struct ath12k *ar,
1360 struct htt_ppdu_stats *ppdu_stats, u8 user)
1361 {
1362 struct ath12k_base *ab = ar->ab;
1363 struct ath12k_peer *peer;
1364 struct ieee80211_sta *sta;
1365 struct ath12k_link_sta *arsta;
1366 struct htt_ppdu_stats_user_rate *user_rate;
1367 struct ath12k_per_peer_tx_stats *peer_stats = &ar->peer_tx_stats;
1368 struct htt_ppdu_user_stats *usr_stats = &ppdu_stats->user_stats[user];
1369 struct htt_ppdu_stats_common *common = &ppdu_stats->common;
1370 int ret;
1371 u8 flags, mcs, nss, bw, sgi, dcm, rate_idx = 0;
1372 u32 v, succ_bytes = 0;
1373 u16 tones, rate = 0, succ_pkts = 0;
1374 u32 tx_duration = 0;
1375 u8 tid = HTT_PPDU_STATS_NON_QOS_TID;
1376 bool is_ampdu = false;
1377
1378 if (!(usr_stats->tlv_flags & BIT(HTT_PPDU_STATS_TAG_USR_RATE)))
1379 return;
1380
1381 if (usr_stats->tlv_flags & BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_COMMON))
1382 is_ampdu =
1383 HTT_USR_CMPLTN_IS_AMPDU(usr_stats->cmpltn_cmn.flags);
1384
1385 if (usr_stats->tlv_flags &
1386 BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_ACK_BA_STATUS)) {
1387 succ_bytes = le32_to_cpu(usr_stats->ack_ba.success_bytes);
1388 succ_pkts = le32_get_bits(usr_stats->ack_ba.info,
1389 HTT_PPDU_STATS_ACK_BA_INFO_NUM_MSDU_M);
1390 tid = le32_get_bits(usr_stats->ack_ba.info,
1391 HTT_PPDU_STATS_ACK_BA_INFO_TID_NUM);
1392 }
1393
1394 if (common->fes_duration_us)
1395 tx_duration = le32_to_cpu(common->fes_duration_us);
1396
1397 user_rate = &usr_stats->rate;
1398 flags = HTT_USR_RATE_PREAMBLE(user_rate->rate_flags);
1399 bw = HTT_USR_RATE_BW(user_rate->rate_flags) - 2;
1400 nss = HTT_USR_RATE_NSS(user_rate->rate_flags) + 1;
1401 mcs = HTT_USR_RATE_MCS(user_rate->rate_flags);
1402 sgi = HTT_USR_RATE_GI(user_rate->rate_flags);
1403 dcm = HTT_USR_RATE_DCM(user_rate->rate_flags);
1404
1405 /* Note: If host configured fixed rates and in some other special
1406 * cases, the broadcast/management frames are sent in different rates.
1407 * Firmware rate's control to be skipped for this?
1408 */
1409
1410 if (flags == WMI_RATE_PREAMBLE_HE && mcs > ATH12K_HE_MCS_MAX) {
1411 ath12k_warn(ab, "Invalid HE mcs %d peer stats", mcs);
1412 return;
1413 }
1414
1415 if (flags == WMI_RATE_PREAMBLE_VHT && mcs > ATH12K_VHT_MCS_MAX) {
1416 ath12k_warn(ab, "Invalid VHT mcs %d peer stats", mcs);
1417 return;
1418 }
1419
1420 if (flags == WMI_RATE_PREAMBLE_HT && (mcs > ATH12K_HT_MCS_MAX || nss < 1)) {
1421 ath12k_warn(ab, "Invalid HT mcs %d nss %d peer stats",
1422 mcs, nss);
1423 return;
1424 }
1425
1426 if (flags == WMI_RATE_PREAMBLE_CCK || flags == WMI_RATE_PREAMBLE_OFDM) {
1427 ret = ath12k_mac_hw_ratecode_to_legacy_rate(mcs,
1428 flags,
1429 &rate_idx,
1430 &rate);
1431 if (ret < 0)
1432 return;
1433 }
1434
1435 rcu_read_lock();
1436 spin_lock_bh(&ab->base_lock);
1437 peer = ath12k_peer_find_by_id(ab, usr_stats->peer_id);
1438
1439 if (!peer || !peer->sta) {
1440 spin_unlock_bh(&ab->base_lock);
1441 rcu_read_unlock();
1442 return;
1443 }
1444
1445 sta = peer->sta;
1446 arsta = ath12k_peer_get_link_sta(ab, peer);
1447 if (!arsta) {
1448 spin_unlock_bh(&ab->base_lock);
1449 rcu_read_unlock();
1450 return;
1451 }
1452
1453 memset(&arsta->txrate, 0, sizeof(arsta->txrate));
1454
1455 switch (flags) {
1456 case WMI_RATE_PREAMBLE_OFDM:
1457 arsta->txrate.legacy = rate;
1458 break;
1459 case WMI_RATE_PREAMBLE_CCK:
1460 arsta->txrate.legacy = rate;
1461 break;
1462 case WMI_RATE_PREAMBLE_HT:
1463 arsta->txrate.mcs = mcs + 8 * (nss - 1);
1464 arsta->txrate.flags = RATE_INFO_FLAGS_MCS;
1465 if (sgi)
1466 arsta->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
1467 break;
1468 case WMI_RATE_PREAMBLE_VHT:
1469 arsta->txrate.mcs = mcs;
1470 arsta->txrate.flags = RATE_INFO_FLAGS_VHT_MCS;
1471 if (sgi)
1472 arsta->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
1473 break;
1474 case WMI_RATE_PREAMBLE_HE:
1475 arsta->txrate.mcs = mcs;
1476 arsta->txrate.flags = RATE_INFO_FLAGS_HE_MCS;
1477 arsta->txrate.he_dcm = dcm;
1478 arsta->txrate.he_gi = ath12k_he_gi_to_nl80211_he_gi(sgi);
1479 tones = le16_to_cpu(user_rate->ru_end) -
1480 le16_to_cpu(user_rate->ru_start) + 1;
1481 v = ath12k_he_ru_tones_to_nl80211_he_ru_alloc(tones);
1482 arsta->txrate.he_ru_alloc = v;
1483 break;
1484 case WMI_RATE_PREAMBLE_EHT:
1485 arsta->txrate.mcs = mcs;
1486 arsta->txrate.flags = RATE_INFO_FLAGS_EHT_MCS;
1487 arsta->txrate.he_dcm = dcm;
> 1488 arsta->txrate.eht_gi = ath12k_eht_gi_to_nl80211_eht_gi(sgi);
1489 tones = le16_to_cpu(user_rate->ru_end) -
1490 le16_to_cpu(user_rate->ru_start) + 1;
1491 v = ath12k_mac_eht_ru_tones_to_nl80211_eht_ru_alloc(tones);
1492 arsta->txrate.eht_ru_alloc = v;
1493 break;
1494 }
1495
1496 arsta->txrate.nss = nss;
1497 arsta->txrate.bw = ath12k_mac_bw_to_mac80211_bw(bw);
1498 arsta->tx_duration += tx_duration;
1499 memcpy(&arsta->last_txrate, &arsta->txrate, sizeof(struct rate_info));
1500
1501 /* PPDU stats reported for mgmt packet doesn't have valid tx bytes.
1502 * So skip peer stats update for mgmt packets.
1503 */
1504 if (tid < HTT_PPDU_STATS_NON_QOS_TID) {
1505 memset(peer_stats, 0, sizeof(*peer_stats));
1506 peer_stats->succ_pkts = succ_pkts;
1507 peer_stats->succ_bytes = succ_bytes;
1508 peer_stats->is_ampdu = is_ampdu;
1509 peer_stats->duration = tx_duration;
1510 peer_stats->ba_fails =
1511 HTT_USR_CMPLTN_LONG_RETRY(usr_stats->cmpltn_cmn.flags) +
1512 HTT_USR_CMPLTN_SHORT_RETRY(usr_stats->cmpltn_cmn.flags);
1513 }
1514
1515 spin_unlock_bh(&ab->base_lock);
1516 rcu_read_unlock();
1517 }
1518
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
More information about the ath12k
mailing list