Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp664588ybi; Fri, 31 May 2019 07:11:57 -0700 (PDT) X-Google-Smtp-Source: APXvYqz9XIhrgyL/kGPijrAPxU1l0u1OVyZ96mu4wHfBpuIeDDXOpF6hoF0+hGnBLDmpYqO59rk2 X-Received: by 2002:aa7:881a:: with SMTP id c26mr10690265pfo.254.1559311917088; Fri, 31 May 2019 07:11:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559311917; cv=none; d=google.com; s=arc-20160816; b=UuGpeLSWZOLyOKLDXGtEIkXSWa1kT22tiHipxOHzZQ0BUWr+/+DinLHfFRPSjkflMl NA3CoYhT9W08HG7ici6utTm+t6Hm1jL7zUux9CnkE2LeZ+TB4b/BT8URB0+6b8Quvglu gUDYm9vzuiDkwQI2lLFsTANypvim6v43wc56DVhmHS49+NvVodMHtHj7jGrQ4kHYYeIB DBDHEGBZo2dTJnXyiFifsvzkrAx7mAB4GsJJwvQysPH9LwoAElBjOdCxILfu4Z0iNFSp IntVgFl7O71U5mltsMEVMqNq7Ua5/Q7EIelBwQZtJKrvfK9+YR49sCsE4yTvnJ5HuKWJ zdqQ== 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 :references:in-reply-to:message-id:date:subject:cc:to:from; bh=b1hZ6aUYJ++TN8K+8z7ubrsn5YsWx9/hwN1gqYfDw0Q=; b=atFIq8G2A5oA7sXAXx+u40z2ONvGEUnHj+GEZtuDbEQv6FMNkQjts+v2EWzrz3essz FZIzGwdTI4p6zZ6LgT+8PIYrYjWuYFp0H5uYCuSdT5mrFXhCmkTMxz6Ntu1sv0um+tIO gYlVvkreesTIK0LwWQB6KWaWURp+xURC9Dlf0ahP2qmyuR4mmkQ+Awqg1U6hXqM3RWkb 4YLrgV6d2VJV3nL3sCcmG+uQk1Lrsu9SUTL/UWSrc0tSfPrVyz0CWe0oy4UY57MfRmBW nS8rFYENnO5m8Bj0Fib58GBNASVVz4DJld+5gNUAVvYJ8FX9pf9yxVtwTvKwwcVfZk4G 45NQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p5si6202526pls.431.2019.05.31.07.11.39; Fri, 31 May 2019 07:11:57 -0700 (PDT) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726576AbfEaOKG (ORCPT + 99 others); Fri, 31 May 2019 10:10:06 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:21176 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726037AbfEaOKG (ORCPT ); Fri, 31 May 2019 10:10:06 -0400 X-UUID: be41b96eef4743b3afb8372cf6ec3245-20190531 X-UUID: be41b96eef4743b3afb8372cf6ec3245-20190531 Received: from mtkexhb02.mediatek.inc [(172.21.101.103)] by mailgw02.mediatek.com (envelope-from ) (mhqrelay.mediatek.com ESMTP with TLS) with ESMTP id 1679655166; Fri, 31 May 2019 22:10:01 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs06n2.mediatek.inc (172.21.101.130) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Fri, 31 May 2019 22:09:59 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Fri, 31 May 2019 22:09:59 +0800 From: Ryder Lee To: Felix Fietkau , Lorenzo Bianconi CC: Roy Luo , YF Luo , Yiwei Chung , Sean Wang , Chih-Min Chen , , , , Ryder Lee Subject: [PATCH v2 2/2] mt76: mt7615: fix slow performance when enable encryption Date: Fri, 31 May 2019 22:09:57 +0800 Message-ID: X-Mailer: git-send-email 1.9.1 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-TM-SNTS-SMTP: AD9480DA8A1DFA8B30958A0EB9B5D3731966CFCEAE90CCE5F638CB3AA38699AB2000:8 X-MTK: N Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org Fix wrong WCID assignment and add RKV (RX Key of this entry is valid) flag to check if peer uses the same configuration with previous handshaking. If the configuration is mismatch, WTBL indicates a “cipher mismatch” to stop SEC decryption to prevent the packet from damage. Suggested-by: YF Luo Suggested-by: Yiwei Chung Signed-off-by: Ryder Lee --- Changes since v2 - none --- drivers/net/wireless/mediatek/mt76/mt7615/init.c | 15 +++++++++------ drivers/net/wireless/mediatek/mt76/mt7615/main.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7615/mcu.c | 1 + 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/init.c b/drivers/net/wireless/mediatek/mt76/mt7615/init.c index f860af6a42da..b96c753b7532 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7615/init.c +++ b/drivers/net/wireless/mediatek/mt76/mt7615/init.c @@ -62,16 +62,11 @@ static void mt7615_mac_init(struct mt7615_dev *dev) MT_AGG_ARCR_RATE_DOWN_RATIO_EN | FIELD_PREP(MT_AGG_ARCR_RATE_DOWN_RATIO, 1) | FIELD_PREP(MT_AGG_ARCR_RATE_UP_EXTRA_TH, 4))); - - dev->mt76.global_wcid.idx = MT7615_WTBL_RESERVED; - dev->mt76.global_wcid.hw_key_idx = -1; - rcu_assign_pointer(dev->mt76.wcid[MT7615_WTBL_RESERVED], - &dev->mt76.global_wcid); } static int mt7615_init_hardware(struct mt7615_dev *dev) { - int ret; + int ret, idx; mt76_wr(dev, MT_INT_SOURCE_CSR, ~0); @@ -98,6 +93,14 @@ static int mt7615_init_hardware(struct mt7615_dev *dev) mt7615_mcu_ctrl_pm_state(dev, 0); mt7615_mcu_del_wtbl_all(dev); + /* Beacon and mgmt frames should occupy wcid 0 */ + idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7615_WTBL_STA - 1); + if (idx) + return -ENOSPC; + + dev->mt76.global_wcid.idx = idx; + dev->mt76.global_wcid.hw_key_idx = -1; + rcu_assign_pointer(dev->mt76.wcid[idx], &dev->mt76.global_wcid); return 0; } diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/main.c b/drivers/net/wireless/mediatek/mt76/mt7615/main.c index 585e67fa2728..2cdd339453c8 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7615/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7615/main.c @@ -95,7 +95,7 @@ static int mt7615_add_interface(struct ieee80211_hw *hw, dev->vif_mask |= BIT(mvif->idx); dev->omac_mask |= BIT(mvif->omac_idx); - idx = MT7615_WTBL_RESERVED - 1 - mvif->idx; + idx = MT7615_WTBL_RESERVED - mvif->idx; mvif->sta.wcid.idx = idx; mvif->sta.wcid.hw_key_idx = -1; diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c index 8b8db526cb16..5f38741e7366 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c @@ -882,6 +882,7 @@ int mt7615_mcu_set_wtbl_key(struct mt7615_dev *dev, int wcid, if (cipher == MT_CIPHER_NONE && key) return -EOPNOTSUPP; + req.key.rkv = 1; req.key.cipher_id = cipher; req.key.key_id = key->keyidx; req.key.key_len = key->keylen; -- 2.18.0