lkml.org 
[lkml]   [2011]   [May]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 17/18] virtio_net: fix TX capacity checks using new API
    virtio net uses the number of sg entries to
    check for TX ring capacity freed. But this
    gives incorrect results when indirect buffers
    are used. Use the new capacity API instead.

    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    ---
    drivers/net/virtio_net.c | 9 ++++-----
    1 files changed, 4 insertions(+), 5 deletions(-)

    diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
    index f685324..f33c92b 100644
    --- a/drivers/net/virtio_net.c
    +++ b/drivers/net/virtio_net.c
    @@ -509,19 +509,17 @@ again:
    return received;
    }

    -static unsigned int free_old_xmit_skbs(struct virtnet_info *vi)
    +static void free_old_xmit_skbs(struct virtnet_info *vi)
    {
    struct sk_buff *skb;
    - unsigned int len, tot_sgs = 0;
    + unsigned int len;

    while ((skb = virtqueue_get_buf(vi->svq, &len)) != NULL) {
    pr_debug("Sent skb %p\n", skb);
    vi->dev->stats.tx_bytes += skb->len;
    vi->dev->stats.tx_packets++;
    - tot_sgs += skb_vnet_hdr(skb)->num_sg;
    dev_kfree_skb_any(skb);
    }
    - return tot_sgs;
    }

    static int xmit_skb(struct virtnet_info *vi, struct sk_buff *skb)
    @@ -611,7 +609,8 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev)
    netif_stop_queue(dev);
    if (unlikely(!virtqueue_enable_cb_delayed(vi->svq))) {
    /* More just got used, free them then recheck. */
    - capacity += free_old_xmit_skbs(vi);
    + free_old_xmit_skbs(vi);
    + capacity = virtqueue_get_capacity(vi->svq);
    if (capacity >= 2+MAX_SKB_FRAGS) {
    netif_start_queue(dev);
    virtqueue_disable_cb(vi->svq);
    --
    1.7.5.53.gc233e


    \
     
     \ /
      Last update: 2011-05-04 22:57    [W:0.039 / U:2.200 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site