]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
virtio_net: Set the mac config only when VIRITO_NET_F_MAC
authorAlex Williamson <alex.williamson@hp.com>
Sat, 4 Apr 2009 23:40:19 +0000 (16:40 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 4 Apr 2009 23:40:19 +0000 (16:40 -0700)
VIRTIO_NET_F_MAC indicates the presence of the mac field in config
space, not the validity of the value it contains.  Allow the mac to be
changed at runtime, but only push the change into config space with the
VIRTIO_NET_F_MAC feature present.

Signed-off-by: Alex Williamson <alex.williamson@hp.com>
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/virtio_net.c

index a6f1e19159d8e19b1d581c48cf28f96aec93cffe..9c82a39497e5f9f3aae73b8df04c78cbaf8311df 100644 (file)
@@ -575,8 +575,9 @@ static int virtnet_set_mac_address(struct net_device *dev, void *p)
        if (ret)
                return ret;
 
-       vdev->config->set(vdev, offsetof(struct virtio_net_config, mac),
-                         dev->dev_addr, dev->addr_len);
+       if (virtio_has_feature(vdev, VIRTIO_NET_F_MAC))
+               vdev->config->set(vdev, offsetof(struct virtio_net_config, mac),
+                                 dev->dev_addr, dev->addr_len);
 
        return 0;
 }
@@ -876,11 +877,8 @@ static int virtnet_probe(struct virtio_device *vdev)
                vdev->config->get(vdev,
                                  offsetof(struct virtio_net_config, mac),
                                  dev->dev_addr, dev->addr_len);
-       } else {
+       } else
                random_ether_addr(dev->dev_addr);
-               vdev->config->set(vdev, offsetof(struct virtio_net_config, mac),
-                                 dev->dev_addr, dev->addr_len);
-       }
 
        /* Set up our device-specific information */
        vi = netdev_priv(dev);