linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] virtio-net: init link state correctly
@ 2010-11-03  7:08 Jason Wang
  2010-11-03  8:00 ` Michael S. Tsirkin
  0 siblings, 1 reply; 2+ messages in thread
From: Jason Wang @ 2010-11-03  7:08 UTC (permalink / raw)
  To: rusty, davem; +Cc: markmc, netdev, linux-kernel, kvm, mst

We need call netif_carrier_off() and do not assume VIRTIO_NET_S_LINKUP
before querying device state during probing, otherwise we may get
wrong operstate after driver was loaded because the link watch event
was not fired as expected.

Since the device state changed could be caught through interrupt, the
unconditional call to nerif_carrier_on() is also removed.

Signed-off-by: Jason Wang <jasowang@redhat.com>
---
 drivers/net/virtio_net.c |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index bb6b67f..0a0cd35 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -986,9 +986,8 @@ static int virtnet_probe(struct virtio_device *vdev)
 		goto unregister;
 	}
 
-	vi->status = VIRTIO_NET_S_LINK_UP;
+	netif_carrier_off(dev);
 	virtnet_update_status(vi);
-	netif_carrier_on(dev);
 
 	pr_debug("virtnet: registered device %s\n", dev->name);
 	return 0;


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] virtio-net: init link state correctly
  2010-11-03  7:08 [PATCH] virtio-net: init link state correctly Jason Wang
@ 2010-11-03  8:00 ` Michael S. Tsirkin
  0 siblings, 0 replies; 2+ messages in thread
From: Michael S. Tsirkin @ 2010-11-03  8:00 UTC (permalink / raw)
  To: Jason Wang; +Cc: rusty, davem, markmc, netdev, linux-kernel, kvm

On Wed, Nov 03, 2010 at 03:08:17PM +0800, Jason Wang wrote:
> We need call netif_carrier_off() and do not assume VIRTIO_NET_S_LINKUP
> before querying device state during probing, otherwise we may get
> wrong operstate after driver was loaded because the link watch event
> was not fired as expected.
> 
> Since the device state changed could be caught through interrupt, the
> unconditional call to nerif_carrier_on() is also removed.
> 
> Signed-off-by: Jason Wang <jasowang@redhat.com>

OK, but this seems broken for hosts without VIRTIO_NET_F_STATUS.  Right?
Probably

	/* 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)) {
		vi->status = 0;
		netif_carrier_off(dev);
  		virtnet_update_status(vi);
	} else {
		vi->status = VIRTIO_NET_S_LINK_UP;
		netif_carrier_on(dev);
	}

Makes sense?

> ---
>  drivers/net/virtio_net.c |    3 +--
>  1 files changed, 1 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> index bb6b67f..0a0cd35 100644
> --- a/drivers/net/virtio_net.c
> +++ b/drivers/net/virtio_net.c
> @@ -986,9 +986,8 @@ static int virtnet_probe(struct virtio_device *vdev)
>  		goto unregister;
>  	}
>  
> -	vi->status = VIRTIO_NET_S_LINK_UP;
> +	netif_carrier_off(dev);
>  	virtnet_update_status(vi);
> -	netif_carrier_on(dev);
>  
>  	pr_debug("virtnet: registered device %s\n", dev->name);
>  	return 0;

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2010-11-03  8:00 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-11-03  7:08 [PATCH] virtio-net: init link state correctly Jason Wang
2010-11-03  8:00 ` Michael S. Tsirkin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).