hv_netvsc: use per_cpu stats to calculate TX/RX data
authorsixiao@microsoft.com <sixiao@microsoft.com>
Thu, 14 May 2015 08:00:25 +0000 (01:00 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 15 May 2015 02:49:30 +0000 (22:49 -0400)
commit7eafd9b4005643cfc24f1daf78f4dd56ff71f559
treee6ce83d089c50b5e388652bc07f42f0ff8793fa9
parent56cbaa45dde2356d46c3d9a26c5f09f91156e5a7
hv_netvsc: use per_cpu stats to calculate TX/RX data

Current code does not lock anything when calculating the TX and RX stats.
As a result, the RX and TX data reported by ifconfig are not accuracy in a
system with high network throughput and multiple CPUs (in my test,
RX/TX = 83% between 2 HyperV VM nodes which have 8 vCPUs and 40G Ethernet).

This patch fixed the above issue by using per_cpu stats.
netvsc_get_stats64() summarizes TX and RX data by iterating over all CPUs
to get their respective stats.

This v2 patch addressed David's comments on the cleanup path when
netdev_alloc_pcpu_stats() failed.

Signed-off-by: Simon Xiao <sixiao@microsoft.com>
Reviewed-by: K. Y. Srinivasan <kys@microsoft.com>
Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/hyperv/hyperv_net.h
drivers/net/hyperv/netvsc_drv.c