Browse Source

wcn36xx: don't process 'valid' descriptors

The DMA engine will reset the valid bit after a descriptor is
complete; any with the valid bit still set may still be in
use by the hardware, so check that before freeing the descriptor.

Signed-off-by: Bob Copeland <me@bobcopeland.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Bob Copeland 10 years ago
parent
commit
bfa6696b39
1 changed files with 2 additions and 0 deletions
  1. 2 0
      drivers/net/wireless/ath/wcn36xx/dxe.c

+ 2 - 0
drivers/net/wireless/ath/wcn36xx/dxe.c

@@ -354,6 +354,8 @@ static void reap_tx_dxes(struct wcn36xx *wcn, struct wcn36xx_dxe_ch *ch)
 	 * and while-do will not make any cycles.
 	 * and while-do will not make any cycles.
 	 */
 	 */
 	do {
 	do {
+		if (ctl->desc->ctrl & WCN36XX_DXE_CTRL_VALID_MASK)
+			break;
 		if (ctl->skb) {
 		if (ctl->skb) {
 			dma_unmap_single(NULL, ctl->desc->src_addr_l,
 			dma_unmap_single(NULL, ctl->desc->src_addr_l,
 					 ctl->skb->len, DMA_TO_DEVICE);
 					 ctl->skb->len, DMA_TO_DEVICE);