• Alexey Kardashevskiy's avatar
    KVM: PPC: Release all hardware TCE tables attached to a group · a67614cc
    Alexey Kardashevskiy authored
    The SPAPR TCE KVM device references all hardware IOMMU tables assigned to
    some IOMMU group to ensure that in-kernel KVM acceleration of H_PUT_TCE
    can work. The tables are references when an IOMMU group gets registered
    with the VFIO KVM device by the KVM_DEV_VFIO_GROUP_ADD ioctl;
    KVM_DEV_VFIO_GROUP_DEL calls into the dereferencing code
    in kvm_spapr_tce_release_iommu_group() which walks through the list of
    LIOBNs, finds a matching IOMMU table and calls kref_put() when found.
    
    However that code stops after the very first successful derefencing
    leaving other tables referenced till the SPAPR TCE KVM device is destroyed
    which normally happens on guest reboot or termination so if we do hotplug
    and unplug in a loop, we are leaking IOMMU tables here.
    
    This removes a premature return to let kvm_spapr_tce_release_iommu_group()
    find and dereference all attached tables.
    
    Fixes: 121f80ba ("KVM: PPC: VFIO: Add in-kernel acceleration for VFIO")
    Signed-off-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
    Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
    a67614cc
book3s_64_vio.c 17.1 KB