|
@@ -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)
|