All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sinan Kaya <okaya@codeaurora.org>
To: linux-rdma@vger.kernel.org, timur@codeaurora.org, sulrich@codeaurora.org
Cc: linux-arm-msm@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	Sinan Kaya <okaya@codeaurora.org>,
	Faisal Latif <faisal.latif@intel.com>,
	Doug Ledford <dledford@redhat.com>,
	Jason Gunthorpe <jgg@ziepe.ca>,
	linux-kernel@vger.kernel.org
Subject: [PATCH v4 5/6] IB/nes: Eliminate duplicate barriers on weakly-ordered archs
Date: Mon, 19 Mar 2018 22:47:47 -0400	[thread overview]
Message-ID: <1521514068-8856-6-git-send-email-okaya@codeaurora.org> (raw)
In-Reply-To: <1521514068-8856-1-git-send-email-okaya@codeaurora.org>

Code includes barrier() 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 barrier().

Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
---
 drivers/infiniband/hw/nes/nes.h       |  5 +++++
 drivers/infiniband/hw/nes/nes_hw.c    | 21 ++++++++++++++-------
 drivers/infiniband/hw/nes/nes_mgt.c   | 15 ++++++++++-----
 drivers/infiniband/hw/nes/nes_nic.c   |  2 +-
 drivers/infiniband/hw/nes/nes_utils.c |  3 ++-
 drivers/infiniband/hw/nes/nes_verbs.c |  5 +++--
 6 files changed, 35 insertions(+), 16 deletions(-)

diff --git a/drivers/infiniband/hw/nes/nes.h b/drivers/infiniband/hw/nes/nes.h
index 00c27291..85e007d 100644
--- a/drivers/infiniband/hw/nes/nes.h
+++ b/drivers/infiniband/hw/nes/nes.h
@@ -387,6 +387,11 @@ static inline void nes_write_indexed(struct nes_device *nesdev, u32 reg_index, u
 	spin_unlock_irqrestore(&nesdev->indexed_regs_lock, flags);
 }
 
+static inline void nes_write32_relaxed(void __iomem *addr, u32 val)
+{
+	writel_relaxed(val, addr);
+}
+
 static inline void nes_write32(void __iomem *addr, u32 val)
 {
 	writel(val, addr);
diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c
index 18a7de1..568e17d 100644
--- a/drivers/infiniband/hw/nes/nes_hw.c
+++ b/drivers/infiniband/hw/nes/nes_hw.c
@@ -1257,7 +1257,8 @@ int nes_destroy_cqp(struct nes_device *nesdev)
 
 	barrier();
 	/* Ring doorbell (5 WQEs) */
-	nes_write32(nesdev->regs+NES_WQE_ALLOC, 0x05800000 | nesdev->cqp.qp_id);
+	nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+			    0x05800000 | nesdev->cqp.qp_id);
 
 	spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
 
@@ -1594,7 +1595,8 @@ static void nes_replenish_nic_rq(struct nes_vnic *nesvnic)
 			atomic_dec(&nesvnic->rx_skbs_needed);
 			barrier();
 			if (++rx_wqes_posted == 255) {
-				nes_write32(nesdev->regs+NES_WQE_ALLOC, (rx_wqes_posted << 24) | nesnic->qp_id);
+				nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+				       (rx_wqes_posted << 24) | nesnic->qp_id);
 				rx_wqes_posted = 0;
 			}
 		} else {
@@ -1612,7 +1614,8 @@ static void nes_replenish_nic_rq(struct nes_vnic *nesvnic)
 	} while (atomic_read(&nesvnic->rx_skbs_needed));
 	barrier();
 	if (rx_wqes_posted)
-		nes_write32(nesdev->regs+NES_WQE_ALLOC, (rx_wqes_posted << 24) | nesnic->qp_id);
+		nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+				    (rx_wqes_posted << 24) | nesnic->qp_id);
 	nesnic->replenishing_rq = 0;
 }
 
