]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - drivers/net/virtio_net.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
[mirror_ubuntu-zesty-kernel.git] / drivers / net / virtio_net.c
index e6b5d6ef9ea8223868375a0d2f184869b200b447..b7004ff36451764278e47eac267ffb4cd6bcd4bf 100644 (file)
@@ -374,9 +374,9 @@ static void skb_recv_done(struct virtqueue *rvq)
 {
        struct virtnet_info *vi = rvq->vdev->priv;
        /* Schedule NAPI, Suppress further interrupts if successful. */
-       if (netif_rx_schedule_prep(vi->dev, &vi->napi)) {
+       if (netif_rx_schedule_prep(&vi->napi)) {
                rvq->vq_ops->disable_cb(rvq);
-               __netif_rx_schedule(vi->dev, &vi->napi);
+               __netif_rx_schedule(&vi->napi);
        }
 }
 
@@ -402,11 +402,11 @@ again:
 
        /* Out of packets? */
        if (received < budget) {
-               netif_rx_complete(vi->dev, napi);
+               netif_rx_complete(napi);
                if (unlikely(!vi->rvq->vq_ops->enable_cb(vi->rvq))
                    && napi_schedule_prep(napi)) {
                        vi->rvq->vq_ops->disable_cb(vi->rvq);
-                       __netif_rx_schedule(vi->dev, napi);
+                       __netif_rx_schedule(napi);
                        goto again;
                }
        }
@@ -580,9 +580,9 @@ static int virtnet_open(struct net_device *dev)
         * won't get another interrupt, so process any outstanding packets
         * now.  virtnet_poll wants re-enable the queue, so we disable here.
         * We synchronize against interrupts via NAPI_STATE_SCHED */
-       if (netif_rx_schedule_prep(dev, &vi->napi)) {
+       if (netif_rx_schedule_prep(&vi->napi)) {
                vi->rvq->vq_ops->disable_cb(vi->rvq);
-               __netif_rx_schedule(dev, &vi->napi);
+               __netif_rx_schedule(&vi->napi);
        }
        return 0;
 }
@@ -613,6 +613,17 @@ static struct ethtool_ops virtnet_ethtool_ops = {
        .set_tso = ethtool_op_set_tso,
 };
 
+#define MIN_MTU 68
+#define MAX_MTU 65535
+
+static int virtnet_change_mtu(struct net_device *dev, int new_mtu)
+{
+       if (new_mtu < MIN_MTU || new_mtu > MAX_MTU)
+               return -EINVAL;
+       dev->mtu = new_mtu;
+       return 0;
+}
+
 static int virtnet_probe(struct virtio_device *vdev)
 {
        int err;
@@ -628,6 +639,7 @@ static int virtnet_probe(struct virtio_device *vdev)
        dev->open = virtnet_open;
        dev->stop = virtnet_close;
        dev->hard_start_xmit = start_xmit;
+       dev->change_mtu = virtnet_change_mtu;
        dev->features = NETIF_F_HIGHDMA;
 #ifdef CONFIG_NET_POLL_CONTROLLER
        dev->poll_controller = virtnet_netpoll;