• Kevin Tian's avatar
    vfio: Add helpers for unifying vfio_device life cycle · cb9ff3f3
    Kevin Tian authored
    The idea is to let vfio core manage the vfio_device life cycle instead
    of duplicating the logic cross drivers. This is also a preparatory
    step for adding struct device into vfio_device.
    
    New pair of helpers together with a kref in vfio_device:
    
     - vfio_alloc_device()
     - vfio_put_device()
    
    Drivers can register @init/@release callbacks to manage any private
    state wrapping the vfio_device.
    
    However vfio-ccw doesn't fit this model due to a life cycle mess
    that its private structure mixes both parent and mdev info hence must
    be allocated/freed outside of the life cycle of vfio device.
    
    Per prior discussions this won't be fixed in short term by IBM folks.
    
    Instead of waiting for those modifications introduce another helper
    vfio_init_device() so ccw can call it to initialize a pre-allocated
    vfio_device.
    
    Further implication of the ccw trick is that vfio_device cannot be
    freed uniformly in vfio core. Instead, require *EVERY* driver to
    implement @release and free vfio_device inside. Then ccw can choose
    to delay the free at its own discretion.
    
    Another trick down the road is that kvzalloc() is used to accommodate
    the need of gvt which uses vzalloc() while all others use kzalloc().
    So drivers should call a helper vfio_free_device() to free the
    vfio_device instead of assuming that kfree() or vfree() is appliable.
    
    Later once the ccw mess is fixed we can remove those tricks and
    fully handle structure alloc/free in vfio core.
    
    Existing vfio_{un}init_group_dev() will be deprecated after all
    existing usages are converted to the new model.
    Suggested-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    Co-developed-by: default avatarYi Liu <yi.l.liu@intel.com>
    Signed-off-by: default avatarYi Liu <yi.l.liu@intel.com>
    Signed-off-by: default avatarKevin Tian <kevin.tian@intel.com>
    Reviewed-by: default avatarTony Krowiak <akrowiak@linux.ibm.com>
    Reviewed-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    Reviewed-by: default avatarEric Auger <eric.auger@redhat.com>
    Link: https://lore.kernel.org/r/20220921104401.38898-2-kevin.tian@intel.comSigned-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    cb9ff3f3
vfio_main.c 61.9 KB