Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp6031643ybc; Wed, 27 Nov 2019 13:44:54 -0800 (PST) X-Google-Smtp-Source: APXvYqzBOq8I/k8va2yLSeESOrRikB3ERaA+XLLpB2NwtVe/1AocG5LtQwSVM+NNiWQT+Drs8Rtq X-Received: by 2002:a17:906:8697:: with SMTP id g23mr52568071ejx.177.1574891094375; Wed, 27 Nov 2019 13:44:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574891094; cv=none; d=google.com; s=arc-20160816; b=cfCXmfAowbEzjW60++2t+zlskSev4140MiNEd4QUhdm7k3iD+UdZnV9DnA0JVM3oF6 y5fS+QA+HRrWFEpQ15KQkdyRMJEBk/x9GlePxA1z9R5snNTqVtdOqiLWZTC3PKs0TdRy X7crXijbLwILozkXGk/6yo4+RaDRgP8QgNikFP1Yw+PArCSMzI7ZIwd5BR5Y+tXjE95U O9pumd5D6LpLjXbmSCuJcWHd41Ib20EQf9ikQElptO1HeUnMEmVvQTUW0SG9KuPc/CuB 8uOU4RghlPtbOwYaDwljpnfp5cOYrH1jpfFsbUtrNwjCOxZYM4Dt3YDYUPRserIZgQfq khww== 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=7cFyn46sHBF4/V6ImtDCdd2UbFEedvcXkVbdipSCmTg=; b=Y/Q1+rE46uy3opYka9CoB2mRdkWYT0gl582kNAYYjryDaYT672fNyVORw1INsJMCzA D48xjDqiEc+2XMpaqsYcU+swIf0yNIj1gQkZDzUnJ+xNwDFlgNnDwucv0W9dBWSBi0Fw mbOazneHKwHZuu9wzi+hWtjGNer1iL7VnJvDfsBrRvmma3aFsRgDpRhoSDjdo1ZCjAlH L1utHuGRGtjusli3UQaYK7+ggVMNfbdh80T+zqtabJX2mNH+7Jb3JXHKlaHNjmxX0MJO mXNoevMAeYBKLy/wYn7tre4rZDxo1CTUm7kyIpt6V4UTrxtEb8vud8X/xtiZtFBbir47 F90w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="DmcxoN4/"; 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 n19si10476004ejh.172.2019.11.27.13.44.30; Wed, 27 Nov 2019 13:44:54 -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="DmcxoN4/"; 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 S1729024AbfK0VmW (ORCPT + 99 others); Wed, 27 Nov 2019 16:42:22 -0500 Received: from mail.kernel.org ([198.145.29.99]:44856 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728113AbfK0UkU (ORCPT ); Wed, 27 Nov 2019 15:40:20 -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 4000B215A4; Wed, 27 Nov 2019 20:40:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1574887219; bh=wucw8pbi4C/AdKmqf6xlB6tbRdCrEUwkZjVsOm3WrJQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DmcxoN4/w2yJsgtB63bSSojDrLhkPz1vJdVLv+MNf2UtiFavPFeK7l3mCtAtyOmQQ vFi/VgdbYfc9wyK4Z0ekeo6gRFAYOAIX8iuEmkt3Y31TOciQNKGUepBiYMvaxIj05C SYivk4ejtC/WeKlRF5hq+s17h7qEs2H+uhWpBgNQ= 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.9 019/151] brcmsmac: AP mode: update beacon when TIM changes Date: Wed, 27 Nov 2019 21:30:02 +0100 Message-Id: <20191127203012.098672409@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191127203000.773542911@linuxfoundation.org> References: <20191127203000.773542911@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 7c2a9a9bc372c..a620b2f6c7c4c 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