bnx2x: Replace doorbell barrier() with wmb()
authorSinan Kaya <okaya@codeaurora.org>
Sun, 25 Mar 2018 14:39:17 +0000 (10:39 -0400)
committerDavid S. Miller <davem@davemloft.net>
Mon, 26 Mar 2018 16:47:55 +0000 (12:47 -0400)
barrier() doesn't guarantee memory writes to be observed by the hardware on
all architectures. barrier() only tells compiler not to move this code
with respect to other read/writes.

If memory write needs to be observed by the HW, wmb() is the right choice.

Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c

index d7c98e807ca880ab3ba51758355e5cdf6526d0c0..0f86f1850de8133706d3153c0b8e661596699a3c 100644 (file)
@@ -4153,7 +4153,8 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
        wmb();
 
        txdata->tx_db.data.prod += nbd;
-       barrier();
+       /* make sure descriptor update is observed by HW */
+       wmb();
 
        DOORBELL(bp, txdata->cid, txdata->tx_db.raw);
 
index 1e33abde4a3e8c833386df176896ad9684c9dc10..39af4f85379d9698b6975cb1d47bdbc54d8b14cc 100644 (file)
@@ -2591,7 +2591,8 @@ static int bnx2x_run_loopback(struct bnx2x *bp, int loopback_mode)
        wmb();
 
        txdata->tx_db.data.prod += 2;
-       barrier();
+       /* make sure descriptor update is observed by the HW */
+       wmb();
        DOORBELL(bp, txdata->cid, txdata->tx_db.raw);
 
        mmiowb();