lkml.org 
[lkml]   [2011]   [Nov]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 07/11] virtio: net: Move out vq initialization into separate function
    Date
    The probe and PM restore functions will share this code.

    Signed-off-by: Amit Shah <amit.shah@redhat.com>
    ---
    drivers/net/virtio_net.c | 47 +++++++++++++++++++++++++++------------------
    1 files changed, 28 insertions(+), 19 deletions(-)
    diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
    index 6ee8410..6baa563 100644
    --- a/drivers/net/virtio_net.c
    +++ b/drivers/net/virtio_net.c
    @@ -954,15 +954,38 @@ static void virtnet_config_changed(struct virtio_device *vdev)
    virtnet_update_status(vi);
    }

    +static int init_vqs(struct virtnet_info *vi)
    +{
    + struct virtqueue *vqs[3];
    + vq_callback_t *callbacks[] = { skb_recv_done, skb_xmit_done, NULL};
    + const char *names[] = { "input", "output", "control" };
    + int nvqs, err;
    +
    + /* We expect two virtqueues, receive then send,
    + * and optionally control. */
    + nvqs = virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_VQ) ? 3 : 2;
    +
    + err = vi->vdev->config->find_vqs(vi->vdev, nvqs, vqs, callbacks, names);
    + if (err)
    + return err;
    +
    + vi->rvq = vqs[0];
    + vi->svq = vqs[1];
    +
    + if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_VQ)) {
    + vi->cvq = vqs[2];
    +
    + if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_VLAN))
    + vi->dev->features |= NETIF_F_HW_VLAN_FILTER;
    + }
    + return 0;
    +}
    +
    static int virtnet_probe(struct virtio_device *vdev)
    {
    int err;
    struct net_device *dev;
    struct virtnet_info *vi;
    - struct virtqueue *vqs[3];
    - vq_callback_t *callbacks[] = { skb_recv_done, skb_xmit_done, NULL};
    - const char *names[] = { "input", "output", "control" };
    - int nvqs;

    /* Allocate ourselves a network device with room for our info */
    dev = alloc_etherdev(sizeof(struct virtnet_info));
    @@ -1034,24 +1057,10 @@ static int virtnet_probe(struct virtio_device *vdev)
    if (virtio_has_feature(vdev, VIRTIO_NET_F_MRG_RXBUF))
    vi->mergeable_rx_bufs = true;

    - /* We expect two virtqueues, receive then send,
    - * and optionally control. */
    - nvqs = virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_VQ) ? 3 : 2;
    -
    - err = vdev->config->find_vqs(vdev, nvqs, vqs, callbacks, names);
    + err = init_vqs(vi);
    if (err)
    goto free_stats;

    - vi->rvq = vqs[0];
    - vi->svq = vqs[1];
    -
    - if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_VQ)) {
    - vi->cvq = vqs[2];
    -
    - if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_VLAN))
    - dev->features |= NETIF_F_HW_VLAN_FILTER;
    - }
    -
    err = register_netdev(dev);
    if (err) {
    pr_debug("virtio_net: registering device failed\n");
    --
    1.7.7.1


    \
     
     \ /
      Last update: 2011-11-17 13:01    [from the cache]
    ©2003-2011 Jasper Spaans