iopt_release_pages() calls dma_buf_unpin() after releasing the DMA-buf
reservation lock. The unpin interface requires the reservation to be
held while it invokes the exporter callback.

Move the unpin into the reservation critical section used to release
the PAL physical list.

Signed-off-by: Karl Mehltretter <[email protected]>
---
 drivers/iommu/iommufd/pages.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/iommu/iommufd/pages.c b/drivers/iommu/iommufd/pages.c
index 59ee68a1a..85004a936 100644
--- a/drivers/iommu/iommufd/pages.c
+++ b/drivers/iommu/iommufd/pages.c
@@ -1678,9 +1678,8 @@ void iopt_release_pages(struct kref *kref)
                                               pages->dmabuf.exp_phys);
                        pages->dmabuf.exp_phys = NULL;
                }
-               dma_resv_unlock(dmabuf->resv);
-
                dma_buf_unpin(pages->dmabuf.attach);
+               dma_resv_unlock(dmabuf->resv);
 
                dma_buf_detach(dmabuf, pages->dmabuf.attach);
                dma_buf_put(dmabuf);
-- 
2.39.5 (Apple Git-154)

Reply via email to