wcn36xx: Remove useless skb spinlock
Each DXE control block is associated to a specific channel. The channel lock is always taken before accessing a control block. There is no need to have an extra (useless) spinlock for the control block skb. Signed-off-by: Loic Poulain <loic.poulain@linaro.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
@@ -78,7 +78,6 @@ static int wcn36xx_dxe_allocate_ctl_block(struct wcn36xx_dxe_ch *ch)
|
|||||||
if (!cur_ctl)
|
if (!cur_ctl)
|
||||||
goto out_fail;
|
goto out_fail;
|
||||||
|
|
||||||
spin_lock_init(&cur_ctl->skb_lock);
|
|
||||||
cur_ctl->ctl_blk_order = i;
|
cur_ctl->ctl_blk_order = i;
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
ch->head_blk_ctl = cur_ctl;
|
ch->head_blk_ctl = cur_ctl;
|
||||||
@@ -377,12 +376,11 @@ static void reap_tx_dxes(struct wcn36xx *wcn, struct wcn36xx_dxe_ch *ch)
|
|||||||
/* Keep frame until TX status comes */
|
/* Keep frame until TX status comes */
|
||||||
ieee80211_free_txskb(wcn->hw, ctl->skb);
|
ieee80211_free_txskb(wcn->hw, ctl->skb);
|
||||||
}
|
}
|
||||||
spin_lock(&ctl->skb_lock);
|
|
||||||
if (wcn->queues_stopped) {
|
if (wcn->queues_stopped) {
|
||||||
wcn->queues_stopped = false;
|
wcn->queues_stopped = false;
|
||||||
ieee80211_wake_queues(wcn->hw);
|
ieee80211_wake_queues(wcn->hw);
|
||||||
}
|
}
|
||||||
spin_unlock(&ctl->skb_lock);
|
|
||||||
|
|
||||||
ctl->skb = NULL;
|
ctl->skb = NULL;
|
||||||
}
|
}
|
||||||
@@ -654,8 +652,6 @@ int wcn36xx_dxe_tx_frame(struct wcn36xx *wcn,
|
|||||||
spin_lock_irqsave(&ch->lock, flags);
|
spin_lock_irqsave(&ch->lock, flags);
|
||||||
ctl = ch->head_blk_ctl;
|
ctl = ch->head_blk_ctl;
|
||||||
|
|
||||||
spin_lock(&ctl->next->skb_lock);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If skb is not null that means that we reached the tail of the ring
|
* If skb is not null that means that we reached the tail of the ring
|
||||||
* hence ring is full. Stop queues to let mac80211 back off until ring
|
* hence ring is full. Stop queues to let mac80211 back off until ring
|
||||||
@@ -664,11 +660,9 @@ int wcn36xx_dxe_tx_frame(struct wcn36xx *wcn,
|
|||||||
if (NULL != ctl->next->skb) {
|
if (NULL != ctl->next->skb) {
|
||||||
ieee80211_stop_queues(wcn->hw);
|
ieee80211_stop_queues(wcn->hw);
|
||||||
wcn->queues_stopped = true;
|
wcn->queues_stopped = true;
|
||||||
spin_unlock(&ctl->next->skb_lock);
|
|
||||||
spin_unlock_irqrestore(&ch->lock, flags);
|
spin_unlock_irqrestore(&ch->lock, flags);
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
spin_unlock(&ctl->next->skb_lock);
|
|
||||||
|
|
||||||
ctl->skb = NULL;
|
ctl->skb = NULL;
|
||||||
desc = ctl->desc;
|
desc = ctl->desc;
|
||||||
|
@@ -422,7 +422,6 @@ struct wcn36xx_dxe_ctl {
|
|||||||
unsigned int desc_phy_addr;
|
unsigned int desc_phy_addr;
|
||||||
int ctl_blk_order;
|
int ctl_blk_order;
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
spinlock_t skb_lock;
|
|
||||||
void *bd_cpu_addr;
|
void *bd_cpu_addr;
|
||||||
dma_addr_t bd_phy_addr;
|
dma_addr_t bd_phy_addr;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user