summaryrefslogtreecommitdiffstats
path: root/drivers/vhost/net.c
diff options
context:
space:
mode:
authorMichael S. Tsirkin <mst@redhat.com>2014-06-05 08:20:23 -0400
committerMichael S. Tsirkin <mst@redhat.com>2014-06-09 09:21:06 -0400
commitea16c51433510f7f758382dec5b933fc0797f244 (patch)
tree51f7ff47424fef4d9a8750f92723782e2d17e63a /drivers/vhost/net.c
parent98f9ca0a3faa99b7388578d55eccecf272be4038 (diff)
vhost: move acked_features to VQs
Refactor code to make sure features are only accessed under VQ mutex. This makes everything simpler, no need for RCU here anymore. Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'drivers/vhost/net.c')
-rw-r--r--drivers/vhost/net.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index e489161d0feb..2bc8f298a4e7 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -585,9 +585,9 @@ static void handle_rx(struct vhost_net *net)
585 vhost_hlen = nvq->vhost_hlen; 585 vhost_hlen = nvq->vhost_hlen;
586 sock_hlen = nvq->sock_hlen; 586 sock_hlen = nvq->sock_hlen;
587 587
588 vq_log = unlikely(vhost_has_feature(&net->dev, VHOST_F_LOG_ALL)) ? 588 vq_log = unlikely(vhost_has_feature(vq, VHOST_F_LOG_ALL)) ?
589 vq->log : NULL; 589 vq->log : NULL;
590 mergeable = vhost_has_feature(&net->dev, VIRTIO_NET_F_MRG_RXBUF); 590 mergeable = vhost_has_feature(vq, VIRTIO_NET_F_MRG_RXBUF);
591 591
592 while ((sock_len = peek_head_len(sock->sk))) { 592 while ((sock_len = peek_head_len(sock->sk))) {
593 sock_len += sock_hlen; 593 sock_len += sock_hlen;
@@ -1051,15 +1051,13 @@ static int vhost_net_set_features(struct vhost_net *n, u64 features)
1051 mutex_unlock(&n->dev.mutex); 1051 mutex_unlock(&n->dev.mutex);
1052 return -EFAULT; 1052 return -EFAULT;
1053 } 1053 }
1054 n->dev.acked_features = features;
1055 smp_wmb();
1056 for (i = 0; i < VHOST_NET_VQ_MAX; ++i) { 1054 for (i = 0; i < VHOST_NET_VQ_MAX; ++i) {
1057 mutex_lock(&n->vqs[i].vq.mutex); 1055 mutex_lock(&n->vqs[i].vq.mutex);
1056 n->vqs[i].vq.acked_features = features;
1058 n->vqs[i].vhost_hlen = vhost_hlen; 1057 n->vqs[i].vhost_hlen = vhost_hlen;
1059 n->vqs[i].sock_hlen = sock_hlen; 1058 n->vqs[i].sock_hlen = sock_hlen;
1060 mutex_unlock(&n->vqs[i].vq.mutex); 1059 mutex_unlock(&n->vqs[i].vq.mutex);
1061 } 1060 }
1062 vhost_net_flush(n);
1063 mutex_unlock(&n->dev.mutex); 1061 mutex_unlock(&n->dev.mutex);
1064 return 0; 1062 return 0;
1065} 1063}