On 3/17/21 7:17 PM, Halil Pasic wrote:
On Wed, 10 Mar 2021 10:05:59 -0500
Tony Krowiak <[email protected]> wrote:

-               ret = vfio_ap_mdev_reset_queues(mdev);
+               matrix_mdev = mdev_get_drvdata(mdev);
Is it guaranteed that matrix_mdev can't be NULL here? If yes, please
remind me of the mechanism that ensures this.

+
+               /*
+                * If the KVM pointer is in the process of being set, wait until
+                * the process has completed.
+                */
+               wait_event_cmd(matrix_mdev->wait_for_kvm,
+                              matrix_mdev->kvm_busy == false,
+                              mutex_unlock(&matrix_dev->lock),
+                              mutex_lock(&matrix_dev->lock));
+
+               if (matrix_mdev->kvm)
+                       ret = vfio_ap_mdev_reset_queues(mdev);
+               else
+                       ret = -ENODEV;
Didn't we agree to make the call to vfio_ap_mdev_reset_queues()
unconditional again (for reference please take look at
Message-ID: <[email protected]>)?

How about this:

static ssize_t vfio_ap_mdev_ioctl(struct mdev_device *mdev,
                    unsigned int cmd, unsigned long arg)
{
    int ret = 0;
    struct ap_matrix_mdev *matrix_mdev;

    ...
    case VFIO_DEVICE_RESET:
        matrix_mdev = mdev_get_drvdata(mdev);
        WARN(!matrix_mdev, "Driver data missing from mdev!!");

        if (matrix_mdev) {
            /*
             * If the KVM pointer is in the process of being set, wait until
             * the process has completed.
             */
            wait_event_cmd(matrix_mdev->wait_for_kvm,
                       matrix_mdev->kvm_busy == false,
mutex_unlock(&matrix_dev->lock),
mutex_lock(&matrix_dev->lock));

            ret = vfio_ap_mdev_reset_queues(mdev);
        }
        break;
    ...

    return ret;
}


Regards,
Halil

Reply via email to