|
@@ -986,9 +986,15 @@ static int virtnet_probe(struct virtio_device *vdev)
|
|
|
goto unregister;
|
|
|
}
|
|
|
|
|
|
- vi->status = VIRTIO_NET_S_LINK_UP;
|
|
|
- virtnet_update_status(vi);
|
|
|
- netif_carrier_on(dev);
|
|
|
+ /* Assume link up if device can't report link status,
|
|
|
+ otherwise get link status from config. */
|
|
|
+ if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_STATUS)) {
|
|
|
+ netif_carrier_off(dev);
|
|
|
+ virtnet_update_status(vi);
|
|
|
+ } else {
|
|
|
+ vi->status = VIRTIO_NET_S_LINK_UP;
|
|
|
+ netif_carrier_on(dev);
|
|
|
+ }
|
|
|
|
|
|
pr_debug("virtnet: registered device %s\n", dev->name);
|
|
|
return 0;
|