On Wed, Oct 15, 2014 at 03:25:27PM +0800, Jason Wang wrote:
> Accumulate the sent packets and sent bytes in local variables and perform a
> single u64_stats_update_begin/end() after.
> 
> Cc: Rusty Russell <ru...@rustcorp.com.au>
> Cc: Michael S. Tsirkin <m...@redhat.com>
> Signed-off-by: Jason Wang <jasow...@redhat.com>

Not sure how much it's worth but since Eric suggested it ...

Acked-by: Michael S. Tsirkin <m...@redhat.com>

> ---
>  drivers/net/virtio_net.c |   12 ++++++++----
>  1 files changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> index 3d0ce44..a4d56b8 100644
> --- a/drivers/net/virtio_net.c
> +++ b/drivers/net/virtio_net.c
> @@ -833,17 +833,21 @@ static void free_old_xmit_skbs(struct send_queue *sq)
>       unsigned int len;
>       struct virtnet_info *vi = sq->vq->vdev->priv;
>       struct virtnet_stats *stats = this_cpu_ptr(vi->stats);
> +     u64 tx_bytes = 0, tx_packets = 0;
>  
>       while ((skb = virtqueue_get_buf(sq->vq, &len)) != NULL) {
>               pr_debug("Sent skb %p\n", skb);
>  
> -             u64_stats_update_begin(&stats->tx_syncp);
> -             stats->tx_bytes += skb->len;
> -             stats->tx_packets++;
> -             u64_stats_update_end(&stats->tx_syncp);
> +             tx_bytes += skb->len;
> +             tx_packets++;
>  
>               dev_kfree_skb_any(skb);
>       }
> +
> +     u64_stats_update_begin(&stats->tx_syncp);
> +     stats->tx_bytes += tx_bytes;
> +     stats->tx_packets =+ tx_packets;
> +     u64_stats_update_end(&stats->tx_syncp);
>  }
>  
>  static int xmit_skb(struct send_queue *sq, struct sk_buff *skb)
> -- 
> 1.7.1
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

Reply via email to