[Make-wifi-fast] [PATCH mac80211-next v6] mac80211: Switch to a virtual time-based airtime scheduler
kernel test robot
lkp at intel.com
Thu Mar 18 19:31:51 EDT 2021
Hi "Toke,
I love your patch! Perhaps something to improve:
[auto build test WARNING on mac80211-next/master]
url: https://github.com/0day-ci/linux/commits/Toke-H-iland-J-rgensen/mac80211-Switch-to-a-virtual-time-based-airtime-scheduler/20210319-053617
base: https://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-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/23d429aa540736e04237eb11c63c03d929653774
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Toke-H-iland-J-rgensen/mac80211-Switch-to-a-virtual-time-based-airtime-scheduler/20210319-053617
git checkout 23d429aa540736e04237eb11c63c03d929653774
# 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 at intel.com>
All warnings (new ones prefixed by >>):
net/mac80211/cfg.c: In function 'sta_apply_parameters':
>> net/mac80211/cfg.c:1452:26: warning: variable 'old_weight' set but not used [-Wunused-but-set-variable]
1452 | u32 mask, set, tid, ac, old_weight;
| ^~~~~~~~~~
vim +/old_weight +1452 net/mac80211/cfg.c
1444
1445 static int sta_apply_parameters(struct ieee80211_local *local,
1446 struct sta_info *sta,
1447 struct station_parameters *params)
1448 {
1449 int ret = 0;
1450 struct ieee80211_supported_band *sband;
1451 struct ieee80211_sub_if_data *sdata = sta->sdata;
> 1452 u32 mask, set, tid, ac, old_weight;
1453 struct txq_info *txqi;
1454
1455 sband = ieee80211_get_sband(sdata);
1456 if (!sband)
1457 return -EINVAL;
1458
1459 mask = params->sta_flags_mask;
1460 set = params->sta_flags_set;
1461
1462 if (ieee80211_vif_is_mesh(&sdata->vif)) {
1463 /*
1464 * In mesh mode, ASSOCIATED isn't part of the nl80211
1465 * API but must follow AUTHENTICATED for driver state.
1466 */
1467 if (mask & BIT(NL80211_STA_FLAG_AUTHENTICATED))
1468 mask |= BIT(NL80211_STA_FLAG_ASSOCIATED);
1469 if (set & BIT(NL80211_STA_FLAG_AUTHENTICATED))
1470 set |= BIT(NL80211_STA_FLAG_ASSOCIATED);
1471 } else if (test_sta_flag(sta, WLAN_STA_TDLS_PEER)) {
1472 /*
1473 * TDLS -- everything follows authorized, but
1474 * only becoming authorized is possible, not
1475 * going back
1476 */
1477 if (set & BIT(NL80211_STA_FLAG_AUTHORIZED)) {
1478 set |= BIT(NL80211_STA_FLAG_AUTHENTICATED) |
1479 BIT(NL80211_STA_FLAG_ASSOCIATED);
1480 mask |= BIT(NL80211_STA_FLAG_AUTHENTICATED) |
1481 BIT(NL80211_STA_FLAG_ASSOCIATED);
1482 }
1483 }
1484
1485 if (mask & BIT(NL80211_STA_FLAG_WME) &&
1486 local->hw.queues >= IEEE80211_NUM_ACS)
1487 sta->sta.wme = set & BIT(NL80211_STA_FLAG_WME);
1488
1489 /* auth flags will be set later for TDLS,
1490 * and for unassociated stations that move to assocaited */
1491 if (!test_sta_flag(sta, WLAN_STA_TDLS_PEER) &&
1492 !((mask & BIT(NL80211_STA_FLAG_ASSOCIATED)) &&
1493 (set & BIT(NL80211_STA_FLAG_ASSOCIATED)))) {
1494 ret = sta_apply_auth_flags(local, sta, mask, set);
1495 if (ret)
1496 return ret;
1497 }
1498
1499 if (mask & BIT(NL80211_STA_FLAG_SHORT_PREAMBLE)) {
1500 if (set & BIT(NL80211_STA_FLAG_SHORT_PREAMBLE))
1501 set_sta_flag(sta, WLAN_STA_SHORT_PREAMBLE);
1502 else
1503 clear_sta_flag(sta, WLAN_STA_SHORT_PREAMBLE);
1504 }
1505
1506 if (mask & BIT(NL80211_STA_FLAG_MFP)) {
1507 sta->sta.mfp = !!(set & BIT(NL80211_STA_FLAG_MFP));
1508 if (set & BIT(NL80211_STA_FLAG_MFP))
1509 set_sta_flag(sta, WLAN_STA_MFP);
1510 else
1511 clear_sta_flag(sta, WLAN_STA_MFP);
1512 }
1513
1514 if (mask & BIT(NL80211_STA_FLAG_TDLS_PEER)) {
1515 if (set & BIT(NL80211_STA_FLAG_TDLS_PEER))
1516 set_sta_flag(sta, WLAN_STA_TDLS_PEER);
1517 else
1518 clear_sta_flag(sta, WLAN_STA_TDLS_PEER);
1519 }
1520
1521 /* mark TDLS channel switch support, if the AP allows it */
1522 if (test_sta_flag(sta, WLAN_STA_TDLS_PEER) &&
1523 !sdata->u.mgd.tdls_chan_switch_prohibited &&
1524 params->ext_capab_len >= 4 &&
1525 params->ext_capab[3] & WLAN_EXT_CAPA4_TDLS_CHAN_SWITCH)
1526 set_sta_flag(sta, WLAN_STA_TDLS_CHAN_SWITCH);
1527
1528 if (test_sta_flag(sta, WLAN_STA_TDLS_PEER) &&
1529 !sdata->u.mgd.tdls_wider_bw_prohibited &&
1530 ieee80211_hw_check(&local->hw, TDLS_WIDER_BW) &&
1531 params->ext_capab_len >= 8 &&
1532 params->ext_capab[7] & WLAN_EXT_CAPA8_TDLS_WIDE_BW_ENABLED)
1533 set_sta_flag(sta, WLAN_STA_TDLS_WIDER_BW);
1534
1535 if (params->sta_modify_mask & STATION_PARAM_APPLY_UAPSD) {
1536 sta->sta.uapsd_queues = params->uapsd_queues;
1537 sta->sta.max_sp = params->max_sp;
1538 }
1539
1540 /* The sender might not have sent the last bit, consider it to be 0 */
1541 if (params->ext_capab_len >= 8) {
1542 u8 val = (params->ext_capab[7] &
1543 WLAN_EXT_CAPA8_MAX_MSDU_IN_AMSDU_LSB) >> 7;
1544
1545 /* we did get all the bits, take the MSB as well */
1546 if (params->ext_capab_len >= 9) {
1547 u8 val_msb = params->ext_capab[8] &
1548 WLAN_EXT_CAPA9_MAX_MSDU_IN_AMSDU_MSB;
1549 val_msb <<= 1;
1550 val |= val_msb;
1551 }
1552
1553 switch (val) {
1554 case 1:
1555 sta->sta.max_amsdu_subframes = 32;
1556 break;
1557 case 2:
1558 sta->sta.max_amsdu_subframes = 16;
1559 break;
1560 case 3:
1561 sta->sta.max_amsdu_subframes = 8;
1562 break;
1563 default:
1564 sta->sta.max_amsdu_subframes = 0;
1565 }
1566 }
1567
1568 /*
1569 * cfg80211 validates this (1-2007) and allows setting the AID
1570 * only when creating a new station entry
1571 */
1572 if (params->aid)
1573 sta->sta.aid = params->aid;
1574
1575 /*
1576 * Some of the following updates would be racy if called on an
1577 * existing station, via ieee80211_change_station(). However,
1578 * all such changes are rejected by cfg80211 except for updates
1579 * changing the supported rates on an existing but not yet used
1580 * TDLS peer.
1581 */
1582
1583 if (params->listen_interval >= 0)
1584 sta->listen_interval = params->listen_interval;
1585
1586 if (params->sta_modify_mask & STATION_PARAM_APPLY_STA_TXPOWER) {
1587 sta->sta.txpwr.type = params->txpwr.type;
1588 if (params->txpwr.type == NL80211_TX_POWER_LIMITED)
1589 sta->sta.txpwr.power = params->txpwr.power;
1590 ret = drv_sta_set_txpwr(local, sdata, sta);
1591 if (ret)
1592 return ret;
1593 }
1594
1595 if (params->supported_rates && params->supported_rates_len) {
1596 ieee80211_parse_bitrates(&sdata->vif.bss_conf.chandef,
1597 sband, params->supported_rates,
1598 params->supported_rates_len,
1599 &sta->sta.supp_rates[sband->band]);
1600 }
1601
1602 if (params->ht_capa)
1603 ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband,
1604 params->ht_capa, sta);
1605
1606 /* VHT can override some HT caps such as the A-MSDU max length */
1607 if (params->vht_capa)
1608 ieee80211_vht_cap_ie_to_sta_vht_cap(sdata, sband,
1609 params->vht_capa, sta);
1610
1611 if (params->he_capa)
1612 ieee80211_he_cap_ie_to_sta_he_cap(sdata, sband,
1613 (void *)params->he_capa,
1614 params->he_capa_len,
1615 (void *)params->he_6ghz_capa,
1616 sta);
1617
1618 if (params->opmode_notif_used) {
1619 /* returned value is only needed for rc update, but the
1620 * rc isn't initialized here yet, so ignore it
1621 */
1622 __ieee80211_vht_handle_opmode(sdata, sta, params->opmode_notif,
1623 sband->band);
1624 }
1625
1626 if (params->support_p2p_ps >= 0)
1627 sta->sta.support_p2p_ps = params->support_p2p_ps;
1628
1629 if (ieee80211_vif_is_mesh(&sdata->vif))
1630 sta_apply_mesh_params(local, sta, params);
1631
1632 if (params->airtime_weight) {
1633 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
1634 struct airtime_sched_info *air_sched = &local->airtime[ac];
1635 struct airtime_info *air_info = &sta->airtime[ac];
1636
1637 spin_lock_bh(&air_sched->lock);
1638 for (tid = 0; tid < IEEE80211_NUM_TIDS + 1; tid++) {
1639 if (air_info->weight == params->airtime_weight ||
1640 !sta->sta.txq[tid] ||
1641 ac != ieee80211_ac_from_tid(tid))
1642 continue;
1643
1644 old_weight = air_info->weight;
1645 airtime_weight_set(air_info, params->airtime_weight);
1646
1647 txqi = to_txq_info(sta->sta.txq[tid]);
1648 if (RB_EMPTY_NODE(&txqi->schedule_order))
1649 continue;
1650
1651 ieee80211_update_airtime_weight(local, air_sched, 0, true);
1652 }
1653 spin_unlock_bh(&air_sched->lock);
1654 }
1655 }
1656
1657 /* set the STA state after all sta info from usermode has been set */
1658 if (test_sta_flag(sta, WLAN_STA_TDLS_PEER) ||
1659 set & BIT(NL80211_STA_FLAG_ASSOCIATED)) {
1660 ret = sta_apply_auth_flags(local, sta, mask, set);
1661 if (ret)
1662 return ret;
1663 }
1664
1665 return 0;
1666 }
1667
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 67129 bytes
Desc: not available
URL: <https://lists.bufferbloat.net/pipermail/make-wifi-fast/attachments/20210319/f06a6f71/attachment-0001.gz>
More information about the Make-wifi-fast
mailing list