Skip to content

Commit

Permalink
amd-xgbe: Use the new DMA memory barriers where appropriate
Browse files Browse the repository at this point in the history
Use the new lighter weight memory barriers when working with the device
descriptors.

Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Lendacky, Thomas authored and David S. Miller committed Mar 20, 2015
1 parent 600c881 commit ceb8f6b
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 7 deletions.
15 changes: 9 additions & 6 deletions drivers/net/ethernet/amd/xgbe/xgbe-dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -1068,7 +1068,7 @@ static void xgbe_tx_desc_reset(struct xgbe_ring_data *rdata)
rdesc->desc3 = 0;

/* Make sure ownership is written to the descriptor */
wmb();
dma_wmb();
}

static void xgbe_tx_desc_init(struct xgbe_channel *channel)
Expand Down Expand Up @@ -1124,12 +1124,12 @@ static void xgbe_rx_desc_reset(struct xgbe_ring_data *rdata)
* is written to the descriptor(s) before setting the OWN bit
* for the descriptor
*/
wmb();
dma_wmb();

XGMAC_SET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, OWN, 1);

/* Make sure ownership is written to the descriptor */
wmb();
dma_wmb();
}

static void xgbe_rx_desc_init(struct xgbe_channel *channel)
Expand Down Expand Up @@ -1358,6 +1358,9 @@ static void xgbe_tx_start_xmit(struct xgbe_channel *channel,
struct xgbe_prv_data *pdata = channel->pdata;
struct xgbe_ring_data *rdata;

/* Make sure everything is written before the register write */
wmb();

/* Issue a poll command to Tx DMA by writing address
* of next immediate free descriptor */
rdata = XGBE_GET_DESC_DATA(ring, ring->cur);
Expand Down Expand Up @@ -1565,7 +1568,7 @@ static void xgbe_dev_xmit(struct xgbe_channel *channel)
* is written to the descriptor(s) before setting the OWN bit
* for the first descriptor
*/
wmb();
dma_wmb();

/* Set OWN bit for the first descriptor */
rdata = XGBE_GET_DESC_DATA(ring, start_index);
Expand All @@ -1577,7 +1580,7 @@ static void xgbe_dev_xmit(struct xgbe_channel *channel)
#endif

/* Make sure ownership is written to the descriptor */
wmb();
dma_wmb();

ring->cur = cur_index + 1;
if (!packet->skb->xmit_more ||
Expand Down Expand Up @@ -1613,7 +1616,7 @@ static int xgbe_dev_read(struct xgbe_channel *channel)
return 1;

/* Make sure descriptor fields are read after reading the OWN bit */
rmb();
dma_rmb();

#ifdef XGMAC_ENABLE_RX_DESC_DUMP
xgbe_dump_rx_desc(ring, rdesc, ring->cur);
Expand Down
5 changes: 4 additions & 1 deletion drivers/net/ethernet/amd/xgbe/xgbe-drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -1800,6 +1800,9 @@ static void xgbe_rx_refresh(struct xgbe_channel *channel)
ring->dirty++;
}

/* Make sure everything is written before the register write */
wmb();

/* Update the Rx Tail Pointer Register with address of
* the last cleaned entry */
rdata = XGBE_GET_DESC_DATA(ring, ring->dirty - 1);
Expand Down Expand Up @@ -1863,7 +1866,7 @@ static int xgbe_tx_poll(struct xgbe_channel *channel)

/* Make sure descriptor fields are read after reading the OWN
* bit */
rmb();
dma_rmb();

#ifdef XGMAC_ENABLE_TX_DESC_DUMP
xgbe_dump_tx_desc(ring, ring->dirty, 1, 0);
Expand Down

0 comments on commit ceb8f6b

Please sign in to comment.