summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/qlogic/qlge/qlge_main.c
diff options
context:
space:
mode:
authorSinan Kaya <okaya@codeaurora.org>2018-03-25 17:39:19 +0300
committerDavid S. Miller <davem@davemloft.net>2018-03-26 19:47:56 +0300
commite42d8cee343a545ac2d9557a3b28708bbca2bd31 (patch)
treeb48c9e39d600f5230f4b3e3e7261a59a615f5fa3 /drivers/net/ethernet/qlogic/qlge/qlge_main.c
parent7f883c774e1bad34d5474d8a74989336631ce178 (diff)
downloadlinux-e42d8cee343a545ac2d9557a3b28708bbca2bd31.tar.xz
net: qlge: Eliminate duplicate barriers on weakly-ordered archs
Code includes wmb() followed by writel(). writel() already has a barrier on some architectures like arm64. This ends up CPU observing two barriers back to back before executing the register write. Create a new wrapper function with relaxed write operator. Use the new wrapper when a write is following a wmb(). Signed-off-by: Sinan Kaya <okaya@codeaurora.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/qlogic/qlge/qlge_main.c')
-rw-r--r--drivers/net/ethernet/qlogic/qlge/qlge_main.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/net/ethernet/qlogic/qlge/qlge_main.c b/drivers/net/ethernet/qlogic/qlge/qlge_main.c
index 50038d946ced..8293c2028002 100644
--- a/drivers/net/ethernet/qlogic/qlge/qlge_main.c
+++ b/drivers/net/ethernet/qlogic/qlge/qlge_main.c
@@ -2700,7 +2700,8 @@ static netdev_tx_t qlge_send(struct sk_buff *skb, struct net_device *ndev)
tx_ring->prod_idx = 0;
wmb();
- ql_write_db_reg(tx_ring->prod_idx, tx_ring->prod_idx_db_reg);
+ ql_write_db_reg_relaxed(tx_ring->prod_idx, tx_ring->prod_idx_db_reg);
+ mmiowb();
netif_printk(qdev, tx_queued, KERN_DEBUG, qdev->ndev,
"tx queued, slot %d, len %d\n",
tx_ring->prod_idx, skb->len);