Linux wireless drivers development
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: P Praneesh <ppranees@codeaurora.org>, johannes@sipsolutions.net
Cc: kbuild-all@lists.01.org, linux-wireless@vger.kernel.org,
	P Praneesh <ppranees@codeaurora.org>
Subject: Re: [PATCH v2] mac80211: avoid bss color setting in non-he mode
Date: Tue, 7 Jul 2020 20:25:07 +0800	[thread overview]
Message-ID: <202007072025.kYVTuB61%lkp@intel.com> (raw)
In-Reply-To: <1594114572-26168-1-git-send-email-ppranees@codeaurora.org>

[-- Attachment #1: Type: text/plain, Size: 15596 bytes --]

Hi Praneesh,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on mac80211-next/master]
[also build test ERROR on mac80211/master v5.8-rc4 next-20200707]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use  as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/P-Praneesh/mac80211-avoid-bss-color-setting-in-non-he-mode/20200707-173732
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git master
config: nios2-allyesconfig (attached as .config)
compiler: nios2-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
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=nios2 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   net/mac80211/mlme.c: In function 'ieee80211_assoc_success':
>> net/mac80211/mlme.c:3465:8: error: 'params' undeclared (first use in this function); did you mean 'parameq'?
    3465 |   if (!params->he_bss_color.disabled)
         |        ^~~~~~
         |        parameq
   net/mac80211/mlme.c:3465:8: note: each undeclared identifier is reported only once for each function it appears in

