diff options
Diffstat (limited to 'drivers/net/virtio_net.c')
| -rw-r--r-- | drivers/net/virtio_net.c | 12 | 
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index bb6b67f6b0cc..b6d402806ae6 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -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;  | 
