From 2660aa98c4565f5e7e61846998730aff03a02c2e Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sat, 16 Mar 2019 20:11:42 +0100 Subject: [PATCH] mt76: mt7603: store software PN/IV in wcid Avoids expensive 64-bit atomic access in the data path Signed-off-by: Felix Fietkau --- mt7603/mac.c | 6 +++++- mt7603/main.c | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/mt7603/mac.c b/mt7603/mac.c index 51a47422..aee74255 100644 --- a/mt7603/mac.c +++ b/mt7603/mac.c @@ -924,7 +924,11 @@ mt7603_mac_write_txwi(struct mt7603_dev *dev, __le32 *txwi, txwi[3] = cpu_to_le32(val); if (key) { - u64 pn = atomic64_inc_return(&key->tx_pn); + u64 pn; + + spin_lock(&dev->mt76.lock); + pn = ++wcid->tx_pn; + spin_unlock(&dev->mt76.lock); txwi[3] |= cpu_to_le32(MT_TXD3_PN_VALID); txwi[4] = cpu_to_le32(pn & GENMASK(31, 0)); diff --git a/mt7603/main.c b/mt7603/main.c index 7849528d..37547231 100644 --- a/mt7603/main.c +++ b/mt7603/main.c @@ -472,6 +472,7 @@ mt7603_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, if (cmd == SET_KEY) { key->hw_key_idx = wcid->idx; wcid->hw_key_idx = idx; + wcid->tx_pn = atomic64_read(&key->tx_pn); } else { if (idx == wcid->hw_key_idx) wcid->hw_key_idx = -1;