lkml.org 
[lkml]   [2010]   [Nov]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[V2 PATCH] virtio-net: init link state correctly
    From
    Date
    For device that supports VIRTIO_NET_F_STATUS, there's no need to
    assume the link is up and we need to call nerif_carrier_off() before
    querying device status, otherwise we may get wrong operstate after
    diver was loaded because the link watch event was not fired as
    expected.

    For device that does not support VIRITO_NET_F_STATUS, we could not get
    its status through virtnet_update_status() and what we can only do is
    always assuming the link is up.

    Signed-off-by: Jason Wang <jasowang@redhat.com>
    ---
    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 bb6b67f..b6d4028 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;


    \
     
     \ /
      Last update: 2010-11-05 03:49    [W:7.783 / U:0.260 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site