* [mac80211-next:master 8/21] net/mac80211/he.c:60:25: sparse: sparse: invalid assignment: |=
@ 2021-01-21 23:32 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2021-01-21 23:32 UTC (permalink / raw)
To: Wen Gong; +Cc: kbuild-all, linux-wireless, Johannes Berg
[-- Attachment #1: Type: text/plain, Size: 13857 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git master
head: 791daf8fc49a16aef77d881f664a648642b75b45
commit: e70a60adbd21519cb67f43c99483506fd4ef4d23 [8/21] mac80211: reduce peer HE MCS/NSS to own capabilities
config: i386-randconfig-s002-20210122 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.3-208-g46a52ca4-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git/commit/?id=e70a60adbd21519cb67f43c99483506fd4ef4d23
git remote add mac80211-next https://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git
git fetch --no-tags mac80211-next master
git checkout e70a60adbd21519cb67f43c99483506fd4ef4d23
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=i386
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
"sparse warnings: (new ones prefixed by >>)"
>> net/mac80211/he.c:60:25: sparse: sparse: invalid assignment: |=
>> net/mac80211/he.c:60:25: sparse: left side has type unsigned short
>> net/mac80211/he.c:60:25: sparse: right side has type restricted __le16
>> net/mac80211/he.c:70:26: sparse: sparse: cast to restricted __le16
net/mac80211/he.c:73:26: sparse: sparse: cast to restricted __le16
net/mac80211/he.c:76:27: sparse: sparse: cast to restricted __le16
net/mac80211/he.c:79:27: sparse: sparse: cast to restricted __le16
net/mac80211/he.c:96:29: sparse: sparse: invalid assignment: &=
net/mac80211/he.c:96:29: sparse: left side has type unsigned short
>> net/mac80211/he.c:96:29: sparse: right side has type fouled restricted __le16
net/mac80211/he.c:98:29: sparse: sparse: invalid assignment: |=
net/mac80211/he.c:98:29: sparse: left side has type unsigned short
net/mac80211/he.c:98:29: sparse: right side has type restricted __le16
net/mac80211/he.c:100:29: sparse: sparse: invalid assignment: &=
net/mac80211/he.c:100:29: sparse: left side has type unsigned short
net/mac80211/he.c:100:29: sparse: right side has type fouled restricted __le16
net/mac80211/he.c:102:29: sparse: sparse: invalid assignment: |=
net/mac80211/he.c:102:29: sparse: left side has type unsigned short
net/mac80211/he.c:102:29: sparse: right side has type restricted __le16
>> net/mac80211/he.c:158:40: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned short [usertype] *he_own_rx @@ got restricted __le16 * @@
net/mac80211/he.c:158:40: sparse: expected unsigned short [usertype] *he_own_rx
net/mac80211/he.c:158:40: sparse: got restricted __le16 *
>> net/mac80211/he.c:159:40: sparse: sparse: incorrect type in argument 2 (different base types) @@ expected unsigned short [usertype] *he_peer_rx @@ got restricted __le16 * @@
net/mac80211/he.c:159:40: sparse: expected unsigned short [usertype] *he_peer_rx
net/mac80211/he.c:159:40: sparse: got restricted __le16 *
>> net/mac80211/he.c:160:40: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected unsigned short [usertype] *he_own_tx @@ got restricted __le16 * @@
net/mac80211/he.c:160:40: sparse: expected unsigned short [usertype] *he_own_tx
net/mac80211/he.c:160:40: sparse: got restricted __le16 *
>> net/mac80211/he.c:161:40: sparse: sparse: incorrect type in argument 4 (different base types) @@ expected unsigned short [usertype] *he_peer_tx @@ got restricted __le16 * @@
net/mac80211/he.c:161:40: sparse: expected unsigned short [usertype] *he_peer_tx
net/mac80211/he.c:161:40: sparse: got restricted __le16 *
net/mac80211/he.c:169:48: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned short [usertype] *he_own_rx @@ got restricted __le16 * @@
net/mac80211/he.c:169:48: sparse: expected unsigned short [usertype] *he_own_rx
net/mac80211/he.c:169:48: sparse: got restricted __le16 *
net/mac80211/he.c:170:48: sparse: sparse: incorrect type in argument 2 (different base types) @@ expected unsigned short [usertype] *he_peer_rx @@ got restricted __le16 * @@
net/mac80211/he.c:170:48: sparse: expected unsigned short [usertype] *he_peer_rx
net/mac80211/he.c:170:48: sparse: got restricted __le16 *
net/mac80211/he.c:171:48: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected unsigned short [usertype] *he_own_tx @@ got restricted __le16 * @@
net/mac80211/he.c:171:48: sparse: expected unsigned short [usertype] *he_own_tx
net/mac80211/he.c:171:48: sparse: got restricted __le16 *
net/mac80211/he.c:172:48: sparse: sparse: incorrect type in argument 4 (different base types) @@ expected unsigned short [usertype] *he_peer_tx @@ got restricted __le16 * @@
net/mac80211/he.c:172:48: sparse: expected unsigned short [usertype] *he_peer_tx
net/mac80211/he.c:172:48: sparse: got restricted __le16 *
>> net/mac80211/he.c:174:43: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned short [usertype] *he_mcs @@ got restricted __le16 * @@
net/mac80211/he.c:174:43: sparse: expected unsigned short [usertype] *he_mcs
net/mac80211/he.c:174:43: sparse: got restricted __le16 *
net/mac80211/he.c:175:43: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned short [usertype] *he_mcs @@ got restricted __le16 * @@
net/mac80211/he.c:175:43: sparse: expected unsigned short [usertype] *he_mcs
net/mac80211/he.c:175:43: sparse: got restricted __le16 *
net/mac80211/he.c:186:48: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned short [usertype] *he_own_rx @@ got restricted __le16 * @@
net/mac80211/he.c:186:48: sparse: expected unsigned short [usertype] *he_own_rx
net/mac80211/he.c:186:48: sparse: got restricted __le16 *
net/mac80211/he.c:187:48: sparse: sparse: incorrect type in argument 2 (different base types) @@ expected unsigned short [usertype] *he_peer_rx @@ got restricted __le16 * @@
net/mac80211/he.c:187:48: sparse: expected unsigned short [usertype] *he_peer_rx
net/mac80211/he.c:187:48: sparse: got restricted __le16 *
net/mac80211/he.c:188:48: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected unsigned short [usertype] *he_own_tx @@ got restricted __le16 * @@
net/mac80211/he.c:188:48: sparse: expected unsigned short [usertype] *he_own_tx
net/mac80211/he.c:188:48: sparse: got restricted __le16 *
net/mac80211/he.c:189:48: sparse: sparse: incorrect type in argument 4 (different base types) @@ expected unsigned short [usertype] *he_peer_tx @@ got restricted __le16 * @@
net/mac80211/he.c:189:48: sparse: expected unsigned short [usertype] *he_peer_tx
net/mac80211/he.c:189:48: sparse: got restricted __le16 *
net/mac80211/he.c:191:43: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned short [usertype] *he_mcs @@ got restricted __le16 * @@
net/mac80211/he.c:191:43: sparse: expected unsigned short [usertype] *he_mcs
net/mac80211/he.c:191:43: sparse: got restricted __le16 *
net/mac80211/he.c:192:43: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned short [usertype] *he_mcs @@ got restricted __le16 * @@
net/mac80211/he.c:192:43: sparse: expected unsigned short [usertype] *he_mcs
net/mac80211/he.c:192:43: sparse: got restricted __le16 *
vim +60 net/mac80211/he.c
54
55 static void ieee80211_he_mcs_disable(u16 *he_mcs)
56 {
57 u32 i;
58
59 for (i = 0; i < 8; i++)
> 60 *he_mcs |= cpu_to_le16(IEEE80211_HE_MCS_NOT_SUPPORTED << i * 2);
61 }
62
63 static void ieee80211_he_mcs_intersection(u16 *he_own_rx, u16 *he_peer_rx,
64 u16 *he_own_tx, u16 *he_peer_tx)
65 {
66 u32 i;
67 u16 own_rx, own_tx, peer_rx, peer_tx;
68
69 for (i = 0; i < 8; i++) {
> 70 own_rx = le16_to_cpu(*he_own_rx);
71 own_rx = (own_rx >> i * 2) & IEEE80211_HE_MCS_NOT_SUPPORTED;
72
73 own_tx = le16_to_cpu(*he_own_tx);
74 own_tx = (own_tx >> i * 2) & IEEE80211_HE_MCS_NOT_SUPPORTED;
75
76 peer_rx = le16_to_cpu(*he_peer_rx);
77 peer_rx = (peer_rx >> i * 2) & IEEE80211_HE_MCS_NOT_SUPPORTED;
78
79 peer_tx = le16_to_cpu(*he_peer_tx);
80 peer_tx = (peer_tx >> i * 2) & IEEE80211_HE_MCS_NOT_SUPPORTED;
81
82 if (peer_tx != IEEE80211_HE_MCS_NOT_SUPPORTED) {
83 if (own_rx == IEEE80211_HE_MCS_NOT_SUPPORTED)
84 peer_tx = IEEE80211_HE_MCS_NOT_SUPPORTED;
85 else if (own_rx < peer_tx)
86 peer_tx = own_rx;
87 }
88
89 if (peer_rx != IEEE80211_HE_MCS_NOT_SUPPORTED) {
90 if (own_tx == IEEE80211_HE_MCS_NOT_SUPPORTED)
91 peer_rx = IEEE80211_HE_MCS_NOT_SUPPORTED;
92 else if (own_tx < peer_rx)
93 peer_rx = own_tx;
94 }
95
> 96 *he_peer_rx &=
97 ~cpu_to_le16(IEEE80211_HE_MCS_NOT_SUPPORTED << i * 2);
98 *he_peer_rx |= cpu_to_le16(peer_rx << i * 2);
99
100 *he_peer_tx &=
101 ~cpu_to_le16(IEEE80211_HE_MCS_NOT_SUPPORTED << i * 2);
102 *he_peer_tx |= cpu_to_le16(peer_tx << i * 2);
103 }
104 }
105
106 void
107 ieee80211_he_cap_ie_to_sta_he_cap(struct ieee80211_sub_if_data *sdata,
108 struct ieee80211_supported_band *sband,
109 const u8 *he_cap_ie, u8 he_cap_len,
110 const struct ieee80211_he_6ghz_capa *he_6ghz_capa,
111 struct sta_info *sta)
112 {
113 struct ieee80211_sta_he_cap *he_cap = &sta->sta.he_cap;
114 struct ieee80211_sta_he_cap own_he_cap = sband->iftype_data->he_cap;
115 struct ieee80211_he_cap_elem *he_cap_ie_elem = (void *)he_cap_ie;
116 u8 he_ppe_size;
117 u8 mcs_nss_size;
118 u8 he_total_size;
119 bool own_160, peer_160, own_80p80, peer_80p80;
120
121 memset(he_cap, 0, sizeof(*he_cap));
122
123 if (!he_cap_ie || !ieee80211_get_he_sta_cap(sband))
124 return;
125
126 /* Make sure size is OK */
127 mcs_nss_size = ieee80211_he_mcs_nss_size(he_cap_ie_elem);
128 he_ppe_size =
129 ieee80211_he_ppe_size(he_cap_ie[sizeof(he_cap->he_cap_elem) +
130 mcs_nss_size],
131 he_cap_ie_elem->phy_cap_info);
132 he_total_size = sizeof(he_cap->he_cap_elem) + mcs_nss_size +
133 he_ppe_size;
134 if (he_cap_len < he_total_size)
135 return;
136
137 memcpy(&he_cap->he_cap_elem, he_cap_ie, sizeof(he_cap->he_cap_elem));
138
139 /* HE Tx/Rx HE MCS NSS Support Field */
140 memcpy(&he_cap->he_mcs_nss_supp,
141 &he_cap_ie[sizeof(he_cap->he_cap_elem)], mcs_nss_size);
142
143 /* Check if there are (optional) PPE Thresholds */
144 if (he_cap->he_cap_elem.phy_cap_info[6] &
145 IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT)
146 memcpy(he_cap->ppe_thres,
147 &he_cap_ie[sizeof(he_cap->he_cap_elem) + mcs_nss_size],
148 he_ppe_size);
149
150 he_cap->has_he = true;
151
152 sta->cur_max_bandwidth = ieee80211_sta_cap_rx_bw(sta);
153 sta->sta.bandwidth = ieee80211_sta_cur_vht_bw(sta);
154
155 if (sband->band == NL80211_BAND_6GHZ && he_6ghz_capa)
156 ieee80211_update_from_he_6ghz_capa(he_6ghz_capa, sta);
157
> 158 ieee80211_he_mcs_intersection(&own_he_cap.he_mcs_nss_supp.rx_mcs_80,
> 159 &he_cap->he_mcs_nss_supp.rx_mcs_80,
> 160 &own_he_cap.he_mcs_nss_supp.tx_mcs_80,
> 161 &he_cap->he_mcs_nss_supp.tx_mcs_80);
162
163 own_160 = own_he_cap.he_cap_elem.phy_cap_info[0] &
164 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G;
165 peer_160 = he_cap->he_cap_elem.phy_cap_info[0] &
166 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G;
167
168 if (peer_160 && own_160) {
169 ieee80211_he_mcs_intersection(&own_he_cap.he_mcs_nss_supp.rx_mcs_160,
170 &he_cap->he_mcs_nss_supp.rx_mcs_160,
171 &own_he_cap.he_mcs_nss_supp.tx_mcs_160,
172 &he_cap->he_mcs_nss_supp.tx_mcs_160);
173 } else if (peer_160 && !own_160) {
> 174 ieee80211_he_mcs_disable(&he_cap->he_mcs_nss_supp.rx_mcs_160);
175 ieee80211_he_mcs_disable(&he_cap->he_mcs_nss_supp.tx_mcs_160);
176 he_cap->he_cap_elem.phy_cap_info[0] &=
177 ~IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G;
178 }
179
180 own_80p80 = own_he_cap.he_cap_elem.phy_cap_info[0] &
181 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G;
182 peer_80p80 = he_cap->he_cap_elem.phy_cap_info[0] &
183 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G;
184
185 if (peer_80p80 && own_80p80) {
186 ieee80211_he_mcs_intersection(&own_he_cap.he_mcs_nss_supp.rx_mcs_80p80,
187 &he_cap->he_mcs_nss_supp.rx_mcs_80p80,
188 &own_he_cap.he_mcs_nss_supp.tx_mcs_80p80,
189 &he_cap->he_mcs_nss_supp.tx_mcs_80p80);
190 } else if (peer_80p80 && !own_80p80) {
191 ieee80211_he_mcs_disable(&he_cap->he_mcs_nss_supp.rx_mcs_80p80);
192 ieee80211_he_mcs_disable(&he_cap->he_mcs_nss_supp.tx_mcs_80p80);
193 he_cap->he_cap_elem.phy_cap_info[0] &=
194 ~IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G;
195 }
196 }
197
---
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: 35098 bytes --]
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-01-21 23:34 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-21 23:32 [mac80211-next:master 8/21] net/mac80211/he.c:60:25: sparse: sparse: invalid assignment: |= kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).