mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 03:11:11 -04:00
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: Jacob Moroni <jmoroni@google.com> Link: https://patch.msgid.link/20260305170826.3803155-3-jmoroni@google.com Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
committed by
Leon Romanovsky
parent
553dfa8cbd
commit
797291a66c
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user