aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/amd
diff options
context:
space:
mode:
authorLendacky, Thomas <Thomas.Lendacky@amd.com>2014-11-20 12:03:26 -0500
committerDavid S. Miller <davem@davemloft.net>2014-11-21 15:19:10 -0500
commit5449e27167c9945d24108690aff86943d79774a7 (patch)
tree480ae3e95e6190898d0e969678ca349508feaf03 /drivers/net/ethernet/amd
parent91ecee6846704cbd0ec14509b86e99c291cd9bcd (diff)
amd-xgbe: Add a read memory barrier to Tx/Rx path
Add a read memory barrier to the Tx and Rx paths where the ownership bit is checked to be sure that all descriptor fields are read after having read the ownership bit for the descriptor. This has not been an issue to date, but it's a good safe-guard to have. Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/amd')
-rw-r--r--drivers/net/ethernet/amd/xgbe/xgbe-dev.c3
-rw-r--r--drivers/net/ethernet/amd/xgbe/xgbe-drv.c4
2 files changed, 7 insertions, 0 deletions
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
index f6014d330b2e..9b1d9fa68257 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
@@ -1558,6 +1558,9 @@ static int xgbe_dev_read(struct xgbe_channel *channel)
1558 if (XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, OWN)) 1558 if (XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, OWN))
1559 return 1; 1559 return 1;
1560 1560
1561 /* Make sure descriptor fields are read after reading the OWN bit */
1562 rmb();
1563
1561#ifdef XGMAC_ENABLE_RX_DESC_DUMP 1564#ifdef XGMAC_ENABLE_RX_DESC_DUMP
1562 xgbe_dump_rx_desc(ring, rdesc, ring->cur); 1565 xgbe_dump_rx_desc(ring, rdesc, ring->cur);
1563#endif 1566#endif
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
index 0544931329d1..eebb787251c4 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
@@ -1791,6 +1791,10 @@ static int xgbe_tx_poll(struct xgbe_channel *channel)
1791 if (!hw_if->tx_complete(rdesc)) 1791 if (!hw_if->tx_complete(rdesc))
1792 break; 1792 break;
1793 1793
1794 /* Make sure descriptor fields are read after reading the OWN
1795 * bit */
1796 rmb();
1797
1794#ifdef XGMAC_ENABLE_TX_DESC_DUMP 1798#ifdef XGMAC_ENABLE_TX_DESC_DUMP
1795 xgbe_dump_tx_desc(ring, ring->dirty, 1, 0); 1799 xgbe_dump_tx_desc(ring, ring->dirty, 1, 0);
1796#endif 1800#endif