vhost: avoid backend flush on vring ops
vring changes already do a flush internally where appropriate, so we do not need a second flush. It's currently not very expensive but a follow-up patch makes flush more heavy-weight, so remove the extra flush here to avoid regressing performance if call or kick fds are changed on data path. Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
4a7d6455b0
commit
935cdee7ee
@ -942,8 +942,11 @@ static long vhost_net_ioctl(struct file *f, unsigned int ioctl,
|
|||||||
return vhost_net_reset_owner(n);
|
return vhost_net_reset_owner(n);
|
||||||
default:
|
default:
|
||||||
mutex_lock(&n->dev.mutex);
|
mutex_lock(&n->dev.mutex);
|
||||||
r = vhost_dev_ioctl(&n->dev, ioctl, arg);
|
r = vhost_dev_ioctl(&n->dev, ioctl, argp);
|
||||||
vhost_net_flush(n);
|
if (r == -ENOIOCTLCMD)
|
||||||
|
r = vhost_vring_ioctl(&n->dev, ioctl, argp);
|
||||||
|
else
|
||||||
|
vhost_net_flush(n);
|
||||||
mutex_unlock(&n->dev.mutex);
|
mutex_unlock(&n->dev.mutex);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -970,7 +970,10 @@ static long vhost_scsi_ioctl(struct file *f, unsigned int ioctl,
|
|||||||
return vhost_scsi_set_features(vs, features);
|
return vhost_scsi_set_features(vs, features);
|
||||||
default:
|
default:
|
||||||
mutex_lock(&vs->dev.mutex);
|
mutex_lock(&vs->dev.mutex);
|
||||||
r = vhost_dev_ioctl(&vs->dev, ioctl, arg);
|
r = vhost_dev_ioctl(&vs->dev, ioctl, argp);
|
||||||
|
/* TODO: flush backend after dev ioctl. */
|
||||||
|
if (r == -ENOIOCTLCMD)
|
||||||
|
r = vhost_vring_ioctl(&vs->dev, ioctl, argp);
|
||||||
mutex_unlock(&vs->dev.mutex);
|
mutex_unlock(&vs->dev.mutex);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -607,7 +607,7 @@ static long vhost_set_memory(struct vhost_dev *d, struct vhost_memory __user *m)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long vhost_set_vring(struct vhost_dev *d, int ioctl, void __user *argp)
|
long vhost_vring_ioctl(struct vhost_dev *d, int ioctl, void __user *argp)
|
||||||
{
|
{
|
||||||
struct file *eventfp, *filep = NULL;
|
struct file *eventfp, *filep = NULL;
|
||||||
bool pollstart = false, pollstop = false;
|
bool pollstart = false, pollstop = false;
|
||||||
@ -802,9 +802,8 @@ static long vhost_set_vring(struct vhost_dev *d, int ioctl, void __user *argp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Caller must have device mutex */
|
/* Caller must have device mutex */
|
||||||
long vhost_dev_ioctl(struct vhost_dev *d, unsigned int ioctl, unsigned long arg)
|
long vhost_dev_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *argp)
|
||||||
{
|
{
|
||||||
void __user *argp = (void __user *)arg;
|
|
||||||
struct file *eventfp, *filep = NULL;
|
struct file *eventfp, *filep = NULL;
|
||||||
struct eventfd_ctx *ctx = NULL;
|
struct eventfd_ctx *ctx = NULL;
|
||||||
u64 p;
|
u64 p;
|
||||||
@ -875,7 +874,7 @@ long vhost_dev_ioctl(struct vhost_dev *d, unsigned int ioctl, unsigned long arg)
|
|||||||
fput(filep);
|
fput(filep);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
r = vhost_set_vring(d, ioctl, argp);
|
r = -ENOIOCTLCMD;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
done:
|
done:
|
||||||
|
@ -164,7 +164,8 @@ long vhost_dev_check_owner(struct vhost_dev *);
|
|||||||
long vhost_dev_reset_owner(struct vhost_dev *);
|
long vhost_dev_reset_owner(struct vhost_dev *);
|
||||||
void vhost_dev_cleanup(struct vhost_dev *, bool locked);
|
void vhost_dev_cleanup(struct vhost_dev *, bool locked);
|
||||||
void vhost_dev_stop(struct vhost_dev *);
|
void vhost_dev_stop(struct vhost_dev *);
|
||||||
long vhost_dev_ioctl(struct vhost_dev *, unsigned int ioctl, unsigned long arg);
|
long vhost_dev_ioctl(struct vhost_dev *, unsigned int ioctl, void __user *argp);
|
||||||
|
long vhost_vring_ioctl(struct vhost_dev *d, int ioctl, void __user *argp);
|
||||||
int vhost_vq_access_ok(struct vhost_virtqueue *vq);
|
int vhost_vq_access_ok(struct vhost_virtqueue *vq);
|
||||||
int vhost_log_access_ok(struct vhost_dev *);
|
int vhost_log_access_ok(struct vhost_dev *);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user