Message ID | 20101103070817.26272.31654.stgit@dhcp-91-158.nay.redhat.com |
---|---|
State | Awaiting Upstream, archived |
Delegated to: | David Miller |
Headers | show |
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; -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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;
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(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html