• Tony Krowiak's avatar
    s390/vfio-ap: prepare for dynamic update of guest's APCB on queue probe/remove · 2c1ee898
    Tony Krowiak authored
    The callback functions for probing and removing a queue device must take
    and release the locks required to perform a dynamic update of a guest's
    APCB in the proper order.
    
    The proper order for taking the locks is:
    
            matrix_dev->guests_lock => kvm->lock => matrix_dev->mdevs_lock
    
    The proper order for releasing the locks is:
    
            matrix_dev->mdevs_lock => kvm->lock => matrix_dev->guests_lock
    
    A new helper function is introduced to be used by the probe callback to
    acquire the required locks. Since the probe callback only has
    access to a queue device when it is called, the helper function will find
    the ap_matrix_mdev object to which the queue device's APQN is assigned and
    return it so the KVM guest to which the mdev is attached can be dynamically
    updated.
    
    Note that in order to find the ap_matrix_mdev (matrix_mdev) object, it is
    necessary to search the matrix_dev->mdev_list. This presents a
    locking order dilemma because the matrix_dev->mdevs_lock can't be taken to
    protect against changes to the list while searching for the matrix_mdev to
    which a queue device's APQN is assigned. This is due to the fact that the
    proper locking order requires that the matrix_dev->mdevs_lock be taken
    after both the matrix_mdev->kvm->lock and the matrix_dev->mdevs_lock.
    Consequently, the matrix_dev->guests_lock will be used to protect against
    removal of a matrix_mdev object from the list while a queue device is
    being probed. This necessitates changes to the mdev probe/remove
    callback functions to take the matrix_dev->guests_lock prior to removing
    a matrix_mdev object from the list.
    
    A new macro is also introduced to acquire the locks required to dynamically
    update the guest's APCB in the proper order when a queue device is
    removed.
    Signed-off-by: default avatarTony Krowiak <akrowiak@linux.ibm.com>
    Reviewed-by: default avatarJason J. Herne <jjherne@linux.ibm.com>
    Signed-off-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
    2c1ee898
vfio_ap_ops.c 50 KB