From: kernel test robot <lkp@intel.com>
To: Miles Hu <milehu@codeaurora.org>
Cc: kbuild-all@lists.01.org, linux-kernel@vger.kernel.org,
Kalle Valo <kvalo@codeaurora.org>,
Aloka Dixit <alokad@codeaurora.org>,
Lavanya Suresh <lavaks@codeaurora.org>,
Pradeep Chitrapu <pradeepc@codeaurora.org>,
Venkateswara Naralasetty <vnaralas@codeaurora.org>,
Jouni Malinen <jouni@codeaurora.org>
Subject: drivers/net/wireless/ath/ath11k/mac.c:1889:29: warning: 'ath11k_peer_assoc_h_he_limit' reading 16 bytes from a region of size 0
Date: Tue, 7 Jun 2022 10:59:10 +0800 [thread overview]
Message-ID: <202206071043.lpcglnsK-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: f2906aa863381afb0015a9eb7fefad885d4e5a56
commit: 61fe43e7216df6e9a912d831aafc7142fa20f280 ath11k: add support for setting fixed HE rate/gi/ltf
date: 8 months ago
config: arm64-sof-customedconfig-memory-debug-defconfig (https://download.01.org/0day-ci/archive/20220607/202206071043.lpcglnsK-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 11.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://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=61fe43e7216df6e9a912d831aafc7142fa20f280
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 61fe43e7216df6e9a912d831aafc7142fa20f280
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash drivers/net/wireless/ath/ath11k/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
In function 'ath11k_peer_assoc_h_he',
inlined from 'ath11k_peer_assoc_prepare' at drivers/net/wireless/ath/ath11k/mac.c:2232:2:
>> drivers/net/wireless/ath/ath11k/mac.c:1889:29: warning: 'ath11k_peer_assoc_h_he_limit' reading 16 bytes from a region of size 0 [-Wstringop-overread]
1889 | v = ath11k_peer_assoc_h_he_limit(v, he_mcs_mask);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/wireless/ath/ath11k/mac.c: In function 'ath11k_peer_assoc_prepare':
drivers/net/wireless/ath/ath11k/mac.c:1889:29: note: referencing argument 2 of type 'const u16 *' {aka 'const short unsigned int *'}
drivers/net/wireless/ath/ath11k/mac.c:1706:12: note: in a call to function 'ath11k_peer_assoc_h_he_limit'
1706 | static u16 ath11k_peer_assoc_h_he_limit(u16 tx_mcs_set,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function 'ath11k_peer_assoc_h_he',
inlined from 'ath11k_peer_assoc_prepare' at drivers/net/wireless/ath/ath11k/mac.c:2232:2:
drivers/net/wireless/ath/ath11k/mac.c:1902:21: warning: 'ath11k_peer_assoc_h_he_limit' reading 16 bytes from a region of size 0 [-Wstringop-overread]
1902 | v = ath11k_peer_assoc_h_he_limit(v, he_mcs_mask);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/wireless/ath/ath11k/mac.c: In function 'ath11k_peer_assoc_prepare':
drivers/net/wireless/ath/ath11k/mac.c:1902:21: note: referencing argument 2 of type 'const u16 *' {aka 'const short unsigned int *'}
drivers/net/wireless/ath/ath11k/mac.c:1706:12: note: in a call to function 'ath11k_peer_assoc_h_he_limit'
1706 | static u16 ath11k_peer_assoc_h_he_limit(u16 tx_mcs_set,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function 'ath11k_peer_assoc_h_he',
inlined from 'ath11k_peer_assoc_prepare' at drivers/net/wireless/ath/ath11k/mac.c:2232:2:
drivers/net/wireless/ath/ath11k/mac.c:1915:21: warning: 'ath11k_peer_assoc_h_he_limit' reading 16 bytes from a region of size 0 [-Wstringop-overread]
1915 | v = ath11k_peer_assoc_h_he_limit(v, he_mcs_mask);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/wireless/ath/ath11k/mac.c: In function 'ath11k_peer_assoc_prepare':
drivers/net/wireless/ath/ath11k/mac.c:1915:21: note: referencing argument 2 of type 'const u16 *' {aka 'const short unsigned int *'}
drivers/net/wireless/ath/ath11k/mac.c:1706:12: note: in a call to function 'ath11k_peer_assoc_h_he_limit'
1706 | static u16 ath11k_peer_assoc_h_he_limit(u16 tx_mcs_set,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function 'ath11k_peer_assoc_h_he',
inlined from 'ath11k_peer_assoc_prepare' at drivers/net/wireless/ath/ath11k/mac.c:2232:2:
drivers/net/wireless/ath/ath11k/mac.c:1915:21: warning: 'ath11k_peer_assoc_h_he_limit' reading 16 bytes from a region of size 0 [-Wstringop-overread]
1915 | v = ath11k_peer_assoc_h_he_limit(v, he_mcs_mask);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/wireless/ath/ath11k/mac.c: In function 'ath11k_peer_assoc_prepare':
drivers/net/wireless/ath/ath11k/mac.c:1915:21: note: referencing argument 2 of type 'const u16 *' {aka 'const short unsigned int *'}
drivers/net/wireless/ath/ath11k/mac.c:1706:12: note: in a call to function 'ath11k_peer_assoc_h_he_limit'
1706 | static u16 ath11k_peer_assoc_h_he_limit(u16 tx_mcs_set,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function 'ath11k_peer_assoc_h_he',
inlined from 'ath11k_peer_assoc_prepare' at drivers/net/wireless/ath/ath11k/mac.c:2232:2:
drivers/net/wireless/ath/ath11k/mac.c:1915:21: warning: 'ath11k_peer_assoc_h_he_limit' reading 16 bytes from a region of size 0 [-Wstringop-overread]
1915 | v = ath11k_peer_assoc_h_he_limit(v, he_mcs_mask);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/wireless/ath/ath11k/mac.c: In function 'ath11k_peer_assoc_prepare':
drivers/net/wireless/ath/ath11k/mac.c:1915:21: note: referencing argument 2 of type 'const u16 *' {aka 'const short unsigned int *'}
drivers/net/wireless/ath/ath11k/mac.c:1706:12: note: in a call to function 'ath11k_peer_assoc_h_he_limit'
1706 | static u16 ath11k_peer_assoc_h_he_limit(u16 tx_mcs_set,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function 'ath11k_peer_assoc_h_he',
inlined from 'ath11k_peer_assoc_prepare' at drivers/net/wireless/ath/ath11k/mac.c:2232:2:
drivers/net/wireless/ath/ath11k/mac.c:1902:21: warning: 'ath11k_peer_assoc_h_he_limit' reading 16 bytes from a region of size 0 [-Wstringop-overread]
1902 | v = ath11k_peer_assoc_h_he_limit(v, he_mcs_mask);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/wireless/ath/ath11k/mac.c: In function 'ath11k_peer_assoc_prepare':
drivers/net/wireless/ath/ath11k/mac.c:1902:21: note: referencing argument 2 of type 'const u16 *' {aka 'const short unsigned int *'}
drivers/net/wireless/ath/ath11k/mac.c:1706:12: note: in a call to function 'ath11k_peer_assoc_h_he_limit'
1706 | static u16 ath11k_peer_assoc_h_he_limit(u16 tx_mcs_set,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
vim +/ath11k_peer_assoc_h_he_limit +1889 drivers/net/wireless/ath/ath11k/mac.c
1761
1762 static void ath11k_peer_assoc_h_he(struct ath11k *ar,
1763 struct ieee80211_vif *vif,
1764 struct ieee80211_sta *sta,
1765 struct peer_assoc_params *arg)
1766 {
1767 struct ath11k_vif *arvif = (void *)vif->drv_priv;
1768 struct cfg80211_chan_def def;
1769 const struct ieee80211_sta_he_cap *he_cap = &sta->he_cap;
1770 u8 ampdu_factor;
1771 enum nl80211_band band;
1772 u16 *he_mcs_mask;
1773 u8 max_nss, he_mcs;
1774 u16 he_tx_mcs = 0, v = 0;
1775 int i, he_nss, nss_idx;
1776 bool user_rate_valid = true;
1777
1778 if (WARN_ON(ath11k_mac_vif_chan(vif, &def)))
1779 return;
1780
1781 if (!he_cap->has_he)
1782 return;
1783
1784 band = def.chan->band;
1785 he_mcs_mask = arvif->bitrate_mask.control[band].he_mcs;
1786
1787 if (ath11k_peer_assoc_h_he_masked(he_mcs_mask))
1788 return;
1789
1790 arg->he_flag = true;
1791
1792 memcpy_and_pad(&arg->peer_he_cap_macinfo,
1793 sizeof(arg->peer_he_cap_macinfo),
1794 he_cap->he_cap_elem.mac_cap_info,
1795 sizeof(he_cap->he_cap_elem.mac_cap_info),
1796 0);
1797 memcpy_and_pad(&arg->peer_he_cap_phyinfo,
1798 sizeof(arg->peer_he_cap_phyinfo),
1799 he_cap->he_cap_elem.phy_cap_info,
1800 sizeof(he_cap->he_cap_elem.phy_cap_info),
1801 0);
1802 arg->peer_he_ops = vif->bss_conf.he_oper.params;
1803
1804 /* the top most byte is used to indicate BSS color info */
1805 arg->peer_he_ops &= 0xffffff;
1806
1807 /* As per section 26.6.1 11ax Draft5.0, if the Max AMPDU Exponent Extension
1808 * in HE cap is zero, use the arg->peer_max_mpdu as calculated while parsing
1809 * VHT caps(if VHT caps is present) or HT caps (if VHT caps is not present).
1810 *
1811 * For non-zero value of Max AMPDU Extponent Extension in HE MAC caps,
1812 * if a HE STA sends VHT cap and HE cap IE in assoc request then, use
1813 * MAX_AMPDU_LEN_FACTOR as 20 to calculate max_ampdu length.
1814 * If a HE STA that does not send VHT cap, but HE and HT cap in assoc
1815 * request, then use MAX_AMPDU_LEN_FACTOR as 16 to calculate max_ampdu
1816 * length.
1817 */
1818 ampdu_factor = u8_get_bits(he_cap->he_cap_elem.mac_cap_info[3],
1819 IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_MASK);
1820
1821 if (ampdu_factor) {
1822 if (sta->vht_cap.vht_supported)
1823 arg->peer_max_mpdu = (1 << (IEEE80211_HE_VHT_MAX_AMPDU_FACTOR +
1824 ampdu_factor)) - 1;
1825 else if (sta->ht_cap.ht_supported)
1826 arg->peer_max_mpdu = (1 << (IEEE80211_HE_HT_MAX_AMPDU_FACTOR +
1827 ampdu_factor)) - 1;
1828 }
1829
1830 if (he_cap->he_cap_elem.phy_cap_info[6] &
1831 IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT) {
1832 int bit = 7;
1833 int nss, ru;
1834
1835 arg->peer_ppet.numss_m1 = he_cap->ppe_thres[0] &
1836 IEEE80211_PPE_THRES_NSS_MASK;
1837 arg->peer_ppet.ru_bit_mask =
1838 (he_cap->ppe_thres[0] &
1839 IEEE80211_PPE_THRES_RU_INDEX_BITMASK_MASK) >>
1840 IEEE80211_PPE_THRES_RU_INDEX_BITMASK_POS;
1841
1842 for (nss = 0; nss <= arg->peer_ppet.numss_m1; nss++) {
1843 for (ru = 0; ru < 4; ru++) {
1844 u32 val = 0;
1845 int i;
1846
1847 if ((arg->peer_ppet.ru_bit_mask & BIT(ru)) == 0)
1848 continue;
1849 for (i = 0; i < 6; i++) {
1850 val >>= 1;
1851 val |= ((he_cap->ppe_thres[bit / 8] >>
1852 (bit % 8)) & 0x1) << 5;
1853 bit++;
1854 }
1855 arg->peer_ppet.ppet16_ppet8_ru3_ru0[nss] |=
1856 val << (ru * 6);
1857 }
1858 }
1859 }
1860
1861 if (he_cap->he_cap_elem.mac_cap_info[0] & IEEE80211_HE_MAC_CAP0_TWT_RES)
1862 arg->twt_responder = true;
1863 if (he_cap->he_cap_elem.mac_cap_info[0] & IEEE80211_HE_MAC_CAP0_TWT_REQ)
1864 arg->twt_requester = true;
1865
1866 he_nss = ath11k_mac_max_he_nss(he_mcs_mask);
1867
1868 if (he_nss > sta->rx_nss) {
1869 user_rate_valid = false;
1870 for (nss_idx = sta->rx_nss - 1; nss_idx >= 0; nss_idx--) {
1871 if (he_mcs_mask[nss_idx]) {
1872 user_rate_valid = true;
1873 break;
1874 }
1875 }
1876 }
1877
1878 if (!user_rate_valid) {
1879 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "mac setting he range mcs value to peer supported nss %d for peer %pM\n",
1880 sta->rx_nss, sta->addr);
1881 he_mcs_mask[sta->rx_nss - 1] = he_mcs_mask[he_nss - 1];
1882 }
1883
1884 switch (sta->bandwidth) {
1885 case IEEE80211_STA_RX_BW_160:
1886 if (he_cap->he_cap_elem.phy_cap_info[0] &
1887 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G) {
1888 v = le16_to_cpu(he_cap->he_mcs_nss_supp.rx_mcs_80p80);
> 1889 v = ath11k_peer_assoc_h_he_limit(v, he_mcs_mask);
1890 arg->peer_he_rx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_80_80] = v;
1891
1892 v = le16_to_cpu(he_cap->he_mcs_nss_supp.tx_mcs_80p80);
1893 arg->peer_he_tx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_80_80] = v;
1894
1895 arg->peer_he_mcs_count++;
1896 he_tx_mcs = v;
1897 }
1898 v = le16_to_cpu(he_cap->he_mcs_nss_supp.rx_mcs_160);
1899 arg->peer_he_rx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_160] = v;
1900
1901 v = le16_to_cpu(he_cap->he_mcs_nss_supp.tx_mcs_160);
1902 v = ath11k_peer_assoc_h_he_limit(v, he_mcs_mask);
1903 arg->peer_he_tx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_160] = v;
1904
1905 arg->peer_he_mcs_count++;
1906 if (!he_tx_mcs)
1907 he_tx_mcs = v;
1908 fallthrough;
1909
1910 default:
1911 v = le16_to_cpu(he_cap->he_mcs_nss_supp.rx_mcs_80);
1912 arg->peer_he_rx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_80] = v;
1913
1914 v = le16_to_cpu(he_cap->he_mcs_nss_supp.tx_mcs_80);
1915 v = ath11k_peer_assoc_h_he_limit(v, he_mcs_mask);
1916 arg->peer_he_tx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_80] = v;
1917
1918 arg->peer_he_mcs_count++;
1919 if (!he_tx_mcs)
1920 he_tx_mcs = v;
1921 break;
1922 }
1923
1924 /* Calculate peer NSS capability from HE capabilities if STA
1925 * supports HE.
1926 */
1927 for (i = 0, max_nss = 0, he_mcs = 0; i < NL80211_HE_NSS_MAX; i++) {
1928 he_mcs = he_tx_mcs >> (2 * i) & 3;
1929
1930 /* In case of fixed rates, MCS Range in he_tx_mcs might have
1931 * unsupported range, with he_mcs_mask set, so check either of them
1932 * to find nss.
1933 */
1934 if (he_mcs != IEEE80211_HE_MCS_NOT_SUPPORTED ||
1935 he_mcs_mask[i])
1936 max_nss = i + 1;
1937 }
1938 arg->peer_nss = min(sta->rx_nss, max_nss);
1939
1940 ath11k_dbg(ar->ab, ATH11K_DBG_MAC,
1941 "mac he peer %pM nss %d mcs cnt %d\n",
1942 sta->addr, arg->peer_nss, arg->peer_he_mcs_count);
1943 }
1944
--
0-DAY CI Kernel Test Service
https://01.org/lkp
reply other threads:[~2022-06-07 2:59 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=202206071043.lpcglnsK-lkp@intel.com \
--to=lkp@intel.com \
--cc=alokad@codeaurora.org \
--cc=jouni@codeaurora.org \
--cc=kbuild-all@lists.01.org \
--cc=kvalo@codeaurora.org \
--cc=lavaks@codeaurora.org \
--cc=linux-kernel@vger.kernel.org \
--cc=milehu@codeaurora.org \
--cc=pradeepc@codeaurora.org \
--cc=vnaralas@codeaurora.org \
/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.