iwlwifi: read the Rx write pointer only once
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Sun, 25 Nov 2012 12:42:25 +0000 (14:42 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 28 Nov 2012 14:34:27 +0000 (15:34 +0100)
The FH (DMA engine) tells the driver the index of the last
ready (closed) Rx buffer. This data is in closed_rb_num.
If we read this data several times we may get inconsistencies
between the code and the debug prints which can make it
harder to debug issues here.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/iwlwifi/pcie/rx.c

index c81b9782d2a4facb1ed43b34e9c5a05c496e6345..787b9ca6af9f41b574f5a5fe69c6643b08fbabeb 100644 (file)
@@ -698,7 +698,7 @@ static void iwl_pcie_rx_handle(struct iwl_trans *trans)
 
        /* uCode's read index (stored in shared DRAM) indicates the last Rx
         * buffer that the driver may process (last buffer filled by ucode). */
-       r = le16_to_cpu(rxq->rb_stts->closed_rb_num) &  0x0FFF;
+       r = le16_to_cpu(ACCESS_ONCE(rxq->rb_stts->closed_rb_num)) & 0x0FFF;
        i = rxq->read;
 
        /* Rx interrupt, but nothing sent from uCode */