On Tue, Nov 18, 2025 at 11:56:14PM +0000, Tian, Kevin wrote:
- down_write(&vdev->memory_lock);
- list_for_each_entry_safe(priv, tmp, &vdev->dmabufs, dmabufs_elm)
{
if (!get_file_active(&priv->dmabuf->file))continue;dma_resv_lock(priv->dmabuf->resv, NULL);list_del_init(&priv->dmabufs_elm);priv->vdev = NULL;priv->revoked = true;dma_buf_move_notify(priv->dmabuf);dma_resv_unlock(priv->dmabuf->resv);vfio_device_put_registration(&vdev->vdev);fput(priv->dmabuf->file);dma_buf_put(priv->dmabuf), consistent with other places.
Someone else said this, I don't agree, the above got the get via
get_file_active() instead of a dma_buf version..
So we should pair with get_file_active() vs fput().
Christian rejected the idea of adding a dmabuf wrapper for get_file_active(), oh well.
Okay then vfio_pci_dma_buf_move() should be changed. It uses get_file_active() to pair dma_buf_put().
Makes sense, Leon can you fix it?
Thanks, Jason
On Wed, Nov 19, 2025 at 03:41:20PM -0400, Jason Gunthorpe wrote:
On Tue, Nov 18, 2025 at 11:56:14PM +0000, Tian, Kevin wrote:
- down_write(&vdev->memory_lock);
- list_for_each_entry_safe(priv, tmp, &vdev->dmabufs, dmabufs_elm)
{
if (!get_file_active(&priv->dmabuf->file))continue;dma_resv_lock(priv->dmabuf->resv, NULL);list_del_init(&priv->dmabufs_elm);priv->vdev = NULL;priv->revoked = true;dma_buf_move_notify(priv->dmabuf);dma_resv_unlock(priv->dmabuf->resv);vfio_device_put_registration(&vdev->vdev);fput(priv->dmabuf->file);dma_buf_put(priv->dmabuf), consistent with other places.
Someone else said this, I don't agree, the above got the get via
get_file_active() instead of a dma_buf version..
So we should pair with get_file_active() vs fput().
Christian rejected the idea of adding a dmabuf wrapper for get_file_active(), oh well.
Okay then vfio_pci_dma_buf_move() should be changed. It uses get_file_active() to pair dma_buf_put().
Makes sense, Leon can you fix it?
Sure,
diff --git a/drivers/vfio/pci/vfio_pci_dmabuf.c b/drivers/vfio/pci/vfio_pci_dmabuf.c index e7511cad8e06..c67c1ca7e4bf 100644 --- a/drivers/vfio/pci/vfio_pci_dmabuf.c +++ b/drivers/vfio/pci/vfio_pci_dmabuf.c @@ -300,7 +300,7 @@ void vfio_pci_dma_buf_move(struct vfio_pci_core_device *vdev, bool revoked) dma_buf_move_notify(priv->dmabuf); dma_resv_unlock(priv->dmabuf->resv); } - dma_buf_put(priv->dmabuf); + fput(priv->dmabuf->file); } }
Thanks, Jason
linaro-mm-sig@lists.linaro.org