@@ -1795,7 +1798,8 @@ int nes_init_nic_qp(struct nes_device *nesdev, struct net_device *netdev)
 	barrier();
 
 	/* Ring doorbell (2 WQEs) */
-	nes_write32(nesdev->regs+NES_WQE_ALLOC, 0x02800000 | nesdev->cqp.qp_id);
+	nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+			    0x02800000 | nesdev->cqp.qp_id);
 
 	spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
 	nes_debug(NES_DBG_INIT, "Waiting for create NIC QP%u to complete.\n",
@@ -1844,7 +1848,8 @@ int nes_init_nic_qp(struct nes_device *nesdev, struct net_device *netdev)
 	do {
 		counter = min(wqe_count, ((u32)255));
 		wqe_count -= counter;
-		nes_write32(nesdev->regs+NES_WQE_ALLOC, (counter << 24) | nesvnic->nic.qp_id);
+		nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+				    (counter << 24) | nesvnic->nic.qp_id);
 	} while (wqe_count);
 	timer_setup(&nesvnic->rq_wqes_timer, nes_rq_wqes_timeout, 0);
 	nes_debug(NES_DBG_INIT, "NAPI support Enabled\n");
@@ -1988,7 +1993,8 @@ void nes_destroy_nic_qp(struct nes_vnic *nesvnic)
 	barrier();
 
 	/* Ring doorbell (2 WQEs) */
-	nes_write32(nesdev->regs+NES_WQE_ALLOC, 0x02800000 | nesdev->cqp.qp_id);
+	nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+			    0x02800000 | nesdev->cqp.qp_id);
 
 	spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
 	nes_debug(NES_DBG_SHUTDOWN, "Waiting for CQP, cqp_head=%u, cqp.sq_head=%u,"
@@ -3064,7 +3070,8 @@ static void nes_cqp_ce_handler(struct nes_device *nesdev, struct nes_hw_cq *cq)
 				cqp_request, le32_to_cpu(cqp_wqe->wqe_words[NES_CQP_WQE_OPCODE_IDX])&0x3f, head);
 		/* Ring doorbell (1 WQEs) */
 		barrier();
-		nes_write32(nesdev->regs+NES_WQE_ALLOC, 0x01800000 | nesdev->cqp.qp_id);
+		nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+				    0x01800000 | nesdev->cqp.qp_id);
 	}
 	spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
 
diff --git a/drivers/infiniband/hw/nes/nes_mgt.c b/drivers/infiniband/hw/nes/nes_mgt.c
index 21e0ebd..5c5073c 100644
--- a/drivers/infiniband/hw/nes/nes_mgt.c
+++ b/drivers/infiniband/hw/nes/nes_mgt.c
@@ -96,7 +96,8 @@ static void nes_replenish_mgt_rq(struct nes_vnic_mgt *mgtvnic)
 			atomic_dec(&mgtvnic->rx_skbs_needed);
 			barrier();
 			if (++rx_wqes_posted == 255) {
-				nes_write32(nesdev->regs + NES_WQE_ALLOC, (rx_wqes_posted << 24) | nesmgt->qp_id);
+				nes_write32_relaxed(nesdev->regs + NES_WQE_ALLOC,
+					(rx_wqes_posted << 24) | nesmgt->qp_id);
 				rx_wqes_posted = 0;
 			}
 		} else {
@@ -115,7 +116,8 @@ static void nes_replenish_mgt_rq(struct nes_vnic_mgt *mgtvnic)
 	} while (atomic_read(&mgtvnic->rx_skbs_needed));
 	barrier();
 	if (rx_wqes_posted)
-		nes_write32(nesdev->regs + NES_WQE_ALLOC, (rx_wqes_posted << 24) | nesmgt->qp_id);
+		nes_write32_relaxed(nesdev->regs + NES_WQE_ALLOC,
+				    (rx_wqes_posted << 24) | nesmgt->qp_id);
 	nesmgt->replenishing_rq = 0;
 }
 
@@ -995,7 +997,8 @@ int nes_init_mgt_qp(struct nes_device *nesdev, struct net_device *netdev, struct
 		barrier();
 
 		/* Ring doorbell (2 WQEs) */
-		nes_write32(nesdev->regs + NES_WQE_ALLOC, 0x02800000 | nesdev->cqp.qp_id);
+		nes_write32_relaxed(nesdev->regs + NES_WQE_ALLOC,
+				    0x02800000 | nesdev->cqp.qp_id);
 
 		spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
 		nes_debug(NES_DBG_INIT, "Waiting for create MGT QP%u to complete.\n",
@@ -1050,7 +1053,8 @@ int nes_init_mgt_qp(struct nes_device *nesdev, struct net_device *netdev, struct
 		do {
 			counter = min(wqe_count, ((u32)255));
 			wqe_count -= counter;
-			nes_write32(nesdev->regs + NES_WQE_ALLOC, (counter << 24) | mgtvnic->mgt.qp_id);
+			nes_write32_relaxed(nesdev->regs + NES_WQE_ALLOC,
+					(counter << 24) | mgtvnic->mgt.qp_id);
 		} while (wqe_count);
 
 		nes_write32(nesdev->regs + NES_CQE_ALLOC, NES_CQE_ALLOC_NOTIFY_NEXT |
@@ -1124,7 +1128,8 @@ void nes_destroy_mgt(struct nes_vnic *nesvnic)
 		barrier();
 
 		/* Ring doorbell (2 WQEs) */
-		nes_write32(nesdev->regs + NES_WQE_ALLOC, 0x02800000 | nesdev->cqp.qp_id);
+		nes_write32_relaxed(nesdev->regs + NES_WQE_ALLOC,
+				    0x02800000 | nesdev->cqp.qp_id);
 
 		spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
 		nes_debug(NES_DBG_SHUTDOWN, "Waiting for CQP, cqp_head=%u, cqp.sq_head=%u,"
diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c
index 0a75164..0653da0 100644
--- a/drivers/infiniband/hw/nes/nes_nic.c
+++ b/drivers/infiniband/hw/nes/nes_nic.c
@@ -683,7 +683,7 @@ static int nes_netdev_start_xmit(struct sk_buff *skb, struct net_device *netdev)
 	barrier();
 
 	if (wqe_count)
-		nes_write32(nesdev->regs+NES_WQE_ALLOC,
+		nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
 				(wqe_count << 24) | (1 << 23) | nesvnic->nic.qp_id);
 
 	netif_trans_update(netdev);
diff --git a/drivers/infiniband/hw/nes/nes_utils.c b/drivers/infiniband/hw/nes/nes_utils.c
index 21b4a83..79a3d98 100644
--- a/drivers/infiniband/hw/nes/nes_utils.c
+++ b/drivers/infiniband/hw/nes/nes_utils.c
@@ -661,7 +661,8 @@ void nes_post_cqp_request(struct nes_device *nesdev,
 		barrier();
 
 		/* Ring doorbell (1 WQEs) */
-		nes_write32(nesdev->regs+NES_WQE_ALLOC, 0x01800000 | nesdev->cqp.qp_id);
+		nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+				    0x01800000 | nesdev->cqp.qp_id);
 
 		barrier();
 	} else {
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
index 162475a..87f8635 100644
--- a/drivers/infiniband/hw/nes/nes_verbs.c
+++ b/drivers/infiniband/hw/nes/nes_verbs.c
@@ -3310,7 +3310,7 @@ static int nes_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr,
 	while (wqe_count) {
 		counter = min(wqe_count, ((u32)255));
 		wqe_count -= counter;
-		nes_write32(nesdev->regs + NES_WQE_ALLOC,
+		nes_write32_relaxed(nesdev->regs + NES_WQE_ALLOC,
 				(counter << 24) | 0x00800000 | nesqp->hwqp.qp_id);
 	}
 
@@ -3404,7 +3404,8 @@ static int nes_post_recv(struct ib_qp *ibqp, struct ib_recv_wr *ib_wr,
 	while (wqe_count) {
 		counter = min(wqe_count, ((u32)255));
 		wqe_count -= counter;
-		nes_write32(nesdev->regs+NES_WQE_ALLOC, (counter<<24) | nesqp->hwqp.qp_id);
+		nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+				    (counter<<24) | nesqp->hwqp.qp_id);
 	}
 
 	spin_unlock_irqrestore(&nesqp->lock, flags);
-- 
2.7.4

WARNING: multiple messages have this Message-ID (diff)
From: okaya@codeaurora.org (Sinan Kaya)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 5/6] IB/nes: Eliminate duplicate barriers on weakly-ordered archs
Date: Mon, 19 Mar 2018 22:47:47 -0400	[thread overview]
Message-ID: <1521514068-8856-6-git-send-email-okaya@codeaurora.org> (raw)
In-Reply-To: <1521514068-8856-1-git-send-email-okaya@codeaurora.org>

Code includes barrier() 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 barrier().

Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
---
 drivers/infiniband/hw/nes/nes.h       |  5 +++++
 drivers/infiniband/hw/nes/nes_hw.c    | 21 ++++++++++++++-------
 drivers/infiniband/hw/nes/nes_mgt.c   | 15 ++++++++++-----
 drivers/infiniband/hw/nes/nes_nic.c   |  2 +-
 drivers/infiniband/hw/nes/nes_utils.c |  3 ++-
 drivers/infiniband/hw/nes/nes_verbs.c |  5 +++--
 6 files changed, 35 insertions(+), 16 deletions(-)

diff --git a/drivers/infiniband/hw/nes/nes.h b/drivers/infiniband/hw/nes/nes.h
index 00c27291..85e007d 100644
--- a/drivers/infiniband/hw/nes/nes.h
+++ b/drivers/infiniband/hw/nes/nes.h
@@ -387,6 +387,11 @@ static inline void nes_write_indexed(struct nes_device *nesdev, u32 reg_index, u
 	spin_unlock_irqrestore(&nesdev->indexed_regs_lock, flags);
 }
 
+static inline void nes_write32_relaxed(void __iomem *addr, u32 val)
+{
+	writel_relaxed(val, addr);
+}
+
 static inline void nes_write32(void __iomem *addr, u32 val)
 {
 	writel(val, addr);
diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c
index 18a7de1..568e17d 100644
--- a/drivers/infiniband/hw/nes/nes_hw.c
+++ b/drivers/infiniband/hw/nes/nes_hw.c
@@ -1257,7 +1257,8 @@ int nes_destroy_cqp(struct nes_device *nesdev)
 
 	barrier();
 	/* Ring doorbell (5 WQEs) */
-	nes_write32(nesdev->regs+NES_WQE_ALLOC, 0x05800000 | nesdev->cqp.qp_id);
+	nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+			    0x05800000 | nesdev->cqp.qp_id);
 
 	spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
 
@@ -1594,7 +1595,8 @@ static void nes_replenish_nic_rq(struct nes_vnic *nesvnic)
 			atomic_dec(&nesvnic->rx_skbs_needed);
 			barrier();
 			if (++rx_wqes_posted == 255) {
-				nes_write32(nesdev->regs+NES_WQE_ALLOC, (rx_wqes_posted << 24) | nesnic->qp_id);
+				nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+				       (rx_wqes_posted << 24) | nesnic->qp_id);
 				rx_wqes_posted = 0;
 			}
 		} else {
@@ -1612,7 +1614,8 @@ static void nes_replenish_nic_rq(struct nes_vnic *nesvnic)
 	} while (atomic_read(&nesvnic->rx_skbs_needed));
 	barrier();
 	if (rx_wqes_posted)
-		nes_write32(nesdev->regs+NES_WQE_ALLOC, (rx_wqes_posted << 24) | nesnic->qp_id);
+		nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+				    (rx_wqes_posted << 24) | nesnic->qp_id);
 	nesnic->replenishing_rq = 0;
 }
 
@@ -1795,7 +1798,8 @@ int nes_init_nic_qp(struct nes_device *nesdev, struct net_device *netdev)
 	barrier();
 
 	/* Ring doorbell (2 WQEs) */
-	nes_write32(nesdev->regs+NES_WQE_ALLOC, 0x02800000 | nesdev->cqp.qp_id);
+	nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+			    0x02800000 | nesdev->cqp.qp_id);
 
 	spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
 	nes_debug(NES_DBG_INIT, "Waiting for create NIC QP%u to complete.\n",
@@ -1844,7 +1848,8 @@ int nes_init_nic_qp(struct nes_device *nesdev, struct net_device *netdev)
 	do {
 		counter = min(wqe_count, ((u32)255));
 		wqe_count -= counter;
-		nes_write32(nesdev->regs+NES_WQE_ALLOC, (counter << 24) | nesvnic->nic.qp_id);
+		nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+				    (counter << 24) | nesvnic->nic.qp_id);
 	} while (wqe_count);
 	timer_setup(&nesvnic->rq_wqes_timer, nes_rq_wqes_timeout, 0);
 	nes_debug(NES_DBG_INIT, "NAPI support Enabled\n");
