xchg cannot be used on 32bit, use cmpxchg64 to reset counters. call to '__xchg_wrong_size' declared with attribute error: Bad argument size for xchg Reported-by: kbuild test robot <fengguang.wu@xxxxxxxxx> Signed-off-by: Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx> --- I'm going to fold this in the local rebase that I have prepared. net/netfilter/nft_counter.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/net/netfilter/nft_counter.c b/net/netfilter/nft_counter.c index 3d2ff23be8d6..f6a02c5071c2 100644 --- a/net/netfilter/nft_counter.c +++ b/net/netfilter/nft_counter.c @@ -122,6 +122,18 @@ static void nft_counter_fetch(struct nft_counter_percpu __percpu *counter, } } +static u64 __nft_counter_reset(u64 *counter) +{ + u64 ret, old; + + do { + old = *counter; + ret = cmpxchg64(counter, old, 0); + } while (ret != old); + + return ret; +} + static void nft_counter_reset(struct nft_counter_percpu __percpu *counter, struct nft_counter *total) { @@ -137,8 +149,8 @@ static void nft_counter_reset(struct nft_counter_percpu __percpu *counter, cpu_stats = per_cpu_ptr(counter, cpu); do { seq = u64_stats_fetch_begin_irq(&cpu_stats->syncp); - packets += xchg(&cpu_stats->counter.packets, 0); - bytes += xchg(&cpu_stats->counter.bytes, 0); + packets += __nft_counter_reset(&cpu_stats->counter.packets); + bytes += __nft_counter_reset(&cpu_stats->counter.bytes); } while (u64_stats_fetch_retry_irq(&cpu_stats->syncp, seq)); total->packets += packets; -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html