mt76: move token_lock, token and token_count in mt76_dev
authorLorenzo Bianconi <lorenzo@kernel.org>
Tue, 20 Apr 2021 21:05:31 +0000 (23:05 +0200)
committerFelix Fietkau <nbd@nbd.name>
Wed, 21 Apr 2021 18:55:55 +0000 (20:55 +0200)
Move token_lock, token and token_count data structures in mt76_dev.
This is a preliminary patch to move token management in mt76 common
module since it is shared by mt7615, mt7915 and mt7921 drivers.

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt76.h
drivers/net/wireless/mediatek/mt76/mt7615/mac.c
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h
drivers/net/wireless/mediatek/mt76/mt7615/pci_init.c
drivers/net/wireless/mediatek/mt76/mt7615/pci_mac.c
drivers/net/wireless/mediatek/mt76/mt7915/init.c
drivers/net/wireless/mediatek/mt76/mt7915/mac.c
drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
drivers/net/wireless/mediatek/mt76/mt7921/init.c
drivers/net/wireless/mediatek/mt76/mt7921/mac.c
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h

index 49f3e59..54adc49 100644 (file)
@@ -659,6 +659,10 @@ struct mt76_dev {
        struct mt76_worker tx_worker;
        struct napi_struct tx_napi;
 
+       spinlock_t token_lock;
+       struct idr token;
+       int token_count;
+
        wait_queue_head_t tx_wait;
        struct sk_buff_head status_list;
 
index 747bf90..e3b727c 100644 (file)
@@ -1466,9 +1466,9 @@ mt7615_mac_tx_free_token(struct mt7615_dev *dev, u16 token)
 
        trace_mac_tx_free(dev, token);
 
-       spin_lock_bh(&dev->token_lock);
-       txwi = idr_remove(&dev->token, token);
-       spin_unlock_bh(&dev->token_lock);
+       spin_lock_bh(&mdev->token_lock);
+       txwi = idr_remove(&mdev->token, token);
+       spin_unlock_bh(&mdev->token_lock);
 
        if (!txwi)
                return;
@@ -1977,8 +1977,8 @@ void mt7615_tx_token_put(struct mt7615_dev *dev)
        struct mt76_txwi_cache *txwi;
        int id;
 
-       spin_lock_bh(&dev->token_lock);
-       idr_for_each_entry(&dev->token, txwi, id) {
+       spin_lock_bh(&dev->mt76.token_lock);
+       idr_for_each_entry(&dev->mt76.token, txwi, id) {
                mt7615_txp_skb_unmap(&dev->mt76, txwi);
                if (txwi->skb) {
                        struct ieee80211_hw *hw;
@@ -1988,8 +1988,8 @@ void mt7615_tx_token_put(struct mt7615_dev *dev)
                }
                mt76_put_txwi(&dev->mt76, txwi);
        }
-       spin_unlock_bh(&dev->token_lock);
-       idr_destroy(&dev->token);
+       spin_unlock_bh(&dev->mt76.token_lock);
+       idr_destroy(&dev->mt76.token);
 }
 EXPORT_SYMBOL_GPL(mt7615_tx_token_put);
 
index 4c533b8..989f05e 100644 (file)
@@ -263,9 +263,6 @@ struct mt7615_dev {
        bool flash_eeprom;
        bool dbdc_support;
 
-       spinlock_t token_lock;
-       struct idr token;
-
        u8 fw_ver;
 
        struct work_struct rate_work;
index 736d196..89475d5 100644 (file)
@@ -40,8 +40,8 @@ static int mt7615_init_hardware(struct mt7615_dev *dev)
        mt76_wr(dev, MT_INT_SOURCE_CSR, ~0);
 
        INIT_WORK(&dev->mcu_work, mt7615_pci_init_work);
-       spin_lock_init(&dev->token_lock);
-       idr_init(&dev->token);
+       spin_lock_init(&dev->mt76.token_lock);
+       idr_init(&dev->mt76.token);
 
        ret = mt7615_eeprom_init(dev, addr);
        if (ret < 0)
index d20962c..d5aff40 100644 (file)
@@ -37,9 +37,9 @@ void mt7615_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e)
                        token = le16_to_cpu(txp->hw.msdu_id[0]) &
                                ~MT_MSDU_ID_VALID;
 
-               spin_lock_bh(&dev->token_lock);
-               t = idr_remove(&dev->token, token);
-               spin_unlock_bh(&dev->token_lock);
+               spin_lock_bh(&mdev->token_lock);
+               t = idr_remove(&mdev->token, token);
+               spin_unlock_bh(&mdev->token_lock);
                e->skb = t ? t->skb : NULL;
        }
 
