Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6062546d authored by Loic Poulain's avatar Loic Poulain Committed by Kalle Valo
Browse files

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: default avatarLoic Poulain <loic.poulain@linaro.org>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 1391cce7
Loading
Loading
Loading
Loading
+1 −7
Original line number Original line Diff line number Diff line
@@ -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;
+0 −1
Original line number Original line Diff line number Diff line
@@ -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;
};
};