aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 060964378e58..a2c14bfd4b3f 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -763,6 +763,9 @@ static bool ixgbe_clean_tx_irq(struct ixgbe_q_vector *q_vector,
763 if (!eop_desc) 763 if (!eop_desc)
764 break; 764 break;
765 765
766 /* prevent any other reads prior to eop_desc */
767 rmb();
768
766 /* if DD is not set pending work has not been completed */ 769 /* if DD is not set pending work has not been completed */
767 if (!(eop_desc->wb.status & cpu_to_le32(IXGBE_TXD_STAT_DD))) 770 if (!(eop_desc->wb.status & cpu_to_le32(IXGBE_TXD_STAT_DD)))
768 break; 771 break;
@@ -773,12 +776,8 @@ static bool ixgbe_clean_tx_irq(struct ixgbe_q_vector *q_vector,
773 /* clear next_to_watch to prevent false hangs */ 776 /* clear next_to_watch to prevent false hangs */
774 tx_buffer->next_to_watch = NULL; 777 tx_buffer->next_to_watch = NULL;
775 778
776 /* prevent any other reads prior to eop_desc being verified */
777 rmb();
778
779 do { 779 do {
780 ixgbe_unmap_tx_resource(tx_ring, tx_buffer); 780 ixgbe_unmap_tx_resource(tx_ring, tx_buffer);
781 tx_desc->wb.status = 0;
782 if (likely(tx_desc == eop_desc)) { 781 if (likely(tx_desc == eop_desc)) {
783 eop_desc = NULL; 782 eop_desc = NULL;
784 dev_kfree_skb_any(tx_buffer->skb); 783 dev_kfree_skb_any(tx_buffer->skb);