vim +3465 net/mac80211/mlme.c

  3250	
  3251	static bool ieee80211_assoc_success(struct ieee80211_sub_if_data *sdata,
  3252					    struct cfg80211_bss *cbss,
  3253					    struct ieee80211_mgmt *mgmt, size_t len,
  3254					    struct ieee802_11_elems *elems)
  3255	{
  3256		struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
  3257		struct ieee80211_local *local = sdata->local;
  3258		struct ieee80211_supported_band *sband;
  3259		struct sta_info *sta;
  3260		u16 capab_info, aid;
  3261		struct ieee80211_bss_conf *bss_conf = &sdata->vif.bss_conf;
  3262		const struct cfg80211_bss_ies *bss_ies = NULL;
  3263		struct ieee80211_mgd_assoc_data *assoc_data = ifmgd->assoc_data;
  3264		bool is_6ghz = cbss->channel->band == NL80211_BAND_6GHZ;
  3265		u32 changed = 0;
  3266		int err;
  3267		bool ret;
  3268	
  3269		/* AssocResp and ReassocResp have identical structure */
  3270	
  3271		aid = le16_to_cpu(mgmt->u.assoc_resp.aid);
  3272		capab_info = le16_to_cpu(mgmt->u.assoc_resp.capab_info);
  3273	
  3274		/*
  3275		 * The 5 MSB of the AID field are reserved
  3276		 * (802.11-2016 9.4.1.8 AID field)
  3277		 */
  3278		aid &= 0x7ff;
  3279	
  3280		ifmgd->broken_ap = false;
  3281	
  3282		if (aid == 0 || aid > IEEE80211_MAX_AID) {
  3283			sdata_info(sdata, "invalid AID value %d (out of range), turn off PS\n",
  3284				   aid);
  3285			aid = 0;
  3286			ifmgd->broken_ap = true;
  3287		}
  3288	
  3289		if (!elems->supp_rates) {
  3290			sdata_info(sdata, "no SuppRates element in AssocResp\n");
  3291			return false;
  3292		}
  3293	
  3294		sdata->vif.bss_conf.aid = aid;
  3295		ifmgd->tdls_chan_switch_prohibited =
  3296			elems->ext_capab && elems->ext_capab_len >= 5 &&
  3297			(elems->ext_capab[4] & WLAN_EXT_CAPA5_TDLS_CH_SW_PROHIBITED);
  3298	
  3299		/*
  3300		 * Some APs are erroneously not including some information in their
  3301		 * (re)association response frames. Try to recover by using the data
  3302		 * from the beacon or probe response. This seems to afflict mobile
  3303		 * 2G/3G/4G wifi routers, reported models include the "Onda PN51T",
  3304		 * "Vodafone PocketWiFi 2", "ZTE MF60" and a similar T-Mobile device.
  3305		 */
  3306		if (!is_6ghz &&
  3307		    ((assoc_data->wmm && !elems->wmm_param) ||
  3308		     (!(ifmgd->flags & IEEE80211_STA_DISABLE_HT) &&
  3309		      (!elems->ht_cap_elem || !elems->ht_operation)) ||
  3310		     (!(ifmgd->flags & IEEE80211_STA_DISABLE_VHT) &&
  3311		      (!elems->vht_cap_elem || !elems->vht_operation)))) {
  3312			const struct cfg80211_bss_ies *ies;
  3313			struct ieee802_11_elems bss_elems;
  3314	
  3315			rcu_read_lock();
  3316			ies = rcu_dereference(cbss->ies);
  3317			if (ies)
  3318				bss_ies = kmemdup(ies, sizeof(*ies) + ies->len,
  3319						  GFP_ATOMIC);
  3320			rcu_read_unlock();
  3321			if (!bss_ies)
  3322				return false;
  3323	
  3324			ieee802_11_parse_elems(bss_ies->data, bss_ies->len,
  3325					       false, &bss_elems,
  3326					       mgmt->bssid,
  3327					       assoc_data->bss->bssid);
  3328			if (assoc_data->wmm &&
  3329			    !elems->wmm_param && bss_elems.wmm_param) {
  3330				elems->wmm_param = bss_elems.wmm_param;
  3331				sdata_info(sdata,
  3332					   "AP bug: WMM param missing from AssocResp\n");
  3333			}
  3334	
  3335			/*
  3336			 * Also check if we requested HT/VHT, otherwise the AP doesn't
  3337			 * have to include the IEs in the (re)association response.
  3338			 */
  3339			if (!elems->ht_cap_elem && bss_elems.ht_cap_elem &&
  3340			    !(ifmgd->flags & IEEE80211_STA_DISABLE_HT)) {
  3341				elems->ht_cap_elem = bss_elems.ht_cap_elem;
  3342				sdata_info(sdata,
  3343					   "AP bug: HT capability missing from AssocResp\n");
  3344			}
  3345			if (!elems->ht_operation && bss_elems.ht_operation &&
  3346			    !(ifmgd->flags & IEEE80211_STA_DISABLE_HT)) {
  3347				elems->ht_operation = bss_elems.ht_operation;
  3348				sdata_info(sdata,
  3349					   "AP bug: HT operation missing from AssocResp\n");
  3350			}
  3351			if (!elems->vht_cap_elem && bss_elems.vht_cap_elem &&
  3352			    !(ifmgd->flags & IEEE80211_STA_DISABLE_VHT)) {
  3353				elems->vht_cap_elem = bss_elems.vht_cap_elem;
  3354				sdata_info(sdata,
  3355					   "AP bug: VHT capa missing from AssocResp\n");
  3356			}
  3357			if (!elems->vht_operation && bss_elems.vht_operation &&
  3358			    !(ifmgd->flags & IEEE80211_STA_DISABLE_VHT)) {
  3359				elems->vht_operation = bss_elems.vht_operation;
  3360				sdata_info(sdata,
  3361					   "AP bug: VHT operation missing from AssocResp\n");
  3362			}
  3363		}
  3364	
  3365		/*
  3366		 * We previously checked these in the beacon/probe response, so
  3367		 * they should be present here. This is just a safety net.
  3368		 */
  3369		if (!is_6ghz && !(ifmgd->flags & IEEE80211_STA_DISABLE_HT) &&
  3370		    (!elems->wmm_param || !elems->ht_cap_elem || !elems->ht_operation)) {
  3371			sdata_info(sdata,
  3372				   "HT AP is missing WMM params or HT capability/operation\n");
  3373			ret = false;
  3374			goto out;
  3375		}
  3376	
  3377		if (!is_6ghz && !(ifmgd->flags & IEEE80211_STA_DISABLE_VHT) &&
  3378		    (!elems->vht_cap_elem || !elems->vht_operation)) {
  3379			sdata_info(sdata,
  3380				   "VHT AP is missing VHT capability/operation\n");
  3381			ret = false;
  3382			goto out;
  3383		}
  3384	
  3385		if (is_6ghz && !(ifmgd->flags & IEEE80211_STA_DISABLE_HE) &&
  3386		    !elems->he_6ghz_capa) {
  3387			sdata_info(sdata,
  3388				   "HE 6 GHz AP is missing HE 6 GHz band capability\n");
  3389			ret = false;
  3390			goto out;
  3391		}
  3392	
  3393		mutex_lock(&sdata->local->sta_mtx);
  3394		/*
  3395		 * station info was already allocated and inserted before
  3396		 * the association and should be available to us
  3397		 */
  3398		sta = sta_info_get(sdata, cbss->bssid);
  3399		if (WARN_ON(!sta)) {
  3400			mutex_unlock(&sdata->local->sta_mtx);
  3401			ret = false;
  3402			goto out;
  3403		}
  3404	
  3405		sband = ieee80211_get_sband(sdata);
  3406		if (!sband) {
  3407			mutex_unlock(&sdata->local->sta_mtx);
  3408			ret = false;
  3409			goto out;
  3410		}
  3411	
  3412		if (!(ifmgd->flags & IEEE80211_STA_DISABLE_HE) &&
  3413		    (!elems->he_cap || !elems->he_operation)) {
  3414			mutex_unlock(&sdata->local->sta_mtx);
  3415			sdata_info(sdata,
  3416				   "HE AP is missing HE capability/operation\n");
  3417			ret = false;
  3418			goto out;
  3419		}
  3420	
  3421		/* Set up internal HT/VHT capabilities */
  3422		if (elems->ht_cap_elem && !(ifmgd->flags & IEEE80211_STA_DISABLE_HT))
  3423			ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband,
  3424							  elems->ht_cap_elem, sta);
  3425	
  3426		if (elems->vht_cap_elem && !(ifmgd->flags & IEEE80211_STA_DISABLE_VHT))
  3427			ieee80211_vht_cap_ie_to_sta_vht_cap(sdata, sband,
  3428							    elems->vht_cap_elem, sta);
  3429	
  3430		if (elems->he_operation && !(ifmgd->flags & IEEE80211_STA_DISABLE_HE) &&
  3431		    elems->he_cap) {
  3432			ieee80211_he_cap_ie_to_sta_he_cap(sdata, sband,
  3433							  elems->he_cap,
  3434							  elems->he_cap_len,
  3435							  elems->he_6ghz_capa,
  3436							  sta);
  3437	
  3438			bss_conf->he_support = sta->sta.he_cap.has_he;
  3439			if (elems->rsnx && elems->rsnx_len &&
  3440			    (elems->rsnx[0] & WLAN_RSNX_CAPA_PROTECTED_TWT) &&
  3441			    wiphy_ext_feature_isset(local->hw.wiphy,
  3442						    NL80211_EXT_FEATURE_PROTECTED_TWT))
  3443				bss_conf->twt_protected = true;
  3444			else
  3445				bss_conf->twt_protected = false;
  3446	
  3447			changed |= ieee80211_recalc_twt_req(sdata, sta, elems);
  3448		} else {
  3449			bss_conf->he_support = false;
  3450			bss_conf->twt_requester = false;
  3451			bss_conf->twt_protected = false;
  3452		}
  3453	
  3454		if (bss_conf->he_support) {
  3455			bss_conf->he_bss_color.color =
  3456				le32_get_bits(elems->he_operation->he_oper_params,
  3457					      IEEE80211_HE_OPERATION_BSS_COLOR_MASK);
  3458			bss_conf->he_bss_color.partial =
  3459				le32_get_bits(elems->he_operation->he_oper_params,
  3460					      IEEE80211_HE_OPERATION_PARTIAL_BSS_COLOR);
  3461			bss_conf->he_bss_color.disabled =
  3462				le32_get_bits(elems->he_operation->he_oper_params,
  3463					      IEEE80211_HE_OPERATION_BSS_COLOR_DISABLED);
  3464	
> 3465			if (!params->he_bss_color.disabled)
  3466				changed |= BSS_CHANGED_HE_BSS_COLOR;
  3467	
  3468			bss_conf->htc_trig_based_pkt_ext =
  3469				le32_get_bits(elems->he_operation->he_oper_params,
  3470				      IEEE80211_HE_OPERATION_DFLT_PE_DURATION_MASK);
  3471			bss_conf->frame_time_rts_th =
  3472				le32_get_bits(elems->he_operation->he_oper_params,
  3473				      IEEE80211_HE_OPERATION_RTS_THRESHOLD_MASK);
  3474	
  3475			bss_conf->multi_sta_back_32bit =
  3476				sta->sta.he_cap.he_cap_elem.mac_cap_info[2] &
  3477				IEEE80211_HE_MAC_CAP2_32BIT_BA_BITMAP;
  3478	
  3479			bss_conf->ack_enabled =
  3480				sta->sta.he_cap.he_cap_elem.mac_cap_info[2] &
  3481				IEEE80211_HE_MAC_CAP2_ACK_EN;
  3482	
  3483			bss_conf->uora_exists = !!elems->uora_element;
  3484			if (elems->uora_element)
  3485				bss_conf->uora_ocw_range = elems->uora_element[0];
  3486	
  3487			ieee80211_he_op_ie_to_bss_conf(&sdata->vif, elems->he_operation);
  3488			ieee80211_he_spr_ie_to_bss_conf(&sdata->vif, elems->he_spr);
  3489			/* TODO: OPEN: what happens if BSS color disable is set? */
  3490		}
  3491	
  3492		if (cbss->transmitted_bss) {
  3493			bss_conf->nontransmitted = true;
  3494			ether_addr_copy(bss_conf->transmitter_bssid,
  3495					cbss->transmitted_bss->bssid);
  3496			bss_conf->bssid_indicator = cbss->max_bssid_indicator;
  3497			bss_conf->bssid_index = cbss->bssid_index;
  3498		}
  3499	
  3500		/*
  3501		 * Some APs, e.g. Netgear WNDR3700, report invalid HT operation data
  3502		 * in their association response, so ignore that data for our own
  3503		 * configuration. If it changed since the last beacon, we'll get the
  3504		 * next beacon and update then.
  3505		 */
  3506	
  3507		/*
  3508		 * If an operating mode notification IE is present, override the
  3509		 * NSS calculation (that would be done in rate_control_rate_init())
  3510		 * and use the # of streams from that element.
  3511		 */
  3512		if (elems->opmode_notif &&
  3513		    !(*elems->opmode_notif & IEEE80211_OPMODE_NOTIF_RX_NSS_TYPE_BF)) {
  3514			u8 nss;
  3515	
  3516			nss = *elems->opmode_notif & IEEE80211_OPMODE_NOTIF_RX_NSS_MASK;
  3517			nss >>= IEEE80211_OPMODE_NOTIF_RX_NSS_SHIFT;
  3518			nss += 1;
  3519			sta->sta.rx_nss = nss;
  3520		}
  3521	
  3522		rate_control_rate_init(sta);
  3523	
  3524		if (ifmgd->flags & IEEE80211_STA_MFP_ENABLED) {
  3525			set_sta_flag(sta, WLAN_STA_MFP);
  3526			sta->sta.mfp = true;
  3527		} else {
  3528			sta->sta.mfp = false;
  3529		}
  3530	
  3531		sta->sta.wme = elems->wmm_param && local->hw.queues >= IEEE80211_NUM_ACS;
  3532	
  3533		err = sta_info_move_state(sta, IEEE80211_STA_ASSOC);
  3534		if (!err && !(ifmgd->flags & IEEE80211_STA_CONTROL_PORT))
  3535			err = sta_info_move_state(sta, IEEE80211_STA_AUTHORIZED);
  3536		if (err) {
  3537			sdata_info(sdata,
  3538				   "failed to move station %pM to desired state\n",
  3539				   sta->sta.addr);
  3540			WARN_ON(__sta_info_destroy(sta));
  3541			mutex_unlock(&sdata->local->sta_mtx);
  3542			ret = false;
  3543			goto out;
  3544		}
  3545	
  3546		mutex_unlock(&sdata->local->sta_mtx);
  3547	
  3548		/*
  3549		 * Always handle WMM once after association regardless
  3550		 * of the first value the AP uses. Setting -1 here has
  3551		 * that effect because the AP values is an unsigned
  3552		 * 4-bit value.
  3553		 */
  3554		ifmgd->wmm_last_param_set = -1;
  3555		ifmgd->mu_edca_last_param_set = -1;
  3556	
  3557		if (ifmgd->flags & IEEE80211_STA_DISABLE_WMM) {
  3558			ieee80211_set_wmm_default(sdata, false, false);
  3559		} else if (!ieee80211_sta_wmm_params(local, sdata, elems->wmm_param,
  3560						     elems->wmm_param_len,
  3561						     elems->mu_edca_param_set)) {
  3562			/* still enable QoS since we might have HT/VHT */
  3563			ieee80211_set_wmm_default(sdata, false, true);
  3564			/* set the disable-WMM flag in this case to disable
  3565			 * tracking WMM parameter changes in the beacon if
  3566			 * the parameters weren't actually valid. Doing so
  3567			 * avoids changing parameters very strangely when
  3568			 * the AP is going back and forth between valid and
  3569			 * invalid parameters.
  3570			 */
  3571			ifmgd->flags |= IEEE80211_STA_DISABLE_WMM;
  3572		}
  3573		changed |= BSS_CHANGED_QOS;
  3574	
  3575		if (elems->max_idle_period_ie) {
  3576			bss_conf->max_idle_period =
  3577				le16_to_cpu(elems->max_idle_period_ie->max_idle_period);
  3578			bss_conf->protected_keep_alive =
  3579				!!(elems->max_idle_period_ie->idle_options &
  3580				   WLAN_IDLE_OPTIONS_PROTECTED_KEEP_ALIVE);
  3581			changed |= BSS_CHANGED_KEEP_ALIVE;
  3582		} else {
  3583			bss_conf->max_idle_period = 0;
  3584			bss_conf->protected_keep_alive = false;
  3585		}
  3586	
  3587		/* set assoc capability (AID was already set earlier),
  3588		 * ieee80211_set_associated() will tell the driver */
  3589		bss_conf->assoc_capability = capab_info;
  3590		ieee80211_set_associated(sdata, cbss, changed);
  3591	
  3592		/*
  3593		 * If we're using 4-addr mode, let the AP know that we're
  3594		 * doing so, so that it can create the STA VLAN on its side
  3595		 */
  3596		if (ifmgd->use_4addr)
  3597			ieee80211_send_4addr_nullfunc(local, sdata);
  3598	
  3599		/*
  3600		 * Start timer to probe the connection to the AP now.
  3601		 * Also start the timer that will detect beacon loss.
  3602		 */
  3603		ieee80211_sta_rx_notify(sdata, (struct ieee80211_hdr *)mgmt);
  3604		ieee80211_sta_reset_beacon_monitor(sdata);
  3605	
  3606		ret = true;
  3607	 out:
  3608		kfree(bss_ies);
  3609		return ret;
  3610	}
  3611	

---
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: 55891 bytes --]

  reply	other threads:[~2020-07-07 12:56 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-07  9:36 [PATCH v2] mac80211: avoid bss color setting in non-he mode P Praneesh
2020-07-07 12:25 ` kernel test robot [this message]
2020-07-07 13:39 ` kernel test robot

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=202007072025.kYVTuB61%lkp@intel.com \
    --to=lkp@intel.com \
    --cc=johannes@sipsolutions.net \
    --cc=kbuild-all@lists.01.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=ppranees@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox