OSDN Git Service

amd-xgbe: Use the new DMA memory barriers where appropriate
authorLendacky, Thomas <Thomas.Lendacky@amd.com>
Fri, 20 Mar 2015 16:50:16 +0000 (11:50 -0500)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Mar 2015 20:33:57 +0000 (16:33 -0400)
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>
drivers/net/ethernet/amd/xgbe/xgbe-dev.c
drivers/net/ethernet/amd/xgbe/xgbe-drv.c

index 29137c9..e165d06 100644 (file)
@@ -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)
@@ -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)
@@ -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);
@@ -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);
@@ -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 ||
@@ -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);
index 885b02b..8635c94 100644 (file)
@@ -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);
@@ -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);