Commit 797291a6 authored by Jacob Moroni's avatar Jacob Moroni Committed by Leon Romanovsky
Browse files

RDMA/umem: Move umem dmabuf revoke logic into helper function



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: default avatarJacob Moroni <jmoroni@google.com>
Link: https://patch.msgid.link/20260305170826.3803155-3-jmoroni@google.com


Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
parent 553dfa8c
Loading
Loading
Loading
Loading
+17 −9
Original line number Diff line number Diff line
@@ -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);