Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp1462445ybl; Thu, 22 Aug 2019 15:11:57 -0700 (PDT) X-Google-Smtp-Source: APXvYqwl4Q/tNZ3wk9/meiD2eLopcUVhlp/O5UHFzEINysJM/P/1Jnme+0MSJNPA+fs1+MMQJHnv X-Received: by 2002:a17:90a:8d85:: with SMTP id d5mr1826388pjo.137.1566511917564; Thu, 22 Aug 2019 15:11:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1566511917; cv=none; d=google.com; s=arc-20160816; b=bwHv+C3sDpzHxCOBGkOiO3XYg6oDijciVaUkQjZ23zyX6fKK4lWHj9rgQ3bWhfXb+B 0iddYPfvsSLbnDUH1RypMB5k8qgJMToFdaUWLfs48zNQRhF6MmwcyM8KGqzy28EMpWJX Nq00sE3tfUjwtQpR1I/ONN4gLkjHl0TxAXTxf4wh5QwEtUt/GHeLkgaT0y8xr7rhef68 wgaYOYOS4o22Aqw8SwhOp+Fq3F1NeH+Ecyfq49+vP/NgNy8/gIuLCwgy3vKOtRUwpNa4 cQKOOQDez+MQue2nO2kYERzV9Cw/5a7QxslSrb+XUq/gQIX0pWKEaiInSEIM1LKn0dLU kMlA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=77pZwJc3HKrc1RRnJMGnzfZgD3RBnyPSzg8x5ZAS2vo=; b=S0th+UK2xLoI2Hew4G1YFHFGCmoL4dLWzppSYrYB95RdP/aqxxbPqfYvWze4BHgqWY WgI9r0RHQgCgW+jglNVmnq9gqcBzWbacHW/22y4LX9h4L7U8I9ZjW8qaQ0DAvLFsKyNy nCtLn3FlfZ8dYYKrnBQkQytYRU8eXTjJkIWH6QdOfXuI3aL8WjUV+BeLDIJ7mK+2o2oJ hhY+txIv6/KCb+1FfhtkJ4VPsWziesnLfBpxvlapCk413dmvwjIdcTsanNjUEbHXKEar TBb+PUni03Eoyw9AVPV0PH6fBA/ig7Px6DZdr6T1V5fauLpwYaIYFL+UkYtxNq8q8GDF 1HsQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=zLBOryh1; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r17si433857pgo.125.2019.08.22.15.11.42; Thu, 22 Aug 2019 15:11:57 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=zLBOryh1; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390621AbfHVRJB (ORCPT + 99 others); Thu, 22 Aug 2019 13:09:01 -0400 Received: from mail.kernel.org ([198.145.29.99]:59014 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390506AbfHVRI5 (ORCPT ); Thu, 22 Aug 2019 13:08:57 -0400 Received: from sasha-vm.mshome.net (wsip-184-188-36-2.sd.sd.cox.net [184.188.36.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E58F8233FE; Thu, 22 Aug 2019 17:08:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1566493736; bh=sRXrwARtkwNs+gUqC/kzGbrhnVeKcYJ+cMWizTaGyi8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=zLBOryh1tOWWYPulCQF15qoQUp7XSp81Ya4oVmqyTS9p+CTkFGRBcBV5S9a9KlkPH kFG1KgdeA5NLoOEvShcxBzG3EZH5UOJCl6pJ+TdDgTb+oiCGmTtuYdIzLvG8rX12WA Q39ihRPoS8IL59utX1MN6yloXKp6qXrCB38c/3h4= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Guy Levi , Moni Shoua , Leon Romanovsky , Doug Ledford , Sasha Levin Subject: [PATCH 5.2 077/135] IB/mlx5: Fix MR registration flow to use UMR properly Date: Thu, 22 Aug 2019 13:07:13 -0400 Message-Id: <20190822170811.13303-78-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190822170811.13303-1-sashal@kernel.org> References: <20190822170811.13303-1-sashal@kernel.org> MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.2.10-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.2.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.2.10-rc1 X-KernelTest-Deadline: 2019-08-24T17:07+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Guy Levi [ 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 Reviewed-by: Moni Shoua Signed-off-by: Leon Romanovsky Link: https://lore.kernel.org/r/20190731081929.32559-1-leon@kernel.org Signed-off-by: Doug Ledford Signed-off-by: Sasha Levin --- 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 e54bec2c29654..d239fc58c0020 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); @@ -1271,7 +1261,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; @@ -1303,29 +1293,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); } @@ -1341,7 +1332,7 @@ struct ib_mr *mlx5_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, update_odp_mr(mr); - 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