ath10k: Fix potential Rx ring corruption
authorVasanthakumar Thiagarajan <vthiagar@qti.qualcomm.com>
Fri, 9 Jan 2015 17:19:46 +0000 (22:49 +0530)
committerKalle Valo <kvalo@qca.qualcomm.com>
Tue, 13 Jan 2015 14:22:08 +0000 (16:22 +0200)
When replenishing Rx buffers driver updates the address of the
buffer and the index of rx buffer in rx ring to the firmware.
Change in order by CPU can cause rx ring corruption. Add memory
barrier before updating rx buffer index to guarantee the order.

This could fix some instances of rx ring corruption due to done
bit in rx attention flag not set.

Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qti.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/htt_rx.c

index 9c782a42665e1aaf43bfbca441631ee58da50c09..baa1c447a3b80238afe968dc99a8aee7e8a16b55 100644 (file)
@@ -97,6 +97,11 @@ static int __ath10k_htt_rx_ring_fill_n(struct ath10k_htt *htt, int num)
        }
 
 fail:
+       /*
+        * Make sure the rx buffer is updated before available buffer
+        * index to avoid any potential rx ring corruption.
+        */
+       mb();
        *htt->rx_ring.alloc_idx.vaddr = __cpu_to_le32(idx);
        return ret;
 }