]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/umem: Move umem dmabuf revoke logic into helper function
authorJacob Moroni <jmoroni@google.com>
Thu, 5 Mar 2026 17:08:23 +0000 (17:08 +0000)
committerLeon Romanovsky <leon@kernel.org>
Sun, 8 Mar 2026 12:37:38 +0000 (08:37 -0400)
This same logic will eventually be reused from within the
invalidate_mappings callback which already has the dma_resv_lock
held, so break it out into a separate function so it can be reused.

Signed-off-by: Jacob Moroni <jmoroni@google.com>
Link: https://patch.msgid.link/20260305170826.3803155-3-jmoroni@google.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/core/umem_dmabuf.c

index 0c0098285c38be5f4fd036e3a89f87f411c9a014..9cf9cfc930063256a17cf473f263b57755075c1a 100644 (file)
@@ -195,6 +195,22 @@ static struct dma_buf_attach_ops ib_umem_dmabuf_attach_pinned_ops = {
        .move_notify = ib_umem_dmabuf_unsupported_move_notify,
 };
 
+static void ib_umem_dmabuf_revoke_locked(struct dma_buf_attachment *attach)
+{
+       struct ib_umem_dmabuf *umem_dmabuf = attach->importer_priv;
+
+       dma_resv_assert_held(attach->dmabuf->resv);
+
+       if (umem_dmabuf->revoked)
+               return;
+       ib_umem_dmabuf_unmap_pages(umem_dmabuf);
+       if (umem_dmabuf->pinned) {
+               dma_buf_unpin(umem_dmabuf->attach);
+               umem_dmabuf->pinned = 0;
+       }
+       umem_dmabuf->revoked = 1;
+}
+
 static struct ib_umem_dmabuf *
 ib_umem_dmabuf_get_pinned_and_lock(struct ib_device *device,
                                   struct device *dma_device,
@@ -262,15 +278,7 @@ void ib_umem_dmabuf_revoke(struct ib_umem_dmabuf *umem_dmabuf)
        struct dma_buf *dmabuf = umem_dmabuf->attach->dmabuf;
 
        dma_resv_lock(dmabuf->resv, NULL);
-       if (umem_dmabuf->revoked)
-               goto end;
-       ib_umem_dmabuf_unmap_pages(umem_dmabuf);
-       if (umem_dmabuf->pinned) {
-               dma_buf_unpin(umem_dmabuf->attach);
-               umem_dmabuf->pinned = 0;
-       }
-       umem_dmabuf->revoked = 1;
-end:
+       ib_umem_dmabuf_revoke_locked(umem_dmabuf->attach);
        dma_resv_unlock(dmabuf->resv);
 }
 EXPORT_SYMBOL(ib_umem_dmabuf_revoke);