Re: [PATCH] percpu: improve generic percpu modify-return implementation

From: kbuild test robot
Date: Wed Sep 21 2016 - 06:31:35 EST


Hi Nicholas,

[auto build test WARNING on asm-generic/master]
[also build test WARNING on v4.8-rc7 next-20160920]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
[Suggest to use git(>=2.9.0) format-patch --base=<commit> (or --base=auto for convenience) to record what (public, well-known) commit your patch series was built on]
[Check https://git-scm.com/docs/git-format-patch for more information]

url: https://github.com/0day-ci/linux/commits/Nicholas-Piggin/percpu-improve-generic-percpu-modify-return-implementation/20160921-170016
base: https://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic.git master
config: i386-randconfig-s0-201638 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=i386

All warnings (new ones prefixed by >>):

In file included from arch/x86/include/asm/percpu.h:551:0,
from arch/x86/include/asm/preempt.h:5,
from include/linux/preempt.h:59,
from include/linux/spinlock.h:50,
from arch/x86/kernel/nmi.c:13:
arch/x86/kernel/nmi.c: In function 'do_nmi':
include/asm-generic/percpu.h:138:17: warning: unused variable '__p' [-Wunused-variable]
typeof(&(pcp)) __p = raw_cpu_ptr(&(pcp)); \
^
include/asm-generic/percpu.h:378:41: note: in expansion of macro 'this_cpu_generic_add_return'
#define this_cpu_add_return_8(pcp, val) this_cpu_generic_add_return(pcp, val)
^~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:326:24: note: in expansion of macro 'this_cpu_add_return_8'
case 8: pscr2_ret__ = stem##8(variable, __VA_ARGS__); break; \
^~~~
include/linux/percpu-defs.h:499:39: note: in expansion of macro '__pcpu_size_call_return2'
#define this_cpu_add_return(pcp, val) __pcpu_size_call_return2(this_cpu_add_return_, pcp, val)
^~~~~~~~~~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:511:34: note: in expansion of macro 'this_cpu_add_return'
#define this_cpu_dec_return(pcp) this_cpu_add_return(pcp, -1)
^~~~~~~~~~~~~~~~~~~
>> arch/x86/kernel/nmi.c:544:6: note: in expansion of macro 'this_cpu_dec_return'
if (this_cpu_dec_return(nmi_state))
^~~~~~~~~~~~~~~~~~~
--
mm/vmstat.c: In function 'refresh_cpu_vm_stats':
mm/vmstat.c:476:1: error: macro "raw_cpu_generic_xchg" requires 2 arguments, but only 1 given
v = this_cpu_xchg(p->vm_stat_diff[i], 0);
^ ~~~~~~~~~~~~
In file included from arch/x86/include/asm/percpu.h:551:0,
from arch/x86/include/asm/preempt.h:5,
from include/linux/preempt.h:59,
from include/linux/spinlock.h:50,
from include/linux/wait.h:8,
from include/linux/fs.h:5,
from mm/vmstat.c:12:
include/asm-generic/percpu.h:152:10: error: 'raw_cpu_generic_xchg' undeclared (first use in this function)
__ret = raw_cpu_generic_xchg(pcp); \
^
include/asm-generic/percpu.h:391:36: note: in expansion of macro 'this_cpu_generic_xchg'
#define this_cpu_xchg_8(pcp, nval) this_cpu_generic_xchg(pcp, nval)
^~~~~~~~~~~~~~~~~~~~~
>> include/linux/percpu-defs.h:326:24: note: in expansion of macro 'this_cpu_xchg_8'
case 8: pscr2_ret__ = stem##8(variable, __VA_ARGS__); break; \
^~~~
include/linux/percpu-defs.h:500:34: note: in expansion of macro '__pcpu_size_call_return2'
#define this_cpu_xchg(pcp, nval) __pcpu_size_call_return2(this_cpu_xchg_, pcp, nval)
^~~~~~~~~~~~~~~~~~~~~~~~
mm/vmstat.c:476:8: note: in expansion of macro 'this_cpu_xchg'
v = this_cpu_xchg(p->vm_stat_diff[i], 0);
^~~~~~~~~~~~~
include/asm-generic/percpu.h:152:10: note: each undeclared identifier is reported only once for each function it appears in
__ret = raw_cpu_generic_xchg(pcp); \
^
include/asm-generic/percpu.h:391:36: note: in expansion of macro 'this_cpu_generic_xchg'
#define this_cpu_xchg_8(pcp, nval) this_cpu_generic_xchg(pcp, nval)
^~~~~~~~~~~~~~~~~~~~~
>> include/linux/percpu-defs.h:326:24: note: in expansion of macro 'this_cpu_xchg_8'
case 8: pscr2_ret__ = stem##8(variable, __VA_ARGS__); break; \
^~~~
include/linux/percpu-defs.h:500:34: note: in expansion of macro '__pcpu_size_call_return2'
#define this_cpu_xchg(pcp, nval) __pcpu_size_call_return2(this_cpu_xchg_, pcp, nval)
^~~~~~~~~~~~~~~~~~~~~~~~
mm/vmstat.c:476:8: note: in expansion of macro 'this_cpu_xchg'
v = this_cpu_xchg(p->vm_stat_diff[i], 0);
^~~~~~~~~~~~~

vim +/this_cpu_dec_return +544 arch/x86/kernel/nmi.c

1d48922c Don Zickus 2011-09-30 528 inc_irq_stat(__nmi_count);
1d48922c Don Zickus 2011-09-30 529
1d48922c Don Zickus 2011-09-30 530 if (!ignore_nmis)
1d48922c Don Zickus 2011-09-30 531 default_do_nmi(regs);
1d48922c Don Zickus 2011-09-30 532
1d48922c Don Zickus 2011-09-30 533 nmi_exit();
228bdaa9 Steven Rostedt 2011-12-09 534
9d050416 Andy Lutomirski 2015-07-15 535 #ifdef CONFIG_X86_64
9d050416 Andy Lutomirski 2015-07-15 536 if (unlikely(this_cpu_read(update_debug_stack))) {
9d050416 Andy Lutomirski 2015-07-15 537 debug_stack_reset();
9d050416 Andy Lutomirski 2015-07-15 538 this_cpu_write(update_debug_stack, 0);
9d050416 Andy Lutomirski 2015-07-15 539 }
9d050416 Andy Lutomirski 2015-07-15 540 #endif
9d050416 Andy Lutomirski 2015-07-15 541
9d050416 Andy Lutomirski 2015-07-15 542 if (unlikely(this_cpu_read(nmi_cr2) != read_cr2()))
9d050416 Andy Lutomirski 2015-07-15 543 write_cr2(this_cpu_read(nmi_cr2));
9d050416 Andy Lutomirski 2015-07-15 @544 if (this_cpu_dec_return(nmi_state))
9d050416 Andy Lutomirski 2015-07-15 545 goto nmi_restart;
1d48922c Don Zickus 2011-09-30 546 }
9326638c Masami Hiramatsu 2014-04-17 547 NOKPROBE_SYMBOL(do_nmi);
1d48922c Don Zickus 2011-09-30 548
1d48922c Don Zickus 2011-09-30 549 void stop_nmi(void)
1d48922c Don Zickus 2011-09-30 550 {
1d48922c Don Zickus 2011-09-30 551 ignore_nmis++;
1d48922c Don Zickus 2011-09-30 552 }

:::::: The code at line 544 was first introduced by commit
:::::: 9d05041679904b12c12421cbcf9cb5f4860a8d7b x86/nmi: Enable nested do_nmi() handling for 64-bit kernels

:::::: TO: Andy Lutomirski <luto@xxxxxxxxxx>
:::::: CC: Ingo Molnar <mingo@xxxxxxxxxx>

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

Attachment: .config.gz
Description: application/gzip