Re: [PATCH V2] xen-evtchn: Bind dyn evtchn:qemu-dm interrupt to next online VCPU
From: Boris Ostrovsky
Date: Tue Jun 06 2017 - 16:59:01 EST
On 06/06/2017 04:02 PM, kbuild test robot wrote:
> Hi Anoob,
>
> [auto build test ERROR on xen-tip/linux-next]
> [also build test ERROR on v4.12-rc4 next-20170606]
> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>
> url: https://github.com/0day-ci/linux/commits/Anoob-Soman/xen-evtchn-Bind-dyn-evtchn-qemu-dm-interrupt-to-next-online-VCPU/20170607-021300
> base: https://git.kernel.org/pub/scm/linux/kernel/git/xen/tip.git linux-next
> config: x86_64-randconfig-x010-201723 (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=x86_64
>
> All error/warnings (new ones prefixed by >>):
>
> In file included from include/asm-generic/percpu.h:6:0,
> from arch/x86/include/asm/percpu.h:542,
> from arch/x86/include/asm/preempt.h:5,
> from include/linux/preempt.h:80,
> from include/linux/spinlock.h:50,
> from include/linux/seqlock.h:35,
> from include/linux/time.h:5,
> from include/linux/stat.h:18,
> from include/linux/module.h:10,
> from drivers//xen/evtchn.c:36:
> drivers//xen/evtchn.c: In function 'evtchn_bind_interdom_next_vcpu':
> include/linux/percpu-defs.h:91:33: error: section attribute cannot be specified for local variables
> extern __PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \
> ^
> include/linux/percpu-defs.h:116:2: note: in expansion of macro 'DEFINE_PER_CPU_SECTION'
> DEFINE_PER_CPU_SECTION(type, name, "")
> ^~~~~~~~~~~~~~~~~~~~~~
>>> drivers//xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
> include/linux/percpu-defs.h:92:26: error: section attribute cannot be specified for local variables
> __PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \
> ^
> include/linux/percpu-defs.h:116:2: note: in expansion of macro 'DEFINE_PER_CPU_SECTION'
> DEFINE_PER_CPU_SECTION(type, name, "")
> ^~~~~~~~~~~~~~~~~~~~~~
>>> drivers//xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
>>> include/linux/percpu-defs.h:92:26: error: declaration of '__pcpu_unique_bind_last_selected_cpu' with no linkage follows extern declaration
> __PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \
> ^
> include/linux/percpu-defs.h:116:2: note: in expansion of macro 'DEFINE_PER_CPU_SECTION'
> DEFINE_PER_CPU_SECTION(type, name, "")
> ^~~~~~~~~~~~~~~~~~~~~~
>>> drivers//xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
> include/linux/percpu-defs.h:91:33: note: previous declaration of '__pcpu_unique_bind_last_selected_cpu' was here
> extern __PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \
> ^
> include/linux/percpu-defs.h:116:2: note: in expansion of macro 'DEFINE_PER_CPU_SECTION'
> DEFINE_PER_CPU_SECTION(type, name, "")
> ^~~~~~~~~~~~~~~~~~~~~~
>>> drivers//xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
>>> drivers//xen/evtchn.c:438:29: error: section attribute cannot be specified for local variables
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^
> include/linux/percpu-defs.h:93:44: note: in definition of macro 'DEFINE_PER_CPU_SECTION'
> extern __PCPU_ATTRS(sec) __typeof__(type) name; \
> ^~~~
>>> drivers//xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
>>> drivers//xen/evtchn.c:438:29: error: section attribute cannot be specified for local variables
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^
> include/linux/percpu-defs.h:95:19: note: in definition of macro 'DEFINE_PER_CPU_SECTION'
> __typeof__(type) name
> ^~~~
>>> drivers//xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
>>> drivers//xen/evtchn.c:438:29: error: weak declaration of 'bind_last_selected_cpu' must be public
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^
> include/linux/percpu-defs.h:95:19: note: in definition of macro 'DEFINE_PER_CPU_SECTION'
> __typeof__(type) name
> ^~~~
>>> drivers//xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
>>> drivers//xen/evtchn.c:438:29: error: declaration of 'bind_last_selected_cpu' with no linkage follows extern declaration
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^
> include/linux/percpu-defs.h:95:19: note: in definition of macro 'DEFINE_PER_CPU_SECTION'
> __typeof__(type) name
> ^~~~
>>> drivers//xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
> drivers//xen/evtchn.c:438:29: note: previous declaration of 'bind_last_selected_cpu' was here
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^
> include/linux/percpu-defs.h:93:44: note: in definition of macro 'DEFINE_PER_CPU_SECTION'
> extern __PCPU_ATTRS(sec) __typeof__(type) name; \
> ^~~~
>>> drivers//xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
> --
> In file included from include/asm-generic/percpu.h:6:0,
> from arch/x86/include/asm/percpu.h:542,
> from arch/x86/include/asm/preempt.h:5,
> from include/linux/preempt.h:80,
> from include/linux/spinlock.h:50,
> from include/linux/seqlock.h:35,
> from include/linux/time.h:5,
> from include/linux/stat.h:18,
> from include/linux/module.h:10,
> from drivers/xen/evtchn.c:36:
> drivers/xen/evtchn.c: In function 'evtchn_bind_interdom_next_vcpu':
> include/linux/percpu-defs.h:91:33: error: section attribute cannot be specified for local variables
> extern __PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \
> ^
> include/linux/percpu-defs.h:116:2: note: in expansion of macro 'DEFINE_PER_CPU_SECTION'
> DEFINE_PER_CPU_SECTION(type, name, "")
> ^~~~~~~~~~~~~~~~~~~~~~
> drivers/xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
> include/linux/percpu-defs.h:92:26: error: section attribute cannot be specified for local variables
> __PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \
> ^
> include/linux/percpu-defs.h:116:2: note: in expansion of macro 'DEFINE_PER_CPU_SECTION'
> DEFINE_PER_CPU_SECTION(type, name, "")
> ^~~~~~~~~~~~~~~~~~~~~~
> drivers/xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
>>> include/linux/percpu-defs.h:92:26: error: declaration of '__pcpu_unique_bind_last_selected_cpu' with no linkage follows extern declaration
> __PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \
> ^
> include/linux/percpu-defs.h:116:2: note: in expansion of macro 'DEFINE_PER_CPU_SECTION'
> DEFINE_PER_CPU_SECTION(type, name, "")
> ^~~~~~~~~~~~~~~~~~~~~~
> drivers/xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
> include/linux/percpu-defs.h:91:33: note: previous declaration of '__pcpu_unique_bind_last_selected_cpu' was here
> extern __PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \
> ^
> include/linux/percpu-defs.h:116:2: note: in expansion of macro 'DEFINE_PER_CPU_SECTION'
> DEFINE_PER_CPU_SECTION(type, name, "")
> ^~~~~~~~~~~~~~~~~~~~~~
> drivers/xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
> drivers/xen/evtchn.c:438:29: error: section attribute cannot be specified for local variables
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^
> include/linux/percpu-defs.h:93:44: note: in definition of macro 'DEFINE_PER_CPU_SECTION'
> extern __PCPU_ATTRS(sec) __typeof__(type) name; \
> ^~~~
> drivers/xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
> drivers/xen/evtchn.c:438:29: error: section attribute cannot be specified for local variables
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^
> include/linux/percpu-defs.h:95:19: note: in definition of macro 'DEFINE_PER_CPU_SECTION'
> __typeof__(type) name
> ^~~~
> drivers/xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
> drivers/xen/evtchn.c:438:29: error: weak declaration of 'bind_last_selected_cpu' must be public
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^
> include/linux/percpu-defs.h:95:19: note: in definition of macro 'DEFINE_PER_CPU_SECTION'
> __typeof__(type) name
> ^~~~
> drivers/xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
> drivers/xen/evtchn.c:438:29: error: declaration of 'bind_last_selected_cpu' with no linkage follows extern declaration
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^
> include/linux/percpu-defs.h:95:19: note: in definition of macro 'DEFINE_PER_CPU_SECTION'
> __typeof__(type) name
> ^~~~
> drivers/xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
> drivers/xen/evtchn.c:438:29: note: previous declaration of 'bind_last_selected_cpu' was here
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^
> include/linux/percpu-defs.h:93:44: note: in definition of macro 'DEFINE_PER_CPU_SECTION'
> extern __PCPU_ATTRS(sec) __typeof__(type) name; \
> ^~~~
> drivers/xen/evtchn.c:438:9: note: in expansion of macro 'DEFINE_PER_CPU'
> static DEFINE_PER_CPU(int, bind_last_selected_cpu);
> ^~~~~~~~~~~~~~
>
> vim +/bind_last_selected_cpu +438 drivers//xen/evtchn.c
>
> 432
> 433 del_evtchn(u, evtchn);
> 434 }
> 435
> 436 static void evtchn_bind_interdom_next_vcpu(int evtchn)
> 437 {
> > 438 static DEFINE_PER_CPU(int, bind_last_selected_cpu);
Oh well, so much for my request to move it. So you are going to make it
global to the file.
Here is the explanation BTW:
http://www.spinics.net/lists/linux-mm/msg121626.html
CONFIG_DEBUG_FORCE_WEAK_PER_CPU is what trips this.
-boris