From: Sasha Levin Date: Fri, 28 Feb 2025 04:41:24 +0000 (-0500) Subject: Fixes for 5.10 X-Git-Tag: v6.6.81~49 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2e3ffded1bbc754a010fb54963ba0ae84ac2b004;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 5.10 Signed-off-by: Sasha Levin --- diff --git a/queue-5.10/ib-mlx5-set-and-get-correct-qp_num-for-a-dct-qp.patch b/queue-5.10/ib-mlx5-set-and-get-correct-qp_num-for-a-dct-qp.patch new file mode 100644 index 0000000000..2a6dc09800 --- /dev/null +++ b/queue-5.10/ib-mlx5-set-and-get-correct-qp_num-for-a-dct-qp.patch @@ -0,0 +1,50 @@ +From dfeb69a4e1a3bc8f4c3237ab844a38e212dc8d45 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 19 Jan 2025 14:39:46 +0200 +Subject: IB/mlx5: Set and get correct qp_num for a DCT QP + +From: Mark Zhang + +[ Upstream commit 12d044770e12c4205fa69535b4fa8a9981fea98f ] + +When a DCT QP is created on an active lag, it's dctc.port is assigned +in a round-robin way, which is from 1 to dev->lag_port. In this case +when querying this QP, we may get qp_attr.port_num > 2. +Fix this by setting qp->port when modifying a DCT QP, and read port_num +from qp->port instead of dctc.port when querying it. + +Fixes: 7c4b1ab9f167 ("IB/mlx5: Add DCT RoCE LAG support") +Signed-off-by: Mark Zhang +Reviewed-by: Maher Sanalla +Link: https://patch.msgid.link/94c76bf0adbea997f87ffa27674e0a7118ad92a9.1737290358.git.leon@kernel.org +Signed-off-by: Leon Romanovsky +Signed-off-by: Sasha Levin +--- + drivers/infiniband/hw/mlx5/qp.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c +index e0db91d1e7492..a00dde2f3fd39 100644 +--- a/drivers/infiniband/hw/mlx5/qp.c ++++ b/drivers/infiniband/hw/mlx5/qp.c +@@ -4219,6 +4219,8 @@ static int mlx5_ib_modify_dct(struct ib_qp *ibqp, struct ib_qp_attr *attr, + + set_id = mlx5_ib_get_counters_id(dev, attr->port_num - 1); + MLX5_SET(dctc, dctc, counter_set_id, set_id); ++ ++ qp->port = attr->port_num; + } else if (cur_state == IB_QPS_INIT && new_state == IB_QPS_RTR) { + struct mlx5_ib_modify_qp_resp resp = {}; + u32 out[MLX5_ST_SZ_DW(create_dct_out)] = {}; +@@ -4714,7 +4716,7 @@ static int mlx5_ib_dct_query_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *mqp, + } + + if (qp_attr_mask & IB_QP_PORT) +- qp_attr->port_num = MLX5_GET(dctc, dctc, port); ++ qp_attr->port_num = mqp->port; + if (qp_attr_mask & IB_QP_MIN_RNR_TIMER) + qp_attr->min_rnr_timer = MLX5_GET(dctc, dctc, min_rnr_nak); + if (qp_attr_mask & IB_QP_AV) { +-- +2.39.5 + diff --git a/queue-5.10/rdma-mlx5-fix-bind-qp-error-cleanup-flow.patch b/queue-5.10/rdma-mlx5-fix-bind-qp-error-cleanup-flow.patch new file mode 100644 index 0000000000..4baebb08f6 --- /dev/null +++ b/queue-5.10/rdma-mlx5-fix-bind-qp-error-cleanup-flow.patch @@ -0,0 +1,63 @@ +From e4f011d887b206d19ae6b634cf3c69cc74b79dbb Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 20 Feb 2025 08:47:10 +0200 +Subject: RDMA/mlx5: Fix bind QP error cleanup flow + +From: Patrisious Haddad + +[ Upstream commit e1a0bdbdfdf08428f0ede5ae49c7f4139ac73ef5 ] + +When there is a failure during bind QP, the cleanup flow destroys the +counter regardless if it is the one that created it or not, which is +problematic since if it isn't the one that created it, that counter could +still be in use. + +Fix that by destroying the counter only if it was created during this call. + +Fixes: 45842fc627c7 ("IB/mlx5: Support statistic q counter configuration") +Signed-off-by: Patrisious Haddad +Reviewed-by: Mark Zhang +Link: https://patch.msgid.link/25dfefddb0ebefa668c32e06a94d84e3216257cf.1740033937.git.leon@kernel.org +Reviewed-by: Zhu Yanjun +Signed-off-by: Leon Romanovsky +Signed-off-by: Sasha Levin +--- + drivers/infiniband/hw/mlx5/counters.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/drivers/infiniband/hw/mlx5/counters.c b/drivers/infiniband/hw/mlx5/counters.c +index 70c8fd67ee2f6..f6bae1f7545b5 100644 +--- a/drivers/infiniband/hw/mlx5/counters.c ++++ b/drivers/infiniband/hw/mlx5/counters.c +@@ -337,6 +337,7 @@ static int mlx5_ib_counter_bind_qp(struct rdma_counter *counter, + struct ib_qp *qp) + { + struct mlx5_ib_dev *dev = to_mdev(qp->device); ++ bool new = false; + int err; + + if (!counter->id) { +@@ -351,6 +352,7 @@ static int mlx5_ib_counter_bind_qp(struct rdma_counter *counter, + return err; + counter->id = + MLX5_GET(alloc_q_counter_out, out, counter_set_id); ++ new = true; + } + + err = mlx5_ib_qp_set_counter(qp, counter); +@@ -360,8 +362,10 @@ static int mlx5_ib_counter_bind_qp(struct rdma_counter *counter, + return 0; + + fail_set_counter: +- mlx5_ib_counter_dealloc(counter); +- counter->id = 0; ++ if (new) { ++ mlx5_ib_counter_dealloc(counter); ++ counter->id = 0; ++ } + + return err; + } +-- +2.39.5 + diff --git a/queue-5.10/series b/queue-5.10/series index c6f4a7458e..f2d37898c6 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -362,3 +362,6 @@ mtd-rawnand-cadence-fix-error-code-in-cadence_nand_init.patch mtd-rawnand-cadence-use-dma_map_resource-for-sdma-address.patch mtd-rawnand-cadence-fix-incorrect-device-in-dma_unmap_single.patch x86-cpu-kvm-srso-fix-possible-missing-ibpb-on-vm-exit.patch +ib-mlx5-set-and-get-correct-qp_num-for-a-dct-qp.patch +rdma-mlx5-fix-bind-qp-error-cleanup-flow.patch +sunrpc-suppress-warnings-for-unused-procfs-functions.patch diff --git a/queue-5.10/sunrpc-suppress-warnings-for-unused-procfs-functions.patch b/queue-5.10/sunrpc-suppress-warnings-for-unused-procfs-functions.patch new file mode 100644 index 0000000000..19301ca781 --- /dev/null +++ b/queue-5.10/sunrpc-suppress-warnings-for-unused-procfs-functions.patch @@ -0,0 +1,71 @@ +From 0ea8864588b6c32ae5b4a3c399f39d196c6fb7b9 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 25 Feb 2025 15:52:21 +0100 +Subject: sunrpc: suppress warnings for unused procfs functions + +From: Arnd Bergmann + +[ Upstream commit 1f7a4f98c11fbeb18ed21f3b3a497e90a50ad2e0 ] + +There is a warning about unused variables when building with W=1 and no procfs: + +net/sunrpc/cache.c:1660:30: error: 'cache_flush_proc_ops' defined but not used [-Werror=unused-const-variable=] + 1660 | static const struct proc_ops cache_flush_proc_ops = { + | ^~~~~~~~~~~~~~~~~~~~ +net/sunrpc/cache.c:1622:30: error: 'content_proc_ops' defined but not used [-Werror=unused-const-variable=] + 1622 | static const struct proc_ops content_proc_ops = { + | ^~~~~~~~~~~~~~~~ +net/sunrpc/cache.c:1598:30: error: 'cache_channel_proc_ops' defined but not used [-Werror=unused-const-variable=] + 1598 | static const struct proc_ops cache_channel_proc_ops = { + | ^~~~~~~~~~~~~~~~~~~~~~ + +These are used inside of an #ifdef, so replacing that with an +IS_ENABLED() check lets the compiler see how they are used while +still dropping them during dead code elimination. + +Fixes: dbf847ecb631 ("knfsd: allow cache_register to return error on failure") +Reviewed-by: Jeff Layton +Acked-by: Chuck Lever +Signed-off-by: Arnd Bergmann +Signed-off-by: Anna Schumaker +Signed-off-by: Sasha Levin +--- + net/sunrpc/cache.c | 10 +++------- + 1 file changed, 3 insertions(+), 7 deletions(-) + +diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c +index 522e43f66ecd0..486c466ab4668 100644 +--- a/net/sunrpc/cache.c ++++ b/net/sunrpc/cache.c +@@ -1678,12 +1678,14 @@ static void remove_cache_proc_entries(struct cache_detail *cd) + } + } + +-#ifdef CONFIG_PROC_FS + static int create_cache_proc_entries(struct cache_detail *cd, struct net *net) + { + struct proc_dir_entry *p; + struct sunrpc_net *sn; + ++ if (!IS_ENABLED(CONFIG_PROC_FS)) ++ return 0; ++ + sn = net_generic(net, sunrpc_net_id); + cd->procfs = proc_mkdir(cd->name, sn->proc_net_rpc); + if (cd->procfs == NULL) +@@ -1711,12 +1713,6 @@ static int create_cache_proc_entries(struct cache_detail *cd, struct net *net) + remove_cache_proc_entries(cd); + return -ENOMEM; + } +-#else /* CONFIG_PROC_FS */ +-static int create_cache_proc_entries(struct cache_detail *cd, struct net *net) +-{ +- return 0; +-} +-#endif + + void __init cache_initialize(void) + { +-- +2.39.5 +