@@ -1988,7 +1993,8 @@ void nes_destroy_nic_qp(struct nes_vnic *nesvnic)
 	barrier();
 
 	/* Ring doorbell (2 WQEs) */
-	nes_write32(nesdev->regs+NES_WQE_ALLOC, 0x02800000 | nesdev->cqp.qp_id);
+	nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+			    0x02800000 | nesdev->cqp.qp_id);
 
 	spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
 	nes_debug(NES_DBG_SHUTDOWN, "Waiting for CQP, cqp_head=%u, cqp.sq_head=%u,"
@@ -3064,7 +3070,8 @@ static void nes_cqp_ce_handler(struct nes_device *nesdev, struct nes_hw_cq *cq)
 				cqp_request, le32_to_cpu(cqp_wqe->wqe_words[NES_CQP_WQE_OPCODE_IDX])&0x3f, head);
 		/* Ring doorbell (1 WQEs) */
 		barrier();
-		nes_write32(nesdev->regs+NES_WQE_ALLOC, 0x01800000 | nesdev->cqp.qp_id);
+		nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+				    0x01800000 | nesdev->cqp.qp_id);
 	}
 	spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
 
diff --git a/drivers/infiniband/hw/nes/nes_mgt.c b/drivers/infiniband/hw/nes/nes_mgt.c
index 21e0ebd..5c5073c 100644
--- a/drivers/infiniband/hw/nes/nes_mgt.c
+++ b/drivers/infiniband/hw/nes/nes_mgt.c
@@ -96,7 +96,8 @@ static void nes_replenish_mgt_rq(struct nes_vnic_mgt *mgtvnic)
 			atomic_dec(&mgtvnic->rx_skbs_needed);
 			barrier();
 			if (++rx_wqes_posted == 255) {
-				nes_write32(nesdev->regs + NES_WQE_ALLOC, (rx_wqes_posted << 24) | nesmgt->qp_id);
+				nes_write32_relaxed(nesdev->regs + NES_WQE_ALLOC,
+					(rx_wqes_posted << 24) | nesmgt->qp_id);
 				rx_wqes_posted = 0;
 			}
 		} else {
@@ -115,7 +116,8 @@ static void nes_replenish_mgt_rq(struct nes_vnic_mgt *mgtvnic)
 	} while (atomic_read(&mgtvnic->rx_skbs_needed));
 	barrier();
 	if (rx_wqes_posted)
