diff options
author | Alexander Duyck <alexander.h.duyck@redhat.com> | 2015-04-07 19:55:27 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-04-08 12:15:14 -0400 |
commit | 837a1dba0078d0bad755f6cb13a48c1623d11ff5 (patch) | |
tree | e49f879b6fa316806202bb1f43c9dce4e3cbe535 | |
parent | 03cc864a2571af278fc83d24b6a78d8424f92736 (diff) |
e1000, e1000e: Use dma_rmb instead of rmb for descriptor read ordering
This change replaces calls to rmb with dma_rmb in the case where we want to
order all follow-on descriptor reads after the check for the descriptor
status bit.
Signed-off-by: Alexander Duyck <alexander.h.duyck@redhat.com>
Acked-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/intel/e1000/e1000_main.c | 6 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/e1000e/netdev.c | 8 |
2 files changed, 7 insertions, 7 deletions
diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c index b548ef0cf56b..983eb4e6f7aa 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_main.c +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c | |||
@@ -3856,7 +3856,7 @@ static bool e1000_clean_tx_irq(struct e1000_adapter *adapter, | |||
3856 | while ((eop_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) && | 3856 | while ((eop_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) && |
3857 | (count < tx_ring->count)) { | 3857 | (count < tx_ring->count)) { |
3858 | bool cleaned = false; | 3858 | bool cleaned = false; |
3859 | rmb(); /* read buffer_info after eop_desc */ | 3859 | dma_rmb(); /* read buffer_info after eop_desc */ |
3860 | for ( ; !cleaned; count++) { | 3860 | for ( ; !cleaned; count++) { |
3861 | tx_desc = E1000_TX_DESC(*tx_ring, i); | 3861 | tx_desc = E1000_TX_DESC(*tx_ring, i); |
3862 | buffer_info = &tx_ring->buffer_info[i]; | 3862 | buffer_info = &tx_ring->buffer_info[i]; |
@@ -4154,7 +4154,7 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter, | |||
4154 | if (*work_done >= work_to_do) | 4154 | if (*work_done >= work_to_do) |
4155 | break; | 4155 | break; |
4156 | (*work_done)++; | 4156 | (*work_done)++; |
4157 | rmb(); /* read descriptor and rx_buffer_info after status DD */ | 4157 | dma_rmb(); /* read descriptor and rx_buffer_info after status DD */ |
4158 | 4158 | ||
4159 | status = rx_desc->status; | 4159 | status = rx_desc->status; |
4160 | 4160 | ||
@@ -4375,7 +4375,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter, | |||
4375 | if (*work_done >= work_to_do) | 4375 | if (*work_done >= work_to_do) |
4376 | break; | 4376 | break; |
4377 | (*work_done)++; | 4377 | (*work_done)++; |
4378 | rmb(); /* read descriptor and rx_buffer_info after status DD */ | 4378 | dma_rmb(); /* read descriptor and rx_buffer_info after status DD */ |
4379 | 4379 | ||
4380 | status = rx_desc->status; | 4380 | status = rx_desc->status; |
4381 | length = le16_to_cpu(rx_desc->length); | 4381 | length = le16_to_cpu(rx_desc->length); |
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index 4e56c3195989..74ec185a697f 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c | |||
@@ -947,7 +947,7 @@ static bool e1000_clean_rx_irq(struct e1000_ring *rx_ring, int *work_done, | |||
947 | if (*work_done >= work_to_do) | 947 | if (*work_done >= work_to_do) |
948 | break; | 948 | break; |
949 | (*work_done)++; | 949 | (*work_done)++; |
950 | rmb(); /* read descriptor and rx_buffer_info after status DD */ | 950 | dma_rmb(); /* read descriptor and rx_buffer_info after status DD */ |
951 | 951 | ||
952 | skb = buffer_info->skb; | 952 | skb = buffer_info->skb; |
953 | buffer_info->skb = NULL; | 953 | buffer_info->skb = NULL; |
@@ -1232,7 +1232,7 @@ static bool e1000_clean_tx_irq(struct e1000_ring *tx_ring) | |||
1232 | (count < tx_ring->count)) { | 1232 | (count < tx_ring->count)) { |
1233 | bool cleaned = false; | 1233 | bool cleaned = false; |
1234 | 1234 | ||
1235 | rmb(); /* read buffer_info after eop_desc */ | 1235 | dma_rmb(); /* read buffer_info after eop_desc */ |
1236 | for (; !cleaned; count++) { | 1236 | for (; !cleaned; count++) { |
1237 | tx_desc = E1000_TX_DESC(*tx_ring, i); | 1237 | tx_desc = E1000_TX_DESC(*tx_ring, i); |
1238 | buffer_info = &tx_ring->buffer_info[i]; | 1238 | buffer_info = &tx_ring->buffer_info[i]; |
@@ -1332,7 +1332,7 @@ static bool e1000_clean_rx_irq_ps(struct e1000_ring *rx_ring, int *work_done, | |||
1332 | break; | 1332 | break; |
1333 | (*work_done)++; | 1333 | (*work_done)++; |
1334 | skb = buffer_info->skb; | 1334 | skb = buffer_info->skb; |
1335 | rmb(); /* read descriptor and rx_buffer_info after status DD */ | 1335 | dma_rmb(); /* read descriptor and rx_buffer_info after status DD */ |
1336 | 1336 | ||
1337 | /* in the packet split case this is header only */ | 1337 | /* in the packet split case this is header only */ |
1338 | prefetch(skb->data - NET_IP_ALIGN); | 1338 | prefetch(skb->data - NET_IP_ALIGN); |
@@ -1536,7 +1536,7 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_ring *rx_ring, int *work_done, | |||
1536 | if (*work_done >= work_to_do) | 1536 | if (*work_done >= work_to_do) |
1537 | break; | 1537 | break; |
1538 | (*work_done)++; | 1538 | (*work_done)++; |
1539 | rmb(); /* read descriptor and rx_buffer_info after status DD */ | 1539 | dma_rmb(); /* read descriptor and rx_buffer_info after status DD */ |
1540 | 1540 | ||
1541 | skb = buffer_info->skb; | 1541 | skb = buffer_info->skb; |
1542 | buffer_info->skb = NULL; | 1542 | buffer_info->skb = NULL; |