@@ -161,9 +161,9 @@ int mt7615_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
        t = (struct mt76_txwi_cache *)(txwi + mdev->drv->txwi_size);
        t->skb = tx_info->skb;
 
-       spin_lock_bh(&dev->token_lock);
-       id = idr_alloc(&dev->token, t, 0, MT7615_TOKEN_SIZE, GFP_ATOMIC);
-       spin_unlock_bh(&dev->token_lock);
+       spin_lock_bh(&mdev->token_lock);
+       id = idr_alloc(&mdev->token, t, 0, MT7615_TOKEN_SIZE, GFP_ATOMIC);
+       spin_unlock_bh(&mdev->token_lock);
        if (id < 0)
                return id;
 
@@ -314,7 +314,7 @@ void mt7615_mac_reset_work(struct work_struct *work)
                mt7615_dma_reset(dev);
 
                mt7615_tx_token_put(dev);
-               idr_init(&dev->token);
+               idr_init(&dev->mt76.token);
 
                mt76_wr(dev, MT_WPDMA_MEM_RNG_ERR, 0);
 
index 2d6b38d..b97834f 100644 (file)
@@ -351,8 +351,8 @@ static int mt7915_init_hardware(struct mt7915_dev *dev)
        mt76_wr(dev, MT_INT_SOURCE_CSR, ~0);
 
        INIT_WORK(&dev->init_work, mt7915_init_work);
-       spin_lock_init(&dev->token_lock);
-       idr_init(&dev->token);
+       spin_lock_init(&dev->mt76.token_lock);
+       idr_init(&dev->mt76.token);
 
        dev->dbdc_support = !!(mt76_rr(dev, MT_HW_BOUND) & BIT(5));
 
index 6a4b575..a2d60be 100644 (file)
@@ -1046,14 +1046,14 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
        t = (struct mt76_txwi_cache *)(txwi + mdev->drv->txwi_size);
        t->skb = tx_info->skb;
 
-       spin_lock_bh(&dev->token_lock);
-       id = idr_alloc(&dev->token, t, 0, MT7915_TOKEN_SIZE, GFP_ATOMIC);
+       spin_lock_bh(&mdev->token_lock);
+       id = idr_alloc(&mdev->token, t, 0, MT7915_TOKEN_SIZE, GFP_ATOMIC);
        if (id >= 0)
-               dev->token_count++;
+               mdev->token_count++;
 
-       if (dev->token_count >= MT7915_TOKEN_SIZE - MT7915_TOKEN_FREE_THR)
+       if (mdev->token_count >= MT7915_TOKEN_SIZE - MT7915_TOKEN_FREE_THR)
                mt7915_set_tx_blocked(dev, true);
-       spin_unlock_bh(&dev->token_lock);
+       spin_unlock_bh(&mdev->token_lock);
 
        if (id < 0)
                return id;
@@ -1218,14 +1218,14 @@ void mt7915_mac_tx_free(struct mt7915_dev *dev, struct sk_buff *skb)
                msdu = FIELD_GET(MT_TX_FREE_MSDU_ID, info);
                stat = FIELD_GET(MT_TX_FREE_STATUS, info);
 
-               spin_lock_bh(&dev->token_lock);
-               txwi = idr_remove(&dev->token, msdu);
+               spin_lock_bh(&mdev->token_lock);
+               txwi = idr_remove(&mdev->token, msdu);
                if (txwi)
-                       dev->token_count--;
-               if (dev->token_count < MT7915_TOKEN_SIZE - MT7915_TOKEN_FREE_THR &&
+                       mdev->token_count--;
+               if (mdev->token_count < MT7915_TOKEN_SIZE - MT7915_TOKEN_FREE_THR &&
                    dev->mphy.q_tx[0]->blocked)
                        wake = true;
-               spin_unlock_bh(&dev->token_lock);
+               spin_unlock_bh(&mdev->token_lock);
 
                if (!txwi)
                        continue;
@@ -1257,9 +1257,9 @@ void mt7915_mac_tx_free(struct mt7915_dev *dev, struct sk_buff *skb)
        mt7915_mac_sta_poll(dev);
 
        if (wake) {
-               spin_lock_bh(&dev->token_lock);
+               spin_lock_bh(&mdev->token_lock);
                mt7915_set_tx_blocked(dev, false);
-               spin_unlock_bh(&dev->token_lock);
+               spin_unlock_bh(&mdev->token_lock);
        }
 
        mt76_worker_schedule(&dev->mt76.tx_worker);
@@ -1290,9 +1290,9 @@ void mt7915_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e)
 
                txp = mt7915_txwi_to_txp(mdev, e->txwi);
 
