]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/vhost/net.c
Merge git://git.infradead.org/users/dwmw2/mtd-2.6.38
[mv-sheeva.git] / drivers / vhost / net.c
index f442668a1e52e137b347419f9938d386f638b16b..f616cefc95ba74e13bf159c817c49a6fe928fe10 100644 (file)
@@ -10,7 +10,6 @@
 #include <linux/eventfd.h>
 #include <linux/vhost.h>
 #include <linux/virtio_net.h>
-#include <linux/mmu_context.h>
 #include <linux/miscdevice.h>
 #include <linux/module.h>
 #include <linux/mutex.h>
@@ -129,8 +128,7 @@ static void handle_tx(struct vhost_net *net)
        size_t hdr_size;
        struct socket *sock;
 
-       /* TODO: check that we are running from vhost_worker?
-        * Not sure it's worth it, it's straight-forward enough. */
+       /* TODO: check that we are running from vhost_worker? */
        sock = rcu_dereference_check(vq->private_data, 1);
        if (!sock)
                return;
@@ -143,7 +141,6 @@ static void handle_tx(struct vhost_net *net)
                return;
        }
 
-       use_mm(net->dev.mm);
        mutex_lock(&vq->mutex);
        vhost_disable_notify(vq);
 
@@ -208,7 +205,6 @@ static void handle_tx(struct vhost_net *net)
        }
 
        mutex_unlock(&vq->mutex);
-       unuse_mm(net->dev.mm);
 }
 
 static int peek_head_len(struct sock *sk)
@@ -309,11 +305,11 @@ static void handle_rx_big(struct vhost_net *net)
        size_t len, total_len = 0;
        int err;
        size_t hdr_size;
-       struct socket *sock = rcu_dereference(vq->private_data);
+       /* TODO: check that we are running from vhost_worker? */
+       struct socket *sock = rcu_dereference_check(vq->private_data, 1);
        if (!sock || skb_queue_empty(&sock->sk->sk_receive_queue))
                return;
 
-       use_mm(net->dev.mm);
        mutex_lock(&vq->mutex);
        vhost_disable_notify(vq);
        hdr_size = vq->vhost_hlen;
@@ -392,7 +388,6 @@ static void handle_rx_big(struct vhost_net *net)
        }
 
        mutex_unlock(&vq->mutex);
-       unuse_mm(net->dev.mm);
 }
 
 /* Expects to be always run from workqueue - which acts as
@@ -420,11 +415,11 @@ static void handle_rx_mergeable(struct vhost_net *net)
        int err, headcount;
        size_t vhost_hlen, sock_hlen;
        size_t vhost_len, sock_len;
-       struct socket *sock = rcu_dereference(vq->private_data);
+       /* TODO: check that we are running from vhost_worker? */
+       struct socket *sock = rcu_dereference_check(vq->private_data, 1);
        if (!sock || skb_queue_empty(&sock->sk->sk_receive_queue))
                return;
 
-       use_mm(net->dev.mm);
        mutex_lock(&vq->mutex);
        vhost_disable_notify(vq);
        vhost_hlen = vq->vhost_hlen;
@@ -459,7 +454,7 @@ static void handle_rx_mergeable(struct vhost_net *net)
                        move_iovec_hdr(vq->iov, vq->hdr, vhost_hlen, in);
                else
                        /* Copy the header for use in VIRTIO_NET_F_MRG_RXBUF:
-                        * needed because sendmsg can modify msg_iov. */
+                        * needed because recvmsg can modify msg_iov. */
                        copy_iovec_hdr(vq->iov, vq->hdr, sock_hlen, in);
                msg.msg_iovlen = in;
                err = sock->ops->recvmsg(NULL, sock, &msg,
@@ -501,7 +496,6 @@ static void handle_rx_mergeable(struct vhost_net *net)
        }
 
        mutex_unlock(&vq->mutex);
-       unuse_mm(net->dev.mm);
 }
 
 static void handle_rx(struct vhost_net *net)