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>,
Shiraz Saleem <shiraz.saleem@intel.com>,
Doug Ledford <dledford@redhat.com>,
Jason Gunthorpe <jgg@ziepe.ca>,
linux-kernel@vger.kernel.org
Subject: [PATCH v4 3/6] RDMA/i40iw: Eliminate duplicate barriers on weakly-ordered archs
Date: Mon, 19 Mar 2018 22:47:45 -0400 [thread overview]
Message-ID: <1521514068-8856-4-git-send-email-okaya@codeaurora.org> (raw)
In-Reply-To: <1521514068-8856-1-git-send-email-okaya@codeaurora.org>
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().
Since code already has an explicit barrier call, changing writel() to
writel_relaxed().
Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
---
drivers/infiniband/hw/i40iw/i40iw_ctrl.c | 6 ++++--
drivers/infiniband/hw/i40iw/i40iw_osdep.h | 1 +
drivers/infiniband/hw/i40iw/i40iw_uk.c | 2 +-
drivers/infiniband/hw/i40iw/i40iw_utils.c | 11 +++++++++++
4 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
index c74fd33..47f473e 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
@@ -706,9 +706,11 @@ static void i40iw_sc_ccq_arm(struct i40iw_sc_cq *ccq)
wmb(); /* make sure shadow area is updated before arming */
if (ccq->dev->is_pf)
- i40iw_wr32(ccq->dev->hw, I40E_PFPE_CQARM, ccq->cq_uk.cq_id);
+ i40iw_wr32_relaxed(ccq->dev->hw, I40E_PFPE_CQARM,
+ ccq->cq_uk.cq_id);
else
- i40iw_wr32(ccq->dev->hw, I40E_VFPE_CQARM1, ccq->cq_uk.cq_id);
+ i40iw_wr32_relaxed(ccq->dev->hw, I40E_VFPE_CQARM1,
+ ccq->cq_uk.cq_id);
}
/**
diff --git a/drivers/infiniband/hw/i40iw/i40iw_osdep.h b/drivers/infiniband/hw/i40iw/i40iw_osdep.h
index f27be3e..e06f4b9 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_osdep.h
+++ b/drivers/infiniband/hw/i40iw/i40iw_osdep.h
@@ -213,5 +213,6 @@ void i40iw_hw_stats_start_timer(struct i40iw_sc_vsi *vsi);
void i40iw_hw_stats_stop_timer(struct i40iw_sc_vsi *vsi);
#define i40iw_mmiowb() mmiowb()
void i40iw_wr32(struct i40iw_hw *hw, u32 reg, u32 value);
+void i40iw_wr32_relaxed(struct i40iw_hw *hw, u32 reg, u32 value);
u32 i40iw_rd32(struct i40iw_hw *hw, u32 reg);
#endif /* _I40IW_OSDEP_H_ */
diff --git a/drivers/infiniband/hw/i40iw/i40iw_uk.c b/drivers/infiniband/hw/i40iw/i40iw_uk.c
index 8afa5a6..7f0ebed 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_uk.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_uk.c
@@ -723,7 +723,7 @@ static void i40iw_cq_request_notification(struct i40iw_cq_uk *cq,
wmb(); /* make sure WQE is populated before valid bit is set */
- writel(cq->cq_id, cq->cqe_alloc_reg);
+ writel_relaxed(cq->cq_id, cq->cqe_alloc_reg);
}
/**
diff --git a/drivers/infiniband/hw/i40iw/i40iw_utils.c b/drivers/infiniband/hw/i40iw/i40iw_utils.c
index ddc1056..99aa6f8 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_utils.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_utils.c
@@ -125,6 +125,17 @@ inline void i40iw_wr32(struct i40iw_hw *hw, u32 reg, u32 value)
}
/**
+ * i40iw_wr32_relaxed - write 32 bits to hw register without ordering
+ * @hw: hardware information including registers
+ * @reg: register offset
+ * @value: vvalue to write to register
+ */
+inline void i40iw_wr32_relaxed(struct i40iw_hw *hw, u32 reg, u32 value)
+{
+ writel_relaxed(value, hw->hw_addr + reg);
+}
+
+/**
* i40iw_rd32 - read a 32 bit hw register
* @hw: hardware information including registers
* @reg: register offset
--
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 3/6] RDMA/i40iw: Eliminate duplicate barriers on weakly-ordered archs
Date: Mon, 19 Mar 2018 22:47:45 -0400 [thread overview]
Message-ID: <1521514068-8856-4-git-send-email-okaya@codeaurora.org> (raw)
In-Reply-To: <1521514068-8856-1-git-send-email-okaya@codeaurora.org>
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().
Since code already has an explicit barrier call, changing writel() to
writel_relaxed().
Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
---
drivers/infiniband/hw/i40iw/i40iw_ctrl.c | 6 ++++--
drivers/infiniband/hw/i40iw/i40iw_osdep.h | 1 +
drivers/infiniband/hw/i40iw/i40iw_uk.c | 2 +-
drivers/infiniband/hw/i40iw/i40iw_utils.c | 11 +++++++++++
4 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
index c74fd33..47f473e 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
@@ -706,9 +706,11 @@ static void i40iw_sc_ccq_arm(struct i40iw_sc_cq *ccq)
wmb(); /* make sure shadow area is updated before arming */
if (ccq->dev->is_pf)
- i40iw_wr32(ccq->dev->hw, I40E_PFPE_CQARM, ccq->cq_uk.cq_id);
+ i40iw_wr32_relaxed(ccq->dev->hw, I40E_PFPE_CQARM,
+ ccq->cq_uk.cq_id);
else
- i40iw_wr32(ccq->dev->hw, I40E_VFPE_CQARM1, ccq->cq_uk.cq_id);
+ i40iw_wr32_relaxed(ccq->dev->hw, I40E_VFPE_CQARM1,
+ ccq->cq_uk.cq_id);
}
/**
diff --git a/drivers/infiniband/hw/i40iw/i40iw_osdep.h b/drivers/infiniband/hw/i40iw/i40iw_osdep.h
index f27be3e..e06f4b9 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_osdep.h
+++ b/drivers/infiniband/hw/i40iw/i40iw_osdep.h
@@ -213,5 +213,6 @@ void i40iw_hw_stats_start_timer(struct i40iw_sc_vsi *vsi);
void i40iw_hw_stats_stop_timer(struct i40iw_sc_vsi *vsi);
#define i40iw_mmiowb() mmiowb()
void i40iw_wr32(struct i40iw_hw *hw, u32 reg, u32 value);
+void i40iw_wr32_relaxed(struct i40iw_hw *hw, u32 reg, u32 value);
u32 i40iw_rd32(struct i40iw_hw *hw, u32 reg);
#endif /* _I40IW_OSDEP_H_ */
diff --git a/drivers/infiniband/hw/i40iw/i40iw_uk.c b/drivers/infiniband/hw/i40iw/i40iw_uk.c
index 8afa5a6..7f0ebed 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_uk.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_uk.c
@@ -723,7 +723,7 @@ static void i40iw_cq_request_notification(struct i40iw_cq_uk *cq,
wmb(); /* make sure WQE is populated before valid bit is set */
- writel(cq->cq_id, cq->cqe_alloc_reg);
+ writel_relaxed(cq->cq_id, cq->cqe_alloc_reg);
}
/**
diff --git a/drivers/infiniband/hw/i40iw/i40iw_utils.c b/drivers/infiniband/hw/i40iw/i40iw_utils.c
index ddc1056..99aa6f8 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_utils.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_utils.c
@@ -125,6 +125,17 @@ inline void i40iw_wr32(struct i40iw_hw *hw, u32 reg, u32 value)
}
/**
+ * i40iw_wr32_relaxed - write 32 bits to hw register without ordering
+ * @hw: hardware information including registers
+ * @reg: register offset
+ * @value: vvalue to write to register
+ */
+inline void i40iw_wr32_relaxed(struct i40iw_hw *hw, u32 reg, u32 value)
+{
+ writel_relaxed(value, hw->hw_addr + reg);
+}
+
+/**
* i40iw_rd32 - read a 32 bit hw register
* @hw: hardware information including registers
* @reg: register offset
--
2.7.4
next prev parent reply other threads:[~2018-03-20 2:47 UTC|newest]
Thread overview: 94+ 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 ` Sinan Kaya [this message]
2018-03-20 2:47 ` [PATCH v4 3/6] RDMA/i40iw: " 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: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 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: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 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-20 2:47 ` [PATCH v4 5/6] IB/nes: " Sinan Kaya
2018-03-20 2:47 ` 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-4-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=shiraz.saleem@intel.com \
--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.