From nobody Sun Apr 5 16:31:15 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 408F13382F9; Mon, 23 Mar 2026 20:10:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296629; cv=none; b=swGoDFs53qmPaUwDTt/OurwUOyPmtQMZY+BwWsiE25MynTiCJNuyJ+SCL7SKWdXalC/fZJhOnfHgoYvt26Fc0y6ThQDzUa8dN5UT+OobSau4dltKhanrUqQuMTiII+KwkaYy82y4mDkgjpJJ0WHxS5f2GQIuUqC9gcov6Vp5u1Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296629; c=relaxed/simple; bh=9EUqw43IRwPSs7AIcAVQ7yfdM9pOZ5dryGY58RHj5z4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=RkJXMKf4Q26ucaqC+IzhDFJ30DiD33Ol/r8k8Rg0bTR2+4xlknLhaaVhLICwmR0gbFMYDf+tty4N63eMW0iQfoY6hEgEjlir01IsRGaw5aPT4plUgxGGsqzVAozLj7yVhOJYbXoDXPZcfTZEd5c/insShz+N+Uh6C9RNfsPTr9M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KASqr5Am; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KASqr5Am" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F396CC4CEF7; Mon, 23 Mar 2026 20:10:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774296629; bh=9EUqw43IRwPSs7AIcAVQ7yfdM9pOZ5dryGY58RHj5z4=; h=From:To:Cc:Subject:Date:From; b=KASqr5AmhkM3gcEi1v6BDOlCnS/6pUAWljiTOBEs+DyysTe+TumqZke4+oItRAeqX vdUxyKau2goR6wYYvCF80xO4HN2JmRIwG2WGN4OpDBXrwfkkCzuGpHyEqrsQB/P3iI DQGv4J1SUsraHwQK8AFLRgFjFPdhGLjrfkLEo9bB8zxdGudQqXTCApk2yU5QAuQ1DW wEdZ99HVXimy7d/MA0A4WeNlC4Q2F8Ul6JZg6d1AsfXcgKPaWHNNYKX5j/jbsWXudZ l7DUp3S9fc6gg0hlVbni6Y4XW2eraN/qiq09fH/Oal9ISIjcA6zGMWjDFFLtv6bGUe jxaARiCCDeUGA== From: Leon Romanovsky To: Jason Gunthorpe , Leon Romanovsky , Michael Guralnik Cc: linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH rdma-next] RDMA/umem: Use consistent DMA attributes when unmapping entries Date: Mon, 23 Mar 2026 22:10:18 +0200 Message-ID: <20260323-umem-dma-attrs-v1-1-d6890f2e6a1e@nvidia.com> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Change-ID: 20260323-umem-dma-attrs-8e2b80e09c4c X-Mailer: b4 0.15-dev-18f8f Content-Transfer-Encoding: quoted-printable From: Leon Romanovsky The DMA API expects that mapping and unmapping use the same DMA attributes. The RDMA umem code did not meet this requirement, so fix the mismatch. Fixes: f03d9fadfe13 ("RDMA/core: Add weak ordering dma attr to dma mapping") Signed-off-by: Leon Romanovsky --- drivers/infiniband/core/umem.c | 11 +++++------ include/rdma/ib_umem.h | 1 + 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c index 4eef7b76fe465..f5f187593ef17 100644 --- a/drivers/infiniband/core/umem.c +++ b/drivers/infiniband/core/umem.c @@ -55,7 +55,7 @@ static void __ib_umem_release(struct ib_device *dev, stru= ct ib_umem *umem, int d =20 if (dirty) ib_dma_unmap_sgtable_attrs(dev, &umem->sgt_append.sgt, - DMA_BIDIRECTIONAL, 0); + DMA_BIDIRECTIONAL, umem->dma_attrs); =20 for_each_sgtable_sg(&umem->sgt_append.sgt, sg, i) { unpin_user_page_range_dirty_lock(sg_page(sg), @@ -169,7 +169,6 @@ struct ib_umem *ib_umem_get(struct ib_device *device, u= nsigned long addr, unsigned long lock_limit; unsigned long new_pinned; unsigned long cur_base; - unsigned long dma_attr =3D 0; struct mm_struct *mm; unsigned long npages; int pinned, ret; @@ -202,6 +201,9 @@ struct ib_umem *ib_umem_get(struct ib_device *device, u= nsigned long addr, umem->iova =3D addr; umem->writable =3D ib_access_writable(access); umem->owning_mm =3D mm =3D current->mm; + if (access & IB_ACCESS_RELAXED_ORDERING) + umem->dma_attrs |=3D DMA_ATTR_WEAK_ORDERING; + mmgrab(mm); =20 page_list =3D (struct page **) __get_free_page(GFP_KERNEL); @@ -254,11 +256,8 @@ struct ib_umem *ib_umem_get(struct ib_device *device, = unsigned long addr, } } =20 - if (access & IB_ACCESS_RELAXED_ORDERING) - dma_attr |=3D DMA_ATTR_WEAK_ORDERING; - ret =3D ib_dma_map_sgtable_attrs(device, &umem->sgt_append.sgt, - DMA_BIDIRECTIONAL, dma_attr); + DMA_BIDIRECTIONAL, umem->dma_attrs); if (ret) goto umem_release; goto out; diff --git a/include/rdma/ib_umem.h b/include/rdma/ib_umem.h index 38414281a686b..2ad52cc1d52bd 100644 --- a/include/rdma/ib_umem.h +++ b/include/rdma/ib_umem.h @@ -18,6 +18,7 @@ struct ib_umem { u64 iova; size_t length; unsigned long address; + unsigned long dma_attrs; u32 writable : 1; u32 is_odp : 1; u32 is_dmabuf : 1; --- base-commit: 1c3eaf5186228f0b20ccb776e86233f069475380 change-id: 20260323-umem-dma-attrs-8e2b80e09c4c Best regards, -- =20 Leon Romanovsky