-		nes_write32(nesdev->regs + NES_WQE_ALLOC, (rx_wqes_posted << 24) | nesmgt->qp_id);
+		nes_write32_relaxed(nesdev->regs + NES_WQE_ALLOC,
+				    (rx_wqes_posted << 24) | nesmgt->qp_id);
 	nesmgt->replenishing_rq = 0;
 }
 
@@ -995,7 +997,8 @@ int nes_init_mgt_qp(struct nes_device *nesdev, struct net_device *netdev, struct
 		barrier();
 
 		/* Ring doorbell (2 WQEs) */
-		nes_write32(nesdev->regs + NES_WQE_ALLOC, 0x02800000 | nesdev->cqp.qp_id);
+		nes_write32_relaxed(nesdev->regs + NES_WQE_ALLOC,
+				    0x02800000 | nesdev->cqp.qp_id);
 
 		spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
 		nes_debug(NES_DBG_INIT, "Waiting for create MGT QP%u to complete.\n",
@@ -1050,7 +1053,8 @@ int nes_init_mgt_qp(struct nes_device *nesdev, struct net_device *netdev, struct
 		do {
 			counter = min(wqe_count, ((u32)255));
 			wqe_count -= counter;
-			nes_write32(nesdev->regs + NES_WQE_ALLOC, (counter << 24) | mgtvnic->mgt.qp_id);
+			nes_write32_relaxed(nesdev->regs + NES_WQE_ALLOC,
+					(counter << 24) | mgtvnic->mgt.qp_id);
 		} while (wqe_count);
 
 		nes_write32(nesdev->regs + NES_CQE_ALLOC, NES_CQE_ALLOC_NOTIFY_NEXT |
@@ -1124,7 +1128,8 @@ void nes_destroy_mgt(struct nes_vnic *nesvnic)
 		barrier();
 
 		/* Ring doorbell (2 WQEs) */
-		nes_write32(nesdev->regs + NES_WQE_ALLOC, 0x02800000 | nesdev->cqp.qp_id);
+		nes_write32_relaxed(nesdev->regs + NES_WQE_ALLOC,
+				    0x02800000 | nesdev->cqp.qp_id);
 
 		spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
 		nes_debug(NES_DBG_SHUTDOWN, "Waiting for CQP, cqp_head=%u, cqp.sq_head=%u,"
diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c
index 0a75164..0653da0 100644
--- a/drivers/infiniband/hw/nes/nes_nic.c
+++ b/drivers/infiniband/hw/nes/nes_nic.c
@@ -683,7 +683,7 @@ static int nes_netdev_start_xmit(struct sk_buff *skb, struct net_device *netdev)
 	barrier();
 
 	if (wqe_count)
-		nes_write32(nesdev->regs+NES_WQE_ALLOC,
+		nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
 				(wqe_count << 24) | (1 << 23) | nesvnic->nic.qp_id);
 
 	netif_trans_update(netdev);
diff --git a/drivers/infiniband/hw/nes/nes_utils.c b/drivers/infiniband/hw/nes/nes_utils.c
index 21b4a83..79a3d98 100644
--- a/drivers/infiniband/hw/nes/nes_utils.c
+++ b/drivers/infiniband/hw/nes/nes_utils.c
@@ -661,7 +661,8 @@ void nes_post_cqp_request(struct nes_device *nesdev,
 		barrier();
 
 		/* Ring doorbell (1 WQEs) */
-		nes_write32(nesdev->regs+NES_WQE_ALLOC, 0x01800000 | nesdev->cqp.qp_id);
+		nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+				    0x01800000 | nesdev->cqp.qp_id);
 
 		barrier();
 	} else {
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
index 162475a..87f8635 100644
--- a/drivers/infiniband/hw/nes/nes_verbs.c
+++ b/drivers/infiniband/hw/nes/nes_verbs.c
@@ -3310,7 +3310,7 @@ static int nes_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr,
 	while (wqe_count) {
 		counter = min(wqe_count, ((u32)255));
 		wqe_count -= counter;
-		nes_write32(nesdev->regs + NES_WQE_ALLOC,
+		nes_write32_relaxed(nesdev->regs + NES_WQE_ALLOC,
 				(counter << 24) | 0x00800000 | nesqp->hwqp.qp_id);
 	}
 
@@ -3404,7 +3404,8 @@ static int nes_post_recv(struct ib_qp *ibqp, struct ib_recv_wr *ib_wr,
 	while (wqe_count) {
 		counter = min(wqe_count, ((u32)255));
 		wqe_count -= counter;
-		nes_write32(nesdev->regs+NES_WQE_ALLOC, (counter<<24) | nesqp->hwqp.qp_id);
+		nes_write32_relaxed(nesdev->regs+NES_WQE_ALLOC,
+				    (counter<<24) | nesqp->hwqp.qp_id);
 	}
 
 	spin_unlock_irqrestore(&nesqp->lock, flags);
-- 
2.7.4

  parent reply	other threads:[~2018-03-20  2:47 UTC|newest]

Thread overview: 100+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-20  2:47 [PATCH v4 0/6] ib: Eliminate duplicate barriers on weakly-ordered archs Sinan Kaya
2018-03-20  2:47 ` Sinan Kaya
2018-03-20  2:47 ` [PATCH v4 1/6] RDMA/bnxt_re: " Sinan Kaya
2018-03-20  2:47   ` Sinan Kaya
2018-03-20 14:48   ` Jason Gunthorpe
2018-03-20 14:48     ` Jason Gunthorpe
2018-03-20 15:00     ` Sinan Kaya
2018-03-20 15:00       ` Sinan Kaya
2018-03-20 15:08       ` Sinan Kaya
2018-03-20 15:08         ` Sinan Kaya
2018-03-20 15:23         ` Jason Gunthorpe
2018-03-20 15:23           ` Jason Gunthorpe
2018-03-20 15:20       ` Jason Gunthorpe
2018-03-20 15:20         ` Jason Gunthorpe
2018-03-20 15:30         ` Sinan Kaya
2018-03-20 15:30           ` Sinan Kaya
2018-03-20 16:02           ` Jason Gunthorpe
2018-03-20 16:02             ` Jason Gunthorpe
2018-03-20  2:47 ` [PATCH v4 2/6] IB/mlx4: " Sinan Kaya
2018-03-20  2:47   ` Sinan Kaya
2018-03-20 14:48   ` Jason Gunthorpe
2018-03-20 14:48     ` Jason Gunthorpe
2018-03-20  2:47 ` [PATCH v4 3/6] RDMA/i40iw: " Sinan Kaya
2018-03-20  2:47   ` Sinan Kaya
2018-03-20 14:56   ` Jason Gunthorpe
2018-03-20 14:56     ` Jason Gunthorpe
2018-03-21 13:38   ` Shiraz Saleem
2018-03-21 13:38     ` Shiraz Saleem
2018-03-21 20:02   ` Jason Gunthorpe
2018-03-21 20:02     ` Jason Gunthorpe
2018-03-21 21:01     ` Sinan Kaya
2018-03-21 21:01       ` Sinan Kaya
2018-03-20  2:47 ` [PATCH v4 4/6] infiniband: cxgb4: " Sinan Kaya
2018-03-20  2:47   ` Sinan Kaya
2018-03-20 14:51   ` Jason Gunthorpe
2018-03-20 14:51     ` Jason Gunthorpe
2018-03-20 15:10     ` Steve Wise
2018-03-20 15:10       ` Steve Wise
2018-03-20 15:10       ` Steve Wise
2018-03-20 15:38     ` Steve Wise
2018-03-20 15:38       ` Steve Wise
2018-03-20 15:38       ` Steve Wise
2018-03-22  6:44   ` kbuild test robot
2018-03-22  6:44     ` kbuild test robot
2018-03-22  6:44     ` kbuild test robot
2018-03-22 12:24     ` okaya
2018-03-22 12:24       ` okaya at codeaurora.org
2018-03-22 12:48       ` okaya
2018-03-22 12:48         ` okaya at codeaurora.org
2018-03-22 14:33         ` Sinan Kaya
2018-03-22 14:33           ` Sinan Kaya
2018-03-22 14:40         ` Steve Wise
2018-03-22 14:40           ` Steve Wise
2018-03-22 14:40           ` Steve Wise
2018-03-22 14:52           ` Sinan Kaya
2018-03-22 14:52             ` Sinan Kaya
2018-03-22 16:28             ` Steve Wise
2018-03-22 16:28               ` Steve Wise
2018-03-22 16:28               ` Steve Wise
2018-03-22 19:44               ` Casey Leedom
2018-03-22 19:44                 ` Casey Leedom
2018-03-22 20:16                 ` Jason Gunthorpe
2018-03-22 20:16                   ` Jason Gunthorpe
2018-03-22 20:45                   ` Casey Leedom
2018-03-22 20:45                     ` Casey Leedom
2018-03-22 21:25                     ` Jason Gunthorpe
2018-03-22 21:25                       ` Jason Gunthorpe
2018-03-22 21:27                     ` Sinan Kaya
2018-03-22 21:27                       ` Sinan Kaya
2018-03-22 22:02                       ` Casey Leedom
2018-03-22 22:02                         ` Casey Leedom
     [not found]         ` <437ab002-b8db-24aa-583e-0e61d61aaa97@codeaurora.org>
2018-03-22 18:46           ` Jason Gunthorpe
2018-03-22 18:46             ` Jason Gunthorpe
2018-03-22 18:48         ` Jason Gunthorpe
2018-03-22 18:48           ` Jason Gunthorpe
2018-03-22 18:58           ` Sinan Kaya
2018-03-22 18:58             ` Sinan Kaya
2018-03-23  4:14   ` kbuild test robot
2018-03-23  4:14     ` kbuild test robot
2018-03-23  4:14     ` kbuild test robot
2018-03-20  2:47 ` Sinan Kaya [this message]
2018-03-20  2:47   ` [PATCH v4 5/6] IB/nes: " Sinan Kaya
2018-03-20 14:54   ` Jason Gunthorpe
2018-03-20 14:54     ` Jason Gunthorpe
2018-03-20 15:23     ` Sinan Kaya
2018-03-20 15:23       ` Sinan Kaya
2018-03-20 16:01       ` Jason Gunthorpe
2018-03-20 16:01         ` Jason Gunthorpe
2018-03-20 16:08         ` Sinan Kaya
2018-03-20 16:08           ` Sinan Kaya
2018-03-20 16:29           ` Jason Gunthorpe
2018-03-20 16:29             ` Jason Gunthorpe
2018-03-20  2:47 ` [PATCH v4 6/6] RDMA/qedr: eliminate duplicate barriers on weakly-ordered archs #2 Sinan Kaya
2018-03-20  2:47   ` Sinan Kaya
2018-03-20  7:38   ` Kalderon, Michal
2018-03-20  7:38     ` Kalderon, Michal
2018-03-20 14:55   ` Jason Gunthorpe
2018-03-20 14:55     ` Jason Gunthorpe
2018-03-21 20:08 ` [PATCH v4 0/6] ib: Eliminate duplicate barriers on weakly-ordered archs Jason Gunthorpe
2018-03-21 20:08   ` Jason Gunthorpe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1521514068-8856-6-git-send-email-okaya@codeaurora.org \
    --to=okaya@codeaurora.org \
    --cc=dledford@redhat.com \
    --cc=faisal.latif@intel.com \
    --cc=jgg@ziepe.ca \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=sulrich@codeaurora.org \
    --cc=timur@codeaurora.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.