> From: Alex Williamson <[email protected]>
> Sent: Friday, April 17, 2026 6:44 AM
> 
> On Wed, 15 Apr 2026 11:14:22 -0700
> Matt Evans <[email protected]> wrote:
> 
> > A DMABUF exports access to BAR resources which need to be requested
> > before the DMABUF is handed out.  Usually the resources are requested
> > when setting up the barmap when the VFIO device fd is mmap()ed, but
> > there's no guarantee that's done before a DMABUF is created.
> >
> > Set up the barmap (and so request resources) in the DMABUF-creation
> > path.
> >
> > Fixes: 5d74781ebc86c ("vfio/pci: Add dma-buf export support for MMIO
> regions")
> > Signed-off-by: Matt Evans <[email protected]>
> > ---
> >  drivers/vfio/pci/vfio_pci_dmabuf.c | 9 +++++++++
> >  1 file changed, 9 insertions(+)
> >
> > diff --git a/drivers/vfio/pci/vfio_pci_dmabuf.c
> b/drivers/vfio/pci/vfio_pci_dmabuf.c
> > index 4ccaf3531e02..fefe7cf4256b 100644
> > --- a/drivers/vfio/pci/vfio_pci_dmabuf.c
> > +++ b/drivers/vfio/pci/vfio_pci_dmabuf.c
> > @@ -272,6 +272,15 @@ int vfio_pci_core_feature_dma_buf(struct
> vfio_pci_core_device *vdev, u32 flags,
> >             goto err_free_priv;
> >     }
> >
> > +   /*
> > +    * See comment in vfio_pci_core_mmap(); ensure PCI regions
> > +    * were requested before returning DMABUFs that reference
> > +    * them.  Barmap setup does this:
> > +    */
> > +   ret = vfio_pci_core_setup_barmap(vdev, get_dma_buf.region_index);
> > +   if (ret)
> > +           goto err_free_phys;
> > +
> >     priv->vdev = vdev;
> >     priv->nr_ranges = get_dma_buf.nr_ranges;
> >     priv->size = length;
> 
> Wouldn't this get a lot easier if we just setup all the barmaps in
> vfio_pci_core_enable(), conditional on pci_resource_len() just like we
> use to filter in REGION_INFO?
> 
> I don't recall if there's some reason we've avoid this so far, maybe
> others can shout it out if they do.

I don't remember too. probably just because it's not a wide requirement
then was made in this on-demand approach...

> 
> We already tear them all down in vfio_pci_core_disable().  It would be
> a small patch to add that, which we would mark as Fixes:, then a small
> follow-up on top of that that removes any then redundant or unnecessary
> callers (all of them).  Thoughts?  Thanks,
> 

Agree. then the next patch fixing the racing conditions is also not required.

Reply via email to