Re: [RFC PATCH 2/3] net: Replace for_each_possible_cpu with for_each_online_cpu

From: Eric Dumazet
Date: Tue Aug 09 2016 - 06:10:41 EST


On Mon, 2016-08-08 at 18:22 +0800, Jia He wrote:
> In PowerPC server with large number cpus, the loop index in smt=1 could be
> reduced to 1/8 compared with smt=8.
> Thus cache misses can be reduced.
>
> Signed-off-by: Jia He <hejianet@xxxxxxxxx>
> Cc: "David S. Miller" <davem@xxxxxxxxxxxxx>
> Cc: Alexey Kuznetsov <kuznet@xxxxxxxxxxxxx>
> Cc: James Morris <jmorris@xxxxxxxxx>
> Cc: Hideaki YOSHIFUJI <yoshfuji@xxxxxxxxxxxxxx>
> Cc: Patrick McHardy <kaber@xxxxxxxxx>
> ---
> net/ipv6/addrconf.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
> index 43fa8d0..1fce613 100644
> --- a/net/ipv6/addrconf.c
> +++ b/net/ipv6/addrconf.c
> @@ -4969,7 +4969,7 @@ static inline void __snmp6_fill_stats64(u64 *stats, void __percpu *mib,
>
> buff[0] = IPSTATS_MIB_MAX;
>
> - for_each_possible_cpu(c) {
> + for_each_online_cpu(c) {
> for (i = 1; i < IPSTATS_MIB_MAX; i++)
> buff[i] += snmp_get_cpu_field64(mib, c, i, syncpoff);
> }

This will break on machines with cpu hotplug.