Re: [BUG report]sparse warnings on DEFINE_PER_CPU() symbols non-static

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

On Tue, Nov 26, 2013 at 11:37:03AM +0800, Wanlong Gao wrote:
> If kernel config CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y, then the sparse will report non-static
> warnings like following:
> 
> > /git/linux/fs/inode.c:74:8: warning: symbol 'nr_inodes' was not declared. Should it be static?
> > /git/linux/fs/inode.c:75:8: warning: symbol 'nr_unused' was not declared. Should it be static?
> >
> > $ vi +74 fs/inode.c
> >   73 
> >   74 static DEFINE_PER_CPU(unsigned long, nr_inodes);
> >   75 static DEFINE_PER_CPU(unsigned long, nr_unused);
> >   76 

Hmmm, so, if FORCE_WEAK_PER_CPU is set or the arch needs WEAK_PER_CPU,
DEFINE_PER_CPU() explodes into mind-bending series of definitions to
ensure that the symbol is globally unique to avoid breaking weak decl
requirements on a few archs.  In the process static is dropped from
the actual declaration and it's apparently missing extern decl in
front of it.

Does the following patch make it go away?

Thanks.

diff --git a/include/linux/percpu-defs.h b/include/linux/percpu-defs.h
index 57e890a..8c490cc 100644
--- a/include/linux/percpu-defs.h
+++ b/include/linux/percpu-defs.h
@@ -69,6 +69,7 @@
 	__PCPU_DUMMY_ATTRS char __pcpu_scope_##name;			\
 	extern __PCPU_DUMMY_ATTRS char __pcpu_unique_##name;		\
 	__PCPU_DUMMY_ATTRS char __pcpu_unique_##name;			\
+	extern __typeof__(type) name;					\
 	__PCPU_ATTRS(sec) PER_CPU_DEF_ATTRIBUTES __weak			\
 	__typeof__(type) name
 #else
--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux