|
@@ -6910,14 +6910,14 @@ static bool igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)
|
|
|
|
|
|
|
|
rx_desc = IGB_RX_DESC(rx_ring, rx_ring->next_to_clean);
|
|
rx_desc = IGB_RX_DESC(rx_ring, rx_ring->next_to_clean);
|
|
|
|
|
|
|
|
- if (!igb_test_staterr(rx_desc, E1000_RXD_STAT_DD))
|
|
|
|
|
|
|
+ if (!rx_desc->wb.upper.status_error)
|
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
/* This memory barrier is needed to keep us from reading
|
|
/* This memory barrier is needed to keep us from reading
|
|
|
* any other fields out of the rx_desc until we know the
|
|
* any other fields out of the rx_desc until we know the
|
|
|
- * RXD_STAT_DD bit is set
|
|
|
|
|
|
|
+ * descriptor has been written back
|
|
|
*/
|
|
*/
|
|
|
- rmb();
|
|
|
|
|
|
|
+ dma_rmb();
|
|
|
|
|
|
|
|
/* retrieve a buffer from the ring */
|
|
/* retrieve a buffer from the ring */
|
|
|
skb = igb_fetch_rx_buffer(rx_ring, rx_desc, skb);
|
|
skb = igb_fetch_rx_buffer(rx_ring, rx_desc, skb);
|