Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp5981089ybc; Wed, 27 Nov 2019 12:50:27 -0800 (PST) X-Google-Smtp-Source: APXvYqy7+LlOix0Q8CYUeAZOwX+dnVbxREbkDCPtMcBupbvKKoqZdZKCiUg6tXPWQlUn6xILom0A X-Received: by 2002:a05:6402:1694:: with SMTP id a20mr34410188edv.211.1574887827381; Wed, 27 Nov 2019 12:50:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574887827; cv=none; d=google.com; s=arc-20160816; b=I4mCGSGdKg+ZZ306QlAJoK3nNX8hDOGgo+DrV0oLIGhQNF63XvM8cSfN3CQs6roMlX KQzZFSwkNT4ldQV85VBBg3Aj6fRCBJr64aK066kSfGKPN32czgHVgeoK8AgVSDEcymDj dfa9TnTpF7LtNVEiDua8sLEubaq3TIgJqNw3vubLegmPJr9VPq40wDbOFCLx5gc5oTy2 OJxR6lCTePq8h4ZIYCsIvzblCSrakTWtuUzSjeRftwdN+E2FFzIIyKMJ0vBFZJ5Cs93U DI0sLtupTxutjq0jbEmvY1zjjmRrkt4V8Bbv8jYiTNSt5HbIMd5RYOFU+bWdo9RBK/7E Ot7w== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=T2JKxSrYj/cAtv1+VN6ipDEmGMC1hpvqZGw1zCcf0+4=; b=VA09OKSzd/S8gCBimvbF0dPHvKj66Zvo/ylL3zkwi/4XjP5isAfZexmE9/JtEwqbaA Il0gK9hQXgjo2vG+1g2puXKPbNvqYNFutan/CplKpZhPtHpsBiBCea4iRWYMRx325AmI oJjKVVpCC4bgdglD9SqygmuUl8ipqv/tdc7HKefA83Oj8PwVN4oQwxXoeoq+VyZgqtsM XGAgaIhHfmul2e77VdA1DyAiYTi8zvnwpPgOTYGf7nLlbp/JdCDmP489Le/Tk7HlLff5 EBZKlWJ+EVupRwijgdqwLXr3gRXEXsKzINuNrf64T/TzU+fCC3fUR6mTGRFOWyLGipLM WERA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=UkI0lpcC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o16si12185010edi.158.2019.11.27.12.50.03; Wed, 27 Nov 2019 12:50:27 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-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=@kernel.org header.s=default header.b=UkI0lpcC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729948AbfK0Uq7 (ORCPT + 99 others); Wed, 27 Nov 2019 15:46:59 -0500 Received: from mail.kernel.org ([198.145.29.99]:59306 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727008AbfK0Uqz (ORCPT ); Wed, 27 Nov 2019 15:46:55 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 517AA21844; Wed, 27 Nov 2019 20:46:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1574887614; bh=vS6NaVgZQJk4ZRO2M57wzdi0pOreZwpgBQncFbvkgIk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UkI0lpcCvrQcYUFLJCmzVgELHAVgSS3hxp7BAFBQB76puJXsM7+wBUfSu7uBRJvnI 7L3bnznYjcXMZNDyN8GzxxoPmsbmQ10E2bORWPaNdy+AWoGbE2h0Q3D2HBs0MTsJWp 8BcTp/i5H3PeVqLkoFFvkOxWnjUufYnLKhiWNgBQ= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Ali MJ Al-Nasrawy , Kalle Valo , Sasha Levin Subject: [PATCH 4.14 027/211] brcmsmac: AP mode: update beacon when TIM changes Date: Wed, 27 Nov 2019 21:29:20 +0100 Message-Id: <20191127203053.813697712@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191127203049.431810767@linuxfoundation.org> References: <20191127203049.431810767@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ali MJ Al-Nasrawy [ Upstream commit 2258ee58baa554609a3cc3996276e4276f537b6d ] Beacons are not updated to reflect TIM changes. This is not compliant with power-saving client stations as the beacons do not have valid TIM and can cause the network to stall at random occasions and to have highly variable latencies. Fix it by updating beacon templates on mac80211 set_tim callback. Addresses an issue described in: https://marc.info/?i=20180911163534.21312d08%20()%20manjaro Signed-off-by: Ali MJ Al-Nasrawy Signed-off-by: Kalle Valo Signed-off-by: Sasha Levin --- .../broadcom/brcm80211/brcmsmac/mac80211_if.c | 26 +++++++++++++++++++ .../broadcom/brcm80211/brcmsmac/main.h | 1 + 2 files changed, 27 insertions(+) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c index ddfdfe177e245..257968fb3111f 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c @@ -502,6 +502,7 @@ brcms_ops_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) } spin_lock_bh(&wl->lock); + wl->wlc->vif = vif; wl->mute_tx = false; brcms_c_mute(wl->wlc, false); if (vif->type == NL80211_IFTYPE_STATION) @@ -519,6 +520,11 @@ brcms_ops_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) static void brcms_ops_remove_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) { + struct brcms_info *wl = hw->priv; + + spin_lock_bh(&wl->lock); + wl->wlc->vif = NULL; + spin_unlock_bh(&wl->lock); } static int brcms_ops_config(struct ieee80211_hw *hw, u32 changed) @@ -937,6 +943,25 @@ static void brcms_ops_set_tsf(struct ieee80211_hw *hw, spin_unlock_bh(&wl->lock); } +static int brcms_ops_beacon_set_tim(struct ieee80211_hw *hw, + struct ieee80211_sta *sta, bool set) +{ + struct brcms_info *wl = hw->priv; + struct sk_buff *beacon = NULL; + u16 tim_offset = 0; + + spin_lock_bh(&wl->lock); + if (wl->wlc->vif) + beacon = ieee80211_beacon_get_tim(hw, wl->wlc->vif, + &tim_offset, NULL); + if (beacon) + brcms_c_set_new_beacon(wl->wlc, beacon, tim_offset, + wl->wlc->vif->bss_conf.dtim_period); + spin_unlock_bh(&wl->lock); + + return 0; +} + static const struct ieee80211_ops brcms_ops = { .tx = brcms_ops_tx, .start = brcms_ops_start, @@ -955,6 +980,7 @@ static const struct ieee80211_ops brcms_ops = { .flush = brcms_ops_flush, .get_tsf = brcms_ops_get_tsf, .set_tsf = brcms_ops_set_tsf, + .set_tim = brcms_ops_beacon_set_tim, }; void brcms_dpc(unsigned long data) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/main.h b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/main.h index c4d135cff04ad..9f76b880814e8 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/main.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/main.h @@ -563,6 +563,7 @@ struct brcms_c_info { struct wiphy *wiphy; struct scb pri_scb; + struct ieee80211_vif *vif; struct sk_buff *beacon; u16 beacon_tim_offset; -- 2.20.1