drivers/net/wireless/mediatek/mt76/mt7915/mac.c:2347:22: warning: taking address of packed member 'req_type' of class or structure 'ieee80211_twt_params' may result in an unaligned pointer value

From: kernel test robot
Date: Mon Jul 25 2022 - 01:56:31 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: e0dccc3b76fb35bb257b4118367a883073d7390e
commit: 3782b69d03e714b8ff98b84c7426d8cef0e64d7c mt76: mt7915: introduce mt7915_mac_add_twt_setup routine
date: 9 months ago
config: arm-buildonly-randconfig-r003-20220724 (https://download.01.org/0day-ci/archive/20220725/202207251346.5l0YTQRD-lkp@xxxxxxxxx/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 9e88cbcc403bdf82f29259ad60ff60a8fc4434a1)
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
# install arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3782b69d03e714b8ff98b84c7426d8cef0e64d7c
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 3782b69d03e714b8ff98b84c7426d8cef0e64d7c
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash drivers/net/wireless/mediatek/mt76/ drivers/usb/gadget/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All warnings (new ones prefixed by >>):

>> drivers/net/wireless/mediatek/mt76/mt7915/mac.c:2347:22: warning: taking address of packed member 'req_type' of class or structure 'ieee80211_twt_params' may result in an unaligned pointer value [-Waddress-of-packed-member]
le16p_replace_bits(&twt_agrt->req_type, flowid,
^~~~~~~~~~~~~~~~~~
drivers/net/wireless/mediatek/mt76/mt7915/mac.c:2395:22: warning: taking address of packed member 'req_type' of class or structure 'ieee80211_twt_params' may result in an unaligned pointer value [-Waddress-of-packed-member]
le16p_replace_bits(&twt_agrt->req_type, setup_cmd,
^~~~~~~~~~~~~~~~~~
2 warnings generated.


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

2320
2321 void mt7915_mac_add_twt_setup(struct ieee80211_hw *hw,
2322 struct ieee80211_sta *sta,
2323 struct ieee80211_twt_setup *twt)
2324 {
2325 enum ieee80211_twt_setup_cmd setup_cmd = TWT_SETUP_CMD_REJECT;
2326 struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
2327 struct ieee80211_twt_params *twt_agrt = (void *)twt->params;
2328 u16 req_type = le16_to_cpu(twt_agrt->req_type);
2329 enum ieee80211_twt_setup_cmd sta_setup_cmd;
2330 struct mt7915_dev *dev = mt7915_hw_dev(hw);
2331 struct mt7915_twt_flow *flow;
2332 int flowid, table_id;
2333 u8 exp;
2334
2335 if (mt7915_mac_check_twt_req(twt))
2336 goto out;
2337
2338 mutex_lock(&dev->mt76.mutex);
2339
2340 if (dev->twt.n_agrt == MT7915_MAX_TWT_AGRT)
2341 goto unlock;
2342
2343 if (hweight8(msta->twt.flowid_mask) == ARRAY_SIZE(msta->twt.flow))
2344 goto unlock;
2345
2346 flowid = ffs(~msta->twt.flowid_mask) - 1;
> 2347 le16p_replace_bits(&twt_agrt->req_type, flowid,
2348 IEEE80211_TWT_REQTYPE_FLOWID);
2349
2350 table_id = ffs(~dev->twt.table_mask) - 1;
2351 exp = FIELD_GET(IEEE80211_TWT_REQTYPE_WAKE_INT_EXP, req_type);
2352 sta_setup_cmd = FIELD_GET(IEEE80211_TWT_REQTYPE_SETUP_CMD, req_type);
2353
2354 flow = &msta->twt.flow[flowid];
2355 memset(flow, 0, sizeof(*flow));
2356 INIT_LIST_HEAD(&flow->list);
2357 flow->wcid = msta->wcid.idx;
2358 flow->table_id = table_id;
2359 flow->id = flowid;
2360 flow->duration = twt_agrt->min_twt_dur;
2361 flow->mantissa = twt_agrt->mantissa;
2362 flow->exp = exp;
2363 flow->protection = !!(req_type & IEEE80211_TWT_REQTYPE_PROTECTION);
2364 flow->flowtype = !!(req_type & IEEE80211_TWT_REQTYPE_FLOWTYPE);
2365 flow->trigger = !!(req_type & IEEE80211_TWT_REQTYPE_TRIGGER);
2366
2367 if (sta_setup_cmd == TWT_SETUP_CMD_REQUEST ||
2368 sta_setup_cmd == TWT_SETUP_CMD_SUGGEST) {
2369 u64 interval = (u64)le16_to_cpu(twt_agrt->mantissa) << exp;
2370 u64 flow_tsf, curr_tsf;
2371 u32 rem;
2372
2373 flow->sched = true;
2374 flow->start_tsf = mt7915_mac_twt_sched_list_add(dev, flow);
2375 curr_tsf = __mt7915_get_tsf(hw, msta->vif);
2376 div_u64_rem(curr_tsf - flow->start_tsf, interval, &rem);
2377 flow_tsf = curr_tsf + interval - rem;
2378 twt_agrt->twt = cpu_to_le64(flow_tsf);
2379 } else {
2380 list_add_tail(&flow->list, &dev->twt_list);
2381 }
2382 flow->tsf = le64_to_cpu(twt_agrt->twt);
2383
2384 if (mt7915_mcu_twt_agrt_update(dev, msta->vif, flow, MCU_TWT_AGRT_ADD))
2385 goto unlock;
2386
2387 setup_cmd = TWT_SETUP_CMD_ACCEPT;
2388 dev->twt.table_mask |= BIT(table_id);
2389 msta->twt.flowid_mask |= BIT(flowid);
2390 dev->twt.n_agrt++;
2391
2392 unlock:
2393 mutex_unlock(&dev->mt76.mutex);
2394 out:
2395 le16p_replace_bits(&twt_agrt->req_type, setup_cmd,
2396 IEEE80211_TWT_REQTYPE_SETUP_CMD);
2397 twt->control = (twt->control & IEEE80211_TWT_CONTROL_WAKE_DUR_UNIT) |
2398 (twt->control & IEEE80211_TWT_CONTROL_RX_DISABLED);
2399 }
2400

--
0-DAY CI Kernel Test Service
https://01.org/lkp