diff options
Diffstat (limited to 'drivers/vhost/test.c')
| -rw-r--r-- | drivers/vhost/test.c | 19 | 
1 files changed, 8 insertions, 11 deletions
diff --git a/drivers/vhost/test.c b/drivers/vhost/test.c index 339eae85859..d9c501eaa6c 100644 --- a/drivers/vhost/test.c +++ b/drivers/vhost/test.c @@ -53,7 +53,7 @@ static void handle_vq(struct vhost_test *n)  	vhost_disable_notify(&n->dev, vq);  	for (;;) { -		head = vhost_get_vq_desc(&n->dev, vq, vq->iov, +		head = vhost_get_vq_desc(vq, vq->iov,  					 ARRAY_SIZE(vq->iov),  					 &out, &in,  					 NULL, NULL); @@ -104,7 +104,6 @@ static int vhost_test_open(struct inode *inode, struct file *f)  	struct vhost_test *n = kmalloc(sizeof *n, GFP_KERNEL);  	struct vhost_dev *dev;  	struct vhost_virtqueue **vqs; -	int r;  	if (!n)  		return -ENOMEM; @@ -117,12 +116,7 @@ static int vhost_test_open(struct inode *inode, struct file *f)  	dev = &n->dev;  	vqs[VHOST_TEST_VQ] = &n->vqs[VHOST_TEST_VQ];  	n->vqs[VHOST_TEST_VQ].handle_kick = handle_vq_kick; -	r = vhost_dev_init(dev, vqs, VHOST_TEST_VQ_MAX); -	if (r < 0) { -		kfree(vqs); -		kfree(n); -		return r; -	} +	vhost_dev_init(dev, vqs, VHOST_TEST_VQ_MAX);  	f->private_data = n; @@ -247,15 +241,18 @@ done:  static int vhost_test_set_features(struct vhost_test *n, u64 features)  { +	struct vhost_virtqueue *vq; +  	mutex_lock(&n->dev.mutex);  	if ((features & (1 << VHOST_F_LOG_ALL)) &&  	    !vhost_log_access_ok(&n->dev)) {  		mutex_unlock(&n->dev.mutex);  		return -EFAULT;  	} -	n->dev.acked_features = features; -	smp_wmb(); -	vhost_test_flush(n); +	vq = &n->vqs[VHOST_TEST_VQ]; +	mutex_lock(&vq->mutex); +	vq->acked_features = features; +	mutex_unlock(&vq->mutex);  	mutex_unlock(&n->dev.mutex);  	return 0;  }  | 
