• Jason Gunthorpe's avatar
    vfio: Provide better generic support for open/release vfio_device_ops · 2fd585f4
    Jason Gunthorpe authored
    Currently the driver ops have an open/release pair that is called once
    each time a device FD is opened or closed. Add an additional set of
    open/close_device() ops which are called when the device FD is opened for
    the first time and closed for the last time.
    
    An analysis shows that all of the drivers require this semantic. Some are
    open coding it as part of their reflck implementation, and some are just
    buggy and miss it completely.
    
    To retain the current semantics PCI and FSL depend on, introduce the idea
    of a "device set" which is a grouping of vfio_device's that share the same
    lock around opening.
    
    The device set is established by providing a 'set_id' pointer. All
    vfio_device's that provide the same pointer will be joined to the same
    singleton memory and lock across the whole set. This effectively replaces
    the oddly named reflck.
    
    After conversion the set_id will be sourced from:
     - A struct device from a fsl_mc_device (fsl)
     - A struct pci_slot (pci)
     - A struct pci_bus (pci)
     - The struct vfio_device (everything)
    
    The design ensures that the above pointers are live as long as the
    vfio_device is registered, so they form reliable unique keys to group
    vfio_devices into sets.
    
    This implementation uses xarray instead of searching through the driver
    core structures, which simplifies the somewhat tricky locking in this
    area.
    
    Following patches convert all the drivers.
    Signed-off-by: default avatarYishai Hadas <yishaih@nvidia.com>
    Reviewed-by: default avatarCornelia Huck <cohuck@redhat.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    Link: https://lore.kernel.org/r/4-v4-9ea22c5e6afb+1adf-vfio_reflck_jgg@nvidia.comSigned-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    2fd585f4
vfio_mdev.c 4.27 KB