On 06/13/2018 12:36 PM, Yidong Ren wrote:
> From: Yidong Ren <yid...@microsoft.com>
> 
> This patch implements following ethtool stats fields for netvsc:
> cpu<n>_tx/rx_packets/bytes
> cpu<n>_vf_tx/rx_packets/bytes

...
>  
> +     pcpu_sum = alloc_percpu(struct netvsc_ethtool_pcpu_stats);
> +     netvsc_get_pcpu_stats(dev, pcpu_sum);
> +     for_each_present_cpu(cpu) {
> +             struct netvsc_ethtool_pcpu_stats *this_sum =
> +                     per_cpu_ptr(pcpu_sum, cpu);
> +             for (j = 0; j < ARRAY_SIZE(pcpu_stats); j++)
> +                     data[i++] = *(u64 *)((void *)this_sum
> +                                          + pcpu_stats[j].offset);
> +     }
> +     free_percpu(pcpu_sum);
>


Using alloc_percpu() / free_percpu() for a short section of code makes no sense.

You actually want to allocate memory local to this cpu, possibly in one chunk,
not spread all over the places.

kvmalloc(nr_cpu_ids * sizeof(struct netvsc_ethtool_pcpu_stats))  should be 
really better,
since it would most of the time be satisfied by a single kmalloc()

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to