mt76: make number of tokens configurable dynamically
authorFelix Fietkau <nbd@nbd.name>
Mon, 26 Apr 2021 15:45:06 +0000 (17:45 +0200)
committerFelix Fietkau <nbd@nbd.name>
Fri, 13 May 2022 07:39:35 +0000 (09:39 +0200)
Preparation for adding Wireless Ethernet Dispatch support

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 41e59f34f02ae2517f916d34e088bbb60dcc2f26..9056d09d6c337a9fe956b652f434ab5286517a51 100644 (file)
@@ -580,6 +580,7 @@ mt76_alloc_device(struct device *pdev, unsigned int size,
        INIT_LIST_HEAD(&dev->wcid_list);
 
        INIT_LIST_HEAD(&dev->txwi_cache);
+       dev->token_size = dev->drv->token_size;
 
        for (i = 0; i < ARRAY_SIZE(dev->q_rx); i++)
                skb_queue_head_init(&dev->rx_skb[i]);
index 9a2fc77243bfe7b7247a36ec59273401a70e850d..dce86846e6481e73d72b23241afd452b4b2dbcea 100644 (file)
@@ -719,7 +719,8 @@ struct mt76_dev {
 
        spinlock_t token_lock;
        struct idr token;
-       int token_count;
+       u16 token_count;
+       u16 token_size;
 
        wait_queue_head_t tx_wait;
        /* spinclock used to protect wcid pktid linked list */
@@ -1381,8 +1382,7 @@ mt76_token_get(struct mt76_dev *dev, struct mt76_txwi_cache **ptxwi)
        int token;
 
        spin_lock_bh(&dev->token_lock);
-       token = idr_alloc(&dev->token, *ptxwi, 0, dev->drv->token_size,
-                         GFP_ATOMIC);
+       token = idr_alloc(&dev->token, *ptxwi, 0, dev->token_size, GFP_ATOMIC);
        spin_unlock_bh(&dev->token_lock);
 
        return token;
index d5a8456c108be533e880762fea7fe4e6716e73dd..84fa922c977a9740133d3e7c741ef107b5a63b08 100644 (file)
@@ -722,12 +722,11 @@ int mt76_token_consume(struct mt76_dev *dev, struct mt76_txwi_cache **ptxwi)
 
        spin_lock_bh(&dev->token_lock);
 
-       token = idr_alloc(&dev->token, *ptxwi, 0, dev->drv->token_size,
-                         GFP_ATOMIC);
+       token = idr_alloc(&dev->token, *ptxwi, 0, dev->token_size, GFP_ATOMIC);
        if (token >= 0)
                dev->token_count++;
 
-       if (dev->token_count >= dev->drv->token_size - MT76_TOKEN_FREE_THR)
+       if (dev->token_count >= dev->token_size - MT76_TOKEN_FREE_THR)
                __mt76_set_tx_blocked(dev, true);
 
        spin_unlock_bh(&dev->token_lock);
@@ -747,7 +746,7 @@ mt76_token_release(struct mt76_dev *dev, int token, bool *wake)
        if (txwi)
                dev->token_count--;
 
-       if (dev->token_count < dev->drv->token_size - MT76_TOKEN_FREE_THR &&
+       if (dev->token_count < dev->token_size - MT76_TOKEN_FREE_THR &&
            dev->phy.q_tx[0]->blocked)
                *wake = true;