public inbox for stable@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH AUTOSEL 5.10 01/26] IB/rdmavt: add missing locks in rvt_ruc_loopback
@ 2022-06-01 13:57 Sasha Levin
  2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 02/26] ARM: dts: ox820: align interrupt controller node name with dtschema Sasha Levin
                   ` (24 more replies)
  0 siblings, 25 replies; 26+ messages in thread
From: Sasha Levin @ 2022-06-01 13:57 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Niels Dossche, Jason Gunthorpe, Sasha Levin, dennis.dalessandro,
	linux-rdma

From: Niels Dossche <dossche.niels@gmail.com>

[ Upstream commit 22cbc6c2681a0a4fe76150270426e763d52353a4 ]

The documentation of the function rvt_error_qp says both r_lock and
s_lock need to be held when calling that function.
It also asserts using lockdep that both of those locks are held.
rvt_error_qp is called form rvt_send_cq, which is called from
rvt_qp_complete_swqe, which is called from rvt_send_complete, which is
called from rvt_ruc_loopback in two places. Both of these places do not
hold r_lock. Fix this by acquiring a spin_lock of r_lock in both of
these places.
The r_lock acquiring cannot be added in rvt_qp_complete_swqe because
some of its other callers already have r_lock acquired.

Link: https://lore.kernel.org/r/20220228195144.71946-1-dossche.niels@gmail.com
Signed-off-by: Niels Dossche <dossche.niels@gmail.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/infiniband/sw/rdmavt/qp.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/infiniband/sw/rdmavt/qp.c b/drivers/infiniband/sw/rdmavt/qp.c
index d8d52a00a1be..585a9c76e518 100644
--- a/drivers/infiniband/sw/rdmavt/qp.c
+++ b/drivers/infiniband/sw/rdmavt/qp.c
@@ -2826,7 +2826,7 @@ void rvt_qp_iter(struct rvt_dev_info *rdi,
 EXPORT_SYMBOL(rvt_qp_iter);
 
 /*
- * This should be called with s_lock held.
+ * This should be called with s_lock and r_lock held.
  */
 void rvt_send_complete(struct rvt_qp *qp, struct rvt_swqe *wqe,
 		       enum ib_wc_status status)
@@ -3185,7 +3185,9 @@ void rvt_ruc_loopback(struct rvt_qp *sqp)
 	rvp->n_loop_pkts++;
 flush_send:
 	sqp->s_rnr_retry = sqp->s_rnr_retry_cnt;
+	spin_lock(&sqp->r_lock);
 	rvt_send_complete(sqp, wqe, send_status);
+	spin_unlock(&sqp->r_lock);
 	if (local_ops) {
 		atomic_dec(&sqp->local_ops_pending);
 		local_ops = 0;
@@ -3239,7 +3241,9 @@ void rvt_ruc_loopback(struct rvt_qp *sqp)
 	spin_unlock_irqrestore(&qp->r_lock, flags);
 serr_no_r_lock:
 	spin_lock_irqsave(&sqp->s_lock, flags);
+	spin_lock(&sqp->r_lock);
 	rvt_send_complete(sqp, wqe, send_status);
+	spin_unlock(&sqp->r_lock);
 	if (sqp->ibqp.qp_type == IB_QPT_RC) {
 		int lastwqe;
 
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2022-06-01 14:08 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-06-01 13:57 [PATCH AUTOSEL 5.10 01/26] IB/rdmavt: add missing locks in rvt_ruc_loopback Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 02/26] ARM: dts: ox820: align interrupt controller node name with dtschema Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 03/26] ARM: dts: s5pv210: align DMA channels " Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 04/26] arm64: dts: qcom: msm8994: Fix BLSP[12]_DMA channels count Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 05/26] PM / devfreq: rk3399_dmc: Disable edev on remove() Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 06/26] crypto: ccree - use fine grained DMA mapping dir Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 07/26] soc: ti: ti_sci_pm_domains: Check for null return of devm_kcalloc Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 08/26] fs: jfs: fix possible NULL pointer dereference in dbFree() Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 09/26] arm64: Expand ESR_ELx_WFx_ISS_TI to match its ARMv8.7 definition Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 10/26] ARM: OMAP1: clock: Fix UART rate reporting algorithm Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 11/26] selftests/resctrl: Change the default limited time to 120 seconds Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 12/26] powerpc/fadump: Fix fadump to work with a different endian capture kernel Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 13/26] fat: add ratelimit to fat*_ent_bread() Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 14/26] pinctrl: renesas: rzn1: Fix possible null-ptr-deref in sh_pfc_map_resources() Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 15/26] ARM: versatile: Add missing of_node_put in dcscb_init Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 16/26] ARM: dts: exynos: add atmel,24c128 fallback to Samsung EEPROM Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 17/26] ARM: hisi: Add missing of_node_put after of_find_compatible_node Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 18/26] PCI: Avoid pci_dev_lock() AB/BA deadlock with sriov_numvfs_store() Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 19/26] tracing: incorrect isolate_mote_t cast in mm_vmscan_lru_isolate Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 20/26] powerpc/powernv/vas: Assign real address to rx_fifo in vas_rx_win_attr Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 21/26] powerpc/xics: fix refcount leak in icp_opal_init() Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 22/26] powerpc/powernv: fix missing of_node_put in uv_init() Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 23/26] macintosh/via-pmu: Fix build failure when CONFIG_INPUT is disabled Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 24/26] powerpc/iommu: Add missing of_node_put in iommu_init_early_dart Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 25/26] RDMA/hfi1: Prevent panic when SDMA is disabled Sasha Levin
2022-06-01 13:57 ` [PATCH AUTOSEL 5.10 26/26] drm: fix EDID struct for old ARM OABI format Sasha Levin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox