diff options
Diffstat (limited to 'drivers/net/e1000/e1000_main.c')
-rw-r--r-- | drivers/net/e1000/e1000_main.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 02833af8a0b1..5cc39ed289c6 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c | |||
@@ -3454,6 +3454,7 @@ static bool e1000_clean_tx_irq(struct e1000_adapter *adapter, | |||
3454 | while ((eop_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) && | 3454 | while ((eop_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) && |
3455 | (count < tx_ring->count)) { | 3455 | (count < tx_ring->count)) { |
3456 | bool cleaned = false; | 3456 | bool cleaned = false; |
3457 | rmb(); /* read buffer_info after eop_desc */ | ||
3457 | for ( ; !cleaned; count++) { | 3458 | for ( ; !cleaned; count++) { |
3458 | tx_desc = E1000_TX_DESC(*tx_ring, i); | 3459 | tx_desc = E1000_TX_DESC(*tx_ring, i); |
3459 | buffer_info = &tx_ring->buffer_info[i]; | 3460 | buffer_info = &tx_ring->buffer_info[i]; |
@@ -3643,6 +3644,7 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter, | |||
3643 | if (*work_done >= work_to_do) | 3644 | if (*work_done >= work_to_do) |
3644 | break; | 3645 | break; |
3645 | (*work_done)++; | 3646 | (*work_done)++; |
3647 | rmb(); /* read descriptor and rx_buffer_info after status DD */ | ||
3646 | 3648 | ||
3647 | status = rx_desc->status; | 3649 | status = rx_desc->status; |
3648 | skb = buffer_info->skb; | 3650 | skb = buffer_info->skb; |
@@ -3849,6 +3851,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter, | |||
3849 | if (*work_done >= work_to_do) | 3851 | if (*work_done >= work_to_do) |
3850 | break; | 3852 | break; |
3851 | (*work_done)++; | 3853 | (*work_done)++; |
3854 | rmb(); /* read descriptor and rx_buffer_info after status DD */ | ||
3852 | 3855 | ||
3853 | status = rx_desc->status; | 3856 | status = rx_desc->status; |
3854 | skb = buffer_info->skb; | 3857 | skb = buffer_info->skb; |