|
@@ -1200,8 +1200,11 @@ static long vhost_scsi_ioctl(struct file *f, unsigned int ioctl,
|
|
|
struct vhost_scsi_target backend;
|
|
|
void __user *argp = (void __user *)arg;
|
|
|
u64 __user *featurep = argp;
|
|
|
+ u32 __user *eventsp = argp;
|
|
|
+ u32 events_missed;
|
|
|
u64 features;
|
|
|
int r, abi_version = VHOST_SCSI_ABI_VERSION;
|
|
|
+ struct vhost_virtqueue *vq = &vs->vqs[VHOST_SCSI_VQ_EVT];
|
|
|
|
|
|
switch (ioctl) {
|
|
|
case VHOST_SCSI_SET_ENDPOINT:
|
|
@@ -1222,6 +1225,20 @@ static long vhost_scsi_ioctl(struct file *f, unsigned int ioctl,
|
|
|
if (copy_to_user(argp, &abi_version, sizeof abi_version))
|
|
|
return -EFAULT;
|
|
|
return 0;
|
|
|
+ case VHOST_SCSI_SET_EVENTS_MISSED:
|
|
|
+ if (get_user(events_missed, eventsp))
|
|
|
+ return -EFAULT;
|
|
|
+ mutex_lock(&vq->mutex);
|
|
|
+ vs->vs_events_missed = events_missed;
|
|
|
+ mutex_unlock(&vq->mutex);
|
|
|
+ return 0;
|
|
|
+ case VHOST_SCSI_GET_EVENTS_MISSED:
|
|
|
+ mutex_lock(&vq->mutex);
|
|
|
+ events_missed = vs->vs_events_missed;
|
|
|
+ mutex_unlock(&vq->mutex);
|
|
|
+ if (put_user(events_missed, eventsp))
|
|
|
+ return -EFAULT;
|
|
|
+ return 0;
|
|
|
case VHOST_GET_FEATURES:
|
|
|
features = VHOST_SCSI_FEATURES;
|
|
|
if (copy_to_user(featurep, &features, sizeof features))
|