Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp1414229ybl; Fri, 13 Dec 2019 15:06:59 -0800 (PST) X-Google-Smtp-Source: APXvYqyETQd+atPSenbnCajHj1mmnyg6wnrqNoSV0f7UrH21/7zI7SGX0lXscQrFOXdV/CPPkuxc X-Received: by 2002:a9d:7984:: with SMTP id h4mr17618217otm.297.1576278419786; Fri, 13 Dec 2019 15:06:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576278419; cv=none; d=google.com; s=arc-20160816; b=jJbMufiGsVb+wDJiKIyed4ZuXZHTN2cXo7qLOqULslD7oo555l0AeJQHmcCHkvx8q9 38TsXEo8eINcYB+CKzEi73/+3cTZoh4hXGbq4/kMVNsbP2YlT/DeoZ6hfxzaQ6TuFRyF QzJJSZsXRIns1l3F5Ha/1sfj18jUCS2dPCPaUAx//0ooAfio2y4WkWxVDMEWro4t/+fz cdJKu6Mwg2yrzr6Ezi5aIsluwfNbG93KYQxqSHURdc8IhRyMtKMX6tQCks7jKq0+Lngv KPzfkye84jl6oAB7G3N+LC4oPKIE55qpDDqbvRd3ocWqe7YgDg6C1FmPzADoChMnJIN3 S0wQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature:dkim-filter; bh=Ss+rya9gENIn4uuurpCOIOCeO7LyR2Pmtw0LyeB7FM8=; b=lF7DwmBQ3vQTy+moM0R+YTcJPZEkzL3mnE2e+CqTRCixVJV6M+i3qPTwn3hnd2TDGE 5VuZVpD9prH86MHGsW3ebmtG1rvqTsCgHZ+xm4yxhD14tLW+6yWOPh8k9Fm8c2o9X+F6 sSZC4CXx/n6C8RW253yocv8NNjaZvqnK4BsF6wyauYMKRnR9STMSst1AGi38oML/VgHd cBYMOkBaOVenkgE2zkVtwtxcZ9rDz4LFtOAt56/15jUT2s1a3Z1c+P1ugo6UmsL/YA0S CxQU5vEYPFU7ZZrLWRv5qYP71oTPj7XCH/Y4Qt/Dji6kMjvPgqPiIjGCVeh/fiyF7qih GKmQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@candelatech.com header.s=default header.b="H/IAHQBq"; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=candelatech.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k130si5632973oih.135.2019.12.13.15.06.35; Fri, 13 Dec 2019 15:06:59 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@candelatech.com header.s=default header.b="H/IAHQBq"; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=candelatech.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726599AbfLMXDj (ORCPT + 99 others); Fri, 13 Dec 2019 18:03:39 -0500 Received: from mail2.candelatech.com ([208.74.158.173]:53834 "EHLO mail3.candelatech.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725818AbfLMXDj (ORCPT ); Fri, 13 Dec 2019 18:03:39 -0500 Received: from ben-dt4.candelatech.com (50-251-239-81-static.hfc.comcastbusiness.net [50.251.239.81]) by mail3.candelatech.com (Postfix) with ESMTP id CD01013C283; Fri, 13 Dec 2019 15:03:38 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 mail3.candelatech.com CD01013C283 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=candelatech.com; s=default; t=1576278218; bh=nrZ+ZPFdTbkFsXdGJ10yYNzH6iDSN5C3EyCucdyjkFE=; h=From:To:Cc:Subject:Date:From; b=H/IAHQBqxKxu+yqAbd8UZKsbWMik1KTLABps7lXuJKfhiFaqzVILRt0WOHjWbnWQY lU/c5vHYwxsVC+yr5S7zmEduOEdxKRE16EjkCsk5G/sHzmnOOiwCHEwrW2PEaFGpGj CSLBsI5XNsXX/YgEuUKSdOsNZZoRTIJSodMB7j00= From: greearb@candelatech.com To: linux-wireless@vger.kernel.org Cc: Ben Greear Subject: [RFC] mac80211: Fix setting txpower to zero. Date: Fri, 13 Dec 2019 15:03:33 -0800 Message-Id: <20191213230334.27631-1-greearb@candelatech.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Ben Greear With multiple VIFS ath10k, and probably others, tries to find the minimum txpower for all vifs and uses that when setting txpower in the firmware. If a second vif is added and starts to scan, it's txpower is not initialized yet and it set to zero. ath10k had a patch to ignore zero values, but then it is impossible to actually set txpower to zero. So, instead initialize the txpower to -1 in mac80211, and let drivers know that means the power has not been set and so should be ignored. This should fix regression in: commit 88407beb1b1462f706a1950a355fd086e1c450b6 Author: Ryan Hsu Date: Tue Dec 13 14:55:19 2016 -0800 ath10k: fix incorrect txpower set by P2P_DEVICE interface Tested on ath10k 9984 with ath10k-ct firmware. Signed-off-by: Ben Greear --- drivers/net/wireless/ath/ath10k/mac.c | 2 +- drivers/net/wireless/ath/ath9k/main.c | 3 +++ drivers/net/wireless/ath/ath9k/xmit.c | 7 +++++-- include/net/mac80211.h | 2 +- net/mac80211/iface.c | 1 + net/mac80211/main.c | 2 ++ 6 files changed, 13 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c index 289d03da14b2..c846f232e930 100644 --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c @@ -5906,7 +5906,7 @@ static int ath10k_mac_txpower_recalc(struct ath10k *ar) lockdep_assert_held(&ar->conf_mutex); list_for_each_entry(arvif, &ar->arvifs, list) { - if (arvif->txpower <= 0) + if (arvif->txpower < 0) /* txpower not initialized yet? */ continue; if (txpower == -1) diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 14f253199909..2edf70cf7e7e 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c @@ -1196,6 +1196,9 @@ static void ath9k_tpc_vif_iter(void *data, u8 *mac, struct ieee80211_vif *vif) { int *power = data; + if (vif->bss_conf.txpower < 0) + return; + if (*power < vif->bss_conf.txpower) *power = vif->bss_conf.txpower; } diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index 751d0d0550b5..82c592ca2cd2 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c @@ -2114,10 +2114,13 @@ static void setup_frame_info(struct ieee80211_hw *hw, if (tx_info->control.vif) { struct ieee80211_vif *vif = tx_info->control.vif; - + if (vif->bss_conf.txpower < 0) + goto nonvifpower; txpower = 2 * vif->bss_conf.txpower; } else { - struct ath_softc *sc = hw->priv; + struct ath_softc *sc; + nonvifpower: + sc = hw->priv; txpower = sc->cur_chan->cur_txpower; } diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 2b70b9268f76..db66520c5389 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -569,7 +569,7 @@ struct ieee80211_ftm_responder_params { * @ssid: The SSID of the current vif. Valid in AP and IBSS mode. * @ssid_len: Length of SSID given in @ssid. * @hidden_ssid: The SSID of the current vif is hidden. Only valid in AP-mode. - * @txpower: TX power in dBm + * @txpower: TX power in dBm. -1 means not configured. * @txpower_type: TX power adjustment used to control per packet Transmit * Power Control (TPC) in lower driver for the current vif. In particular * TPC is enabled if value passed in %txpower_type is diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index b0c2df6e22c5..49fcf9d80f85 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c @@ -1459,6 +1459,7 @@ static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata, sdata->control_port_no_encrypt = false; sdata->encrypt_headroom = IEEE80211_ENCRYPT_HEADROOM; sdata->vif.bss_conf.idle = true; + sdata->vif.bss_conf.txpower = -1; /* unset */ sdata->noack_map = 0; diff --git a/net/mac80211/main.c b/net/mac80211/main.c index a148509a88bc..2f53188851ee 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c @@ -145,6 +145,8 @@ static u32 ieee80211_hw_conf_chan(struct ieee80211_local *local) continue; if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) continue; + if (sdata->vif.bss_conf.txpower < 0) + continue; power = min(power, sdata->vif.bss_conf.txpower); } rcu_read_unlock(); -- 2.20.1