-               spin_lock_bh(&dev->token_lock);
-               t = idr_remove(&dev->token, le16_to_cpu(txp->token));
-               spin_unlock_bh(&dev->token_lock);
+               spin_lock_bh(&mdev->token_lock);
+               t = idr_remove(&mdev->token, le16_to_cpu(txp->token));
+               spin_unlock_bh(&mdev->token_lock);
                e->skb = t ? t->skb : NULL;
        }
 
@@ -1588,8 +1588,8 @@ void mt7915_tx_token_put(struct mt7915_dev *dev)
        struct mt76_txwi_cache *txwi;
        int id;
 
-       spin_lock_bh(&dev->token_lock);
-       idr_for_each_entry(&dev->token, txwi, id) {
+       spin_lock_bh(&dev->mt76.token_lock);
+       idr_for_each_entry(&dev->mt76.token, txwi, id) {
                mt7915_txp_skb_unmap(&dev->mt76, txwi);
                if (txwi->skb) {
                        struct ieee80211_hw *hw;
@@ -1598,10 +1598,10 @@ void mt7915_tx_token_put(struct mt7915_dev *dev)
                        ieee80211_free_txskb(hw, txwi->skb);
                }
                mt76_put_txwi(&dev->mt76, txwi);
-               dev->token_count--;
+               dev->mt76.token_count--;
        }
-       spin_unlock_bh(&dev->token_lock);
-       idr_destroy(&dev->token);
+       spin_unlock_bh(&dev->mt76.token_lock);
+       idr_destroy(&dev->mt76.token);
 }
 
 /* system error recovery */
@@ -1649,7 +1649,7 @@ void mt7915_mac_reset_work(struct work_struct *work)
                mt7915_dma_reset(dev);
 
                mt7915_tx_token_put(dev);
-               idr_init(&dev->token);
+               idr_init(&dev->mt76.token);
 
                mt76_wr(dev, MT_MCU_INT_EVENT, MT_MCU_INT_EVENT_DMA_INIT);
                mt7915_wait_reset_state(dev, MT_MCU_CMD_RECOVERY_DONE);
