From: Wanlong Gao <gaowanlong@cn.fujitsu.com>
To: Tejun Heo <tj@kernel.org>
Cc: josh@kernel.org, linux-sparse@vger.kernel.org,
Wu Fengguang <fengguang.wu@intel.com>,
kbuild-all@01.org, Rusty Russell <rusty@rustcorp.com.au>,
Christoph Lameter <cl@linux-foundation.org>,
Wanlong Gao <gaowanlong@cn.fujitsu.com>
Subject: Re: [BUG report]sparse warnings on DEFINE_PER_CPU() symbols non-static
Date: Wed, 04 Dec 2013 11:26:44 +0800 [thread overview]
Message-ID: <529EA0F4.5070205@cn.fujitsu.com> (raw)
In-Reply-To: <20131203222543.GQ8277@htj.dyndns.org>
On 12/04/2013 06:25 AM, Tejun Heo wrote:
> 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?
Goes away but comes new error:
/git/linux/fs/inode.c:74:8: error: symbol 'nr_inodes' redeclared with different type (originally declared at /git/linux/fs/inode.c:74) - different address spaces
/git/linux/fs/inode.c:75:8: error: symbol 'nr_unused' redeclared with different type (originally declared at /git/linux/fs/inode.c:75) - different address spaces
/git/linux/fs/inode.c:835:8: error: symbol 'last_ino' redeclared with different type (originally declared at /git/linux/fs/inode.c:835) - different address spaces
Thanks,
Wanlong Gao
>
> 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
>
next prev parent reply other threads:[~2013-12-04 3:28 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-26 3:37 [BUG report]sparse warnings on DEFINE_PER_CPU() symbols non-static Wanlong Gao
2013-12-03 22:25 ` Tejun Heo
2013-12-03 23:43 ` Josh Triplett
2013-12-04 15:10 ` Tejun Heo
2013-12-04 3:26 ` Wanlong Gao [this message]
2013-12-04 15:12 ` Tejun Heo
2013-12-05 0:18 ` Wanlong Gao
2013-12-05 18:01 ` [PATCH] percpu: fix spurious sparse warnings from DEFINE_PER_CPU() Tejun Heo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=529EA0F4.5070205@cn.fujitsu.com \
--to=gaowanlong@cn.fujitsu.com \
--cc=cl@linux-foundation.org \
--cc=fengguang.wu@intel.com \
--cc=josh@kernel.org \
--cc=kbuild-all@01.org \
--cc=linux-sparse@vger.kernel.org \
--cc=rusty@rustcorp.com.au \
--cc=tj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.