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

kbuild test robot lkp at intel.com
Wed Sep 21 20:30:41 AEST 2016


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 at kernel.org>
:::::: CC: Ingo Molnar <mingo at kernel.org>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 28216 bytes
Desc: not available
URL: <http://lists.ozlabs.org/pipermail/linuxppc-dev/attachments/20160921/fb5fa63d/attachment-0001.gz>


More information about the Linuxppc-dev mailing list