index 80eb352..582c2bf 100644 (file)
@@ -187,10 +187,6 @@ struct mt7915_dev {
 
        u32 hw_pattern;
 
-       spinlock_t token_lock;
-       int token_count;
-       struct idr token;
-
        bool dbdc_support;
        bool flash_mode;
        bool fw_debug;
index cec17a2..a35fdd1 100644 (file)
@@ -170,8 +170,8 @@ static int mt7921_init_hardware(struct mt7921_dev *dev)
 {
        int ret, idx;
 
-       spin_lock_init(&dev->token_lock);
-       idr_init(&dev->token);
+       spin_lock_init(&dev->mt76.token_lock);
+       idr_init(&dev->mt76.token);
 
        ret = mt7921_dma_init(dev);
        if (ret)
index f1efe9e..d1ae4c5 100644 (file)
@@ -824,14 +824,14 @@ int mt7921_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
        t = (struct mt76_txwi_cache *)(txwi + mdev->drv->txwi_size);
        t->skb = tx_info->skb;
 
-       spin_lock_bh(&dev->token_lock);
-       id = idr_alloc(&dev->token, t, 0, MT7921_TOKEN_SIZE, GFP_ATOMIC);
+       spin_lock_bh(&mdev->token_lock);
+       id = idr_alloc(&mdev->token, t, 0, MT7921_TOKEN_SIZE, GFP_ATOMIC);
        if (id >= 0)
-               dev->token_count++;
+               mdev->token_count++;
 
-       if (dev->token_count >= MT7921_TOKEN_SIZE - MT7921_TOKEN_FREE_THR)
+       if (mdev->token_count >= MT7921_TOKEN_SIZE - MT7921_TOKEN_FREE_THR)
                mt7921_set_tx_blocked(dev, true);
-       spin_unlock_bh(&dev->token_lock);
+       spin_unlock_bh(&mdev->token_lock);
 
        if (id < 0)
                return id;
@@ -994,14 +994,14 @@ void mt7921_mac_tx_free(struct mt7921_dev *dev, struct sk_buff *skb)
                msdu = FIELD_GET(MT_TX_FREE_MSDU_ID, info);
                stat = FIELD_GET(MT_TX_FREE_STATUS, info);
 
-               spin_lock_bh(&dev->token_lock);
-               txwi = idr_remove(&dev->token, msdu);
+               spin_lock_bh(&mdev->token_lock);
+               txwi = idr_remove(&mdev->token, msdu);
                if (txwi)
-                       dev->token_count--;
-               if (dev->token_count < MT7921_TOKEN_SIZE - MT7921_TOKEN_FREE_THR &&
+                       mdev->token_count--;
+               if (mdev->token_count < MT7921_TOKEN_SIZE - MT7921_TOKEN_FREE_THR &&
                    dev->mphy.q_tx[0]->blocked)
                        wake = true;
-               spin_unlock_bh(&dev->token_lock);
+               spin_unlock_bh(&mdev->token_lock);
 
                if (!txwi)
                        continue;
@@ -1031,9 +1031,9 @@ void mt7921_mac_tx_free(struct mt7921_dev *dev, struct sk_buff *skb)
        }
 
        if (wake) {
-               spin_lock_bh(&dev->token_lock);
+               spin_lock_bh(&mdev->token_lock);
                mt7921_set_tx_blocked(dev, false);
-               spin_unlock_bh(&dev->token_lock);
+               spin_unlock_bh(&mdev->token_lock);
        }
 
        napi_consume_skb(skb, 1);
@@ -1067,9 +1067,9 @@ void mt7921_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e)
                txp = mt7921_txwi_to_txp(mdev, e->txwi);
 
                token = le16_to_cpu(txp->hw.msdu_id[0]) & ~MT_MSDU_ID_VALID;
-               spin_lock_bh(&dev->token_lock);
-               t = idr_remove(&dev->token, token);
-               spin_unlock_bh(&dev->token_lock);
+               spin_lock_bh(&mdev->token_lock);
+               t = idr_remove(&mdev->token, token);
+               spin_unlock_bh(&mdev->token_lock);
                e->skb = t ? t->skb : NULL;
        }
 
@@ -1209,8 +1209,8 @@ void mt7921_tx_token_put(struct mt7921_dev *dev)
        struct mt76_txwi_cache *txwi;
        int id;
 
-       spin_lock_bh(&dev->token_lock);
-       idr_for_each_entry(&dev->token, txwi, id) {
+       spin_lock_bh(&dev->mt76.token_lock);
+       idr_for_each_entry(&dev->mt76.token, txwi, id) {
                mt7921_txp_skb_unmap(&dev->mt76, txwi);
                if (txwi->skb) {
                        struct ieee80211_hw *hw;
@@ -1219,10 +1219,10 @@ void mt7921_tx_token_put(struct mt7921_dev *dev)
                        ieee80211_free_txskb(hw, txwi->skb);
                }
                mt76_put_txwi(&dev->mt76, txwi);
-               dev->token_count--;
+               dev->mt76.token_count--;
        }
-       spin_unlock_bh(&dev->token_lock);
-       idr_destroy(&dev->token);
+       spin_unlock_bh(&dev->mt76.token_lock);
+       idr_destroy(&dev->mt76.token);
 }
 
 static void
@@ -1261,7 +1261,7 @@ mt7921_mac_reset(struct mt7921_dev *dev)
        napi_disable(&dev->mt76.tx_napi);
 
        mt7921_tx_token_put(dev);
-       idr_init(&dev->token);
+       idr_init(&dev->mt76.token);
 
        err = mt7921_wpdma_reset(dev, true);
        if (err)
index 5bcbf1b..f209069 100644 (file)
@@ -161,10 +161,6 @@ struct mt7921_dev {
        struct list_head sta_poll_list;
        spinlock_t sta_poll_lock;
 
-       spinlock_t token_lock;
-       int token_count;
-       struct idr token;
-
        u8 fw_debug;
 
        struct mt76_connac_pm pm;