cxgb4: Use ACCES_ONCE macro to read queue's consumer index
authorHariprasad Shenai <hariprasad@chelsio.com>
Tue, 8 Dec 2015 04:39:13 +0000 (10:09 +0530)
committerDavid S. Miller <davem@davemloft.net>
Wed, 9 Dec 2015 03:43:15 +0000 (22:43 -0500)
Use helper macro ACCESS_ONCE() to load from the SGE status page
to prevent the compiler loading multiple times.

Based on original work by Mike Werner <werner@chelsio.com>

Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/chelsio/cxgb4/sge.c

index 48d8fbb..1076c35 100644 (file)
@@ -406,7 +406,7 @@ static void free_tx_desc(struct adapter *adap, struct sge_txq *q,
  */
 static inline int reclaimable(const struct sge_txq *q)
 {
-       int hw_cidx = ntohs(q->stat->cidx);
+       int hw_cidx = ntohs(ACCESS_ONCE(q->stat->cidx));
        hw_cidx -= q->cidx;
        return hw_cidx < 0 ? hw_cidx + q->size : hw_cidx;
 }
@@ -1320,7 +1320,7 @@ out_free: dev_kfree_skb_any(skb);
  */
 static inline void reclaim_completed_tx_imm(struct sge_txq *q)
 {
-       int hw_cidx = ntohs(q->stat->cidx);
+       int hw_cidx = ntohs(ACCESS_ONCE(q->stat->cidx));
        int reclaim = hw_cidx - q->cidx;
 
        if (reclaim < 0)