From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Guy Levi <guyle@mellanox.com>, Moni Shoua <monis@mellanox.com>,
Leon Romanovsky <leonro@mellanox.com>,
Doug Ledford <dledford@redhat.com>,
Sasha Levin <sashal@kernel.org>,
linux-rdma@vger.kernel.org
Subject: [PATCH AUTOSEL 4.19 25/32] IB/mlx5: Fix MR registration flow to use UMR properly
Date: Tue, 6 Aug 2019 17:35:13 -0400 [thread overview]
Message-ID: <20190806213522.19859-25-sashal@kernel.org> (raw)
In-Reply-To: <20190806213522.19859-1-sashal@kernel.org>
From: Guy Levi <guyle@mellanox.com>
[ Upstream commit e5366d309a772fef264ec85e858f9ea46f939848 ]
Driver shouldn't allow to use UMR to register a MR when
umr_modify_atomic_disabled is set. Otherwise it will always end up with a
failure in the post send flow which sets the UMR WQE to modify atomic access
right.
Fixes: c8d75a980fab ("IB/mlx5: Respect new UMR capabilities")
Signed-off-by: Guy Levi <guyle@mellanox.com>
Reviewed-by: Moni Shoua <monis@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Link: https://lore.kernel.org/r/20190731081929.32559-1-leon@kernel.org
Signed-off-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/infiniband/hw/mlx5/mr.c | 27 +++++++++------------------
1 file changed, 9 insertions(+), 18 deletions(-)
diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c
index 7df4a4fe4af47..4ea8d04143ae5 100644
--- a/drivers/infiniband/hw/mlx5/mr.c
+++ b/drivers/infiniband/hw/mlx5/mr.c
@@ -51,22 +51,12 @@ static void clean_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr);
static void dereg_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr);
static int mr_cache_max_order(struct mlx5_ib_dev *dev);
static int unreg_umr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr);
-static bool umr_can_modify_entity_size(struct mlx5_ib_dev *dev)
-{
- return !MLX5_CAP_GEN(dev->mdev, umr_modify_entity_size_disabled);
-}
static bool umr_can_use_indirect_mkey(struct mlx5_ib_dev *dev)
{
return !MLX5_CAP_GEN(dev->mdev, umr_indirect_mkey_disabled);
}
-static bool use_umr(struct mlx5_ib_dev *dev, int order)
-{
- return order <= mr_cache_max_order(dev) &&
- umr_can_modify_entity_size(dev);
-}
-
static int destroy_mkey(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr)
{
int err = mlx5_core_destroy_mkey(dev->mdev, &mr->mmkey);
@@ -1302,7 +1292,7 @@ struct ib_mr *mlx5_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
{
struct mlx5_ib_dev *dev = to_mdev(pd->device);
struct mlx5_ib_mr *mr = NULL;
- bool populate_mtts = false;
+ bool use_umr;
struct ib_umem *umem;
int page_shift;
int npages;
@@ -1335,29 +1325,30 @@ struct ib_mr *mlx5_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
if (err < 0)
return ERR_PTR(err);
- if (use_umr(dev, order)) {
+ use_umr = !MLX5_CAP_GEN(dev->mdev, umr_modify_entity_size_disabled) &&
+ (!MLX5_CAP_GEN(dev->mdev, umr_modify_atomic_disabled) ||
+ !MLX5_CAP_GEN(dev->mdev, atomic));
+
+ if (order <= mr_cache_max_order(dev) && use_umr) {
mr = alloc_mr_from_cache(pd, umem, virt_addr, length, ncont,
page_shift, order, access_flags);
if (PTR_ERR(mr) == -EAGAIN) {
mlx5_ib_dbg(dev, "cache empty for order %d\n", order);
mr = NULL;
}
- populate_mtts = false;
} else if (!MLX5_CAP_GEN(dev->mdev, umr_extended_translation_offset)) {
if (access_flags & IB_ACCESS_ON_DEMAND) {
err = -EINVAL;
pr_err("Got MR registration for ODP MR > 512MB, not supported for Connect-IB\n");
goto error;
}
- populate_mtts = true;
+ use_umr = false;
}
if (!mr) {
- if (!umr_can_modify_entity_size(dev))
- populate_mtts = true;
mutex_lock(&dev->slow_path_mutex);
mr = reg_create(NULL, pd, virt_addr, length, umem, ncont,
- page_shift, access_flags, populate_mtts);
+ page_shift, access_flags, !use_umr);
mutex_unlock(&dev->slow_path_mutex);
}
@@ -1375,7 +1366,7 @@ struct ib_mr *mlx5_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
update_odp_mr(mr);
#endif
- if (!populate_mtts) {
+ if (use_umr) {
int update_xlt_flags = MLX5_IB_UPD_XLT_ENABLE;
if (access_flags & IB_ACCESS_ON_DEMAND)
--
2.20.1
next prev parent reply other threads:[~2019-08-06 21:36 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-06 21:34 [PATCH AUTOSEL 4.19 01/32] clk: at91: generated: Truncate divisor to GENERATED_MAX_DIV + 1 Sasha Levin
2019-08-06 21:34 ` [PATCH AUTOSEL 4.19 02/32] clk: sprd: Select REGMAP_MMIO to avoid compile errors Sasha Levin
2019-08-06 21:34 ` [PATCH AUTOSEL 4.19 03/32] clk: renesas: cpg-mssr: Fix reset control race condition Sasha Levin
2019-08-06 21:34 ` [PATCH AUTOSEL 4.19 04/32] xtensa: fix build for cores with coprocessors Sasha Levin
2019-08-06 21:34 ` [PATCH AUTOSEL 4.19 05/32] xen/pciback: remove set but not used variable 'old_state' Sasha Levin
2019-08-06 21:34 ` [PATCH AUTOSEL 4.19 06/32] irqchip/gic-v3-its: Free unused vpt_page when alloc vpe table fail Sasha Levin
2019-08-06 21:34 ` [PATCH AUTOSEL 4.19 07/32] irqchip/irq-imx-gpcv2: Forward irq type to parent Sasha Levin
2019-08-06 21:34 ` [PATCH AUTOSEL 4.19 08/32] perf header: Fix divide by zero error if f_header.attr_size==0 Sasha Levin
2019-08-06 21:34 ` [PATCH AUTOSEL 4.19 09/32] perf header: Fix use of unitialized value warning Sasha Levin
2019-08-06 21:34 ` [PATCH AUTOSEL 4.19 10/32] libata: zpodd: Fix small read overflow in zpodd_get_mech_type() Sasha Levin
2019-08-06 21:34 ` [PATCH AUTOSEL 4.19 11/32] drm/bridge: lvds-encoder: Fix build error while CONFIG_DRM_KMS_HELPER=m Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 12/32] Btrfs: fix deadlock between fiemap and transaction commits Sasha Levin
2019-08-07 9:47 ` David Sterba
2019-08-07 10:51 ` Greg KH
2019-08-07 12:44 ` David Sterba
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 13/32] scsi: hpsa: correct scsi command status issue after reset Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 14/32] scsi: qla2xxx: Fix possible fcport null-pointer dereferences Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 15/32] exit: make setting exit_state consistent Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 16/32] drm/amdgpu: fix a potential information leaking bug Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 17/32] ata: libahci: do not complain in case of deferred probe Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 18/32] kbuild: modpost: handle KBUILD_EXTRA_SYMBOLS only for external modules Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 19/32] kbuild: Check for unknown options with cc-option usage in Kconfig and clang Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 20/32] arm64/efi: fix variable 'si' set but not used Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 21/32] drm/vgem: fix cache synchronization on arm/arm64 Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 22/32] arm64: unwind: Prohibit probing on return_address() Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 23/32] arm64/mm: fix variable 'pud' set but not used Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 24/32] IB/core: Add mitigation for Spectre V1 Sasha Levin
2019-08-06 21:35 ` Sasha Levin [this message]
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 26/32] IB/mad: Fix use-after-free in ib mad completion handling Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 27/32] drm: msm: Fix add_gpu_components Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 28/32] drm/exynos: fix missing decrement of retry counter Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 29/32] Revert "kmemleak: allow to coexist with fault injection" Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 30/32] ocfs2: remove set but not used variable 'last_hash' Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 31/32] coredump: split pipe command whitespace before expanding template Sasha Levin
2019-08-06 21:35 ` [PATCH AUTOSEL 4.19 32/32] asm-generic: fix -Wtype-limits compiler warnings Sasha Levin
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=20190806213522.19859-25-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=dledford@redhat.com \
--cc=guyle@mellanox.com \
--cc=leonro@mellanox.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=monis@mellanox.com \
--cc=stable@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox