OSDN Git Service

mt76: substitute sk_buff_head status_list with spinlock_t status_lock
authorLorenzo Bianconi <lorenzo@kernel.org>
Mon, 13 Sep 2021 09:25:04 +0000 (11:25 +0200)
committerFelix Fietkau <nbd@nbd.name>
Wed, 20 Oct 2021 08:36:47 +0000 (10:36 +0200)
Substitute sk_buff_head status_list with spinlock_t status_lock since we
just need it for locking

Tested-by: mrkiko.rs@gmail.com
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mac80211.c
drivers/net/wireless/mediatek/mt76/mt76.h
drivers/net/wireless/mediatek/mt76/tx.c

index 61fff98..831717d 100644 (file)
@@ -543,9 +543,9 @@ mt76_alloc_device(struct device *pdev, unsigned int size,
        spin_lock_init(&dev->rx_lock);
        spin_lock_init(&dev->lock);
        spin_lock_init(&dev->cc_lock);
+       spin_lock_init(&dev->status_lock);
        mutex_init(&dev->mutex);
        init_waitqueue_head(&dev->tx_wait);
-       skb_queue_head_init(&dev->status_list);
 
        skb_queue_head_init(&dev->mcu.res_q);
        init_waitqueue_head(&dev->mcu.wait);
index 1c18e75..8c617fe 100644 (file)
@@ -693,7 +693,8 @@ struct mt76_dev {
        int token_count;
 
        wait_queue_head_t tx_wait;
-       struct sk_buff_head status_list;
+       /* spinclock used to protect wcid pktid linked list */
+       spinlock_t status_lock;
 
        u32 wcid_mask[DIV_ROUND_UP(MT76_N_WCIDS, 32)];
        u32 wcid_phy_mask[DIV_ROUND_UP(MT76_N_WCIDS, 32)];
@@ -1097,9 +1098,9 @@ void mt76_wcid_key_setup(struct mt76_dev *dev, struct mt76_wcid *wcid,
                         struct ieee80211_key_conf *key);
 
 void mt76_tx_status_lock(struct mt76_dev *dev, struct sk_buff_head *list)
-                        __acquires(&dev->status_list.lock);
+                        __acquires(&dev->status_lock);
 void mt76_tx_status_unlock(struct mt76_dev *dev, struct sk_buff_head *list)
-                          __releases(&dev->status_list.lock);
+                          __releases(&dev->status_lock);
 
 int mt76_tx_status_skb_add(struct mt76_dev *dev, struct mt76_wcid *wcid,
                           struct sk_buff *skb);
index 8b4c6ce..ef75f16 100644 (file)
@@ -38,21 +38,21 @@ EXPORT_SYMBOL_GPL(mt76_tx_check_agg_ssn);
 
 void
 mt76_tx_status_lock(struct mt76_dev *dev, struct sk_buff_head *list)
-                  __acquires(&dev->status_list.lock)
+                  __acquires(&dev->status_lock)
 {
        __skb_queue_head_init(list);
-       spin_lock_bh(&dev->status_list.lock);
+       spin_lock_bh(&dev->status_lock);
 }
 EXPORT_SYMBOL_GPL(mt76_tx_status_lock);
 
 void
 mt76_tx_status_unlock(struct mt76_dev *dev, struct sk_buff_head *list)
-                     __releases(&dev->status_list.lock)
+                     __releases(&dev->status_lock)
 {
        struct ieee80211_hw *hw;
        struct sk_buff *skb;
 
-       spin_unlock_bh(&dev->status_list.lock);
+       spin_unlock_bh(&dev->status_lock);
 
        rcu_read_lock();
        while ((skb = __skb_dequeue(list)) != NULL) {
@@ -130,7 +130,7 @@ mt76_tx_status_skb_add(struct mt76_dev *dev, struct mt76_wcid *wcid,
                             IEEE80211_TX_CTL_RATE_CTRL_PROBE)))
                return MT_PACKET_ID_NO_SKB;
 
-       spin_lock_bh(&dev->status_list.lock);
+       spin_lock_bh(&dev->status_lock);
 
        pid = idr_alloc(&wcid->pktid, skb, MT_PACKET_ID_FIRST,
                        MT_PACKET_ID_MASK, GFP_ATOMIC);
@@ -147,7 +147,7 @@ mt76_tx_status_skb_add(struct mt76_dev *dev, struct mt76_wcid *wcid,
                list_add_tail(&wcid->list, &dev->wcid_list);
 
 out:
-       spin_unlock_bh(&dev->status_list.lock);
+       spin_unlock_bh(&dev->status_lock);
 
        return pid;
 }
@@ -160,7 +160,7 @@ mt76_tx_status_skb_get(struct mt76_dev *dev, struct mt76_wcid *wcid, int pktid,
        struct sk_buff *skb;
        int id;
 
-       lockdep_assert_held(&dev->status_list.lock);
+       lockdep_assert_held(&dev->status_lock);
 
        skb = idr_remove(&wcid->pktid, pktid);
        if (skb)