public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] Don't let LATENCYTOP and LOCKDEP select KALLSYMS_ALL
@ 2015-04-08 13:06 Andi Kleen
  2015-04-08 13:06 ` [PATCH 2/2] test-hexdump.c: Fix initconst confusion Andi Kleen
  0 siblings, 1 reply; 9+ messages in thread
From: Andi Kleen @ 2015-04-08 13:06 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel, Andi Kleen

From: Andi Kleen <ak@linux.intel.com>

KALLSYMS_ALL enables including data variables into KALLSYMS.
With plain KALLSYMS only functions are included.

LATENCYTOP and LOCKDEP select KALLSYMS_ALL in addition to KALLSYMS.
It's unclear what they actually need _ALL for; they should
only need function backtraces and afaik never touch variables.

LTO currently does not support KALLSYMS_ALL, which prevents
LATENCYTOP and LOCKDEP from working and gives Kconfig errors.
Disable the requirement for KALLSYMS_ALL for them, just use
KALLSYMS.

Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
 lib/Kconfig.debug | 2 --
 1 file changed, 2 deletions(-)

diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 3e0289e..062165c 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1001,7 +1001,6 @@ config LOCKDEP
 	select STACKTRACE
 	select FRAME_POINTER if !MIPS && !PPC && !ARM_UNWIND && !S390 && !MICROBLAZE && !ARC && !SCORE
 	select KALLSYMS
-	select KALLSYMS_ALL
 
 config LOCK_STAT
 	bool "Lock usage statistics"
@@ -1469,7 +1468,6 @@ config LATENCYTOP
 	depends on PROC_FS
 	select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM_UNWIND && !ARC
 	select KALLSYMS
-	select KALLSYMS_ALL
 	select STACKTRACE
 	select SCHEDSTATS
 	select SCHED_DEBUG
-- 
2.3.3


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/2] test-hexdump.c: Fix initconst confusion
  2015-04-08 13:06 [PATCH 1/2] Don't let LATENCYTOP and LOCKDEP select KALLSYMS_ALL Andi Kleen
@ 2015-04-08 13:06 ` Andi Kleen
  2015-04-08 22:35   ` Andrew Morton
  0 siblings, 1 reply; 9+ messages in thread
From: Andi Kleen @ 2015-04-08 13:06 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel, Andi Kleen

From: Andi Kleen <ak@linux.intel.com>

const char *...[]  is not const, but an array of pointer to const.
So these arrays cannot be __initconst, but must be __initdata

This fixes section conflicts with LTO.

Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
 lib/test-hexdump.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/lib/test-hexdump.c b/lib/test-hexdump.c
index daf29a39..9846ff7 100644
--- a/lib/test-hexdump.c
+++ b/lib/test-hexdump.c
@@ -18,26 +18,26 @@ static const unsigned char data_b[] = {
 
 static const unsigned char data_a[] = ".2.{....p..$}.4...1.....L...C...";
 
-static const char *test_data_1_le[] __initconst = {
+static const char * const test_data_1_le[] __initconst = {
 	"be", "32", "db", "7b", "0a", "18", "93", "b2",
 	"70", "ba", "c4", "24", "7d", "83", "34", "9b",
 	"a6", "9c", "31", "ad", "9c", "0f", "ac", "e9",
 	"4c", "d1", "19", "99", "43", "b1", "af", "0c",
 };
 
-static const char *test_data_2_le[] __initconst = {
+static const char *test_data_2_le[] __initdata = {
 	"32be", "7bdb", "180a", "b293",
 	"ba70", "24c4", "837d", "9b34",
 	"9ca6", "ad31", "0f9c", "e9ac",
 	"d14c", "9919", "b143", "0caf",
 };
 
-static const char *test_data_4_le[] __initconst = {
+static const char *test_data_4_le[] __initdata = {
 	"7bdb32be", "b293180a", "24c4ba70", "9b34837d",
 	"ad319ca6", "e9ac0f9c", "9919d14c", "0cafb143",
 };
 
-static const char *test_data_8_le[] __initconst = {
+static const char *test_data_8_le[] __initdata = {
 	"b293180a7bdb32be", "9b34837d24c4ba70",
 	"e9ac0f9cad319ca6", "0cafb1439919d14c",
 };
-- 
2.3.3


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] test-hexdump.c: Fix initconst confusion
  2015-04-08 13:06 ` [PATCH 2/2] test-hexdump.c: Fix initconst confusion Andi Kleen
@ 2015-04-08 22:35   ` Andrew Morton
  2015-04-08 23:52     ` Andi Kleen
  0 siblings, 1 reply; 9+ messages in thread
From: Andrew Morton @ 2015-04-08 22:35 UTC (permalink / raw)
  To: Andi Kleen; +Cc: linux-kernel, Andi Kleen

On Wed,  8 Apr 2015 06:06:45 -0700 Andi Kleen <andi@firstfloor.org> wrote:

> From: Andi Kleen <ak@linux.intel.com>
> 
> const char *...[]  is not const, but an array of pointer to const.
> So these arrays cannot be __initconst, but must be __initdata
> 
> This fixes section conflicts with LTO.
> 
> --- a/lib/test-hexdump.c
> +++ b/lib/test-hexdump.c
> @@ -18,26 +18,26 @@ static const unsigned char data_b[] = {
>  
>  static const unsigned char data_a[] = ".2.{....p..$}.4...1.....L...C...";
>  
> -static const char *test_data_1_le[] __initconst = {
> +static const char * const test_data_1_le[] __initconst = {

const char * const __initconst

>  	"be", "32", "db", "7b", "0a", "18", "93", "b2",
>  	"70", "ba", "c4", "24", "7d", "83", "34", "9b",
>  	"a6", "9c", "31", "ad", "9c", "0f", "ac", "e9",
>  	"4c", "d1", "19", "99", "43", "b1", "af", "0c",
>  };
>  
> +static const char *test_data_2_le[] __initdata = {
> +static const char *test_data_4_le[] __initdata = {
> +static const char *test_data_8_le[] __initdata = {

const char * __initdata

Why is test_data_1_le[] different?

Can we make them all "const char * const __initconst"?  That would make
checkpatch happy ;)


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] test-hexdump.c: Fix initconst confusion
  2015-04-08 22:35   ` Andrew Morton
@ 2015-04-08 23:52     ` Andi Kleen
  2015-04-09  0:14       ` [PATCH] checkpatch: Add a test for const with __read_mostly uses Joe Perches
  2015-04-16 19:33       ` [PATCH 2/2] test-hexdump.c: Fix initconst confusion Geert Uytterhoeven
  0 siblings, 2 replies; 9+ messages in thread
From: Andi Kleen @ 2015-04-08 23:52 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Andi Kleen, linux-kernel, Andi Kleen

On Wed, Apr 08, 2015 at 03:35:54PM -0700, Andrew Morton wrote:
> > 
> > --- a/lib/test-hexdump.c
> > +++ b/lib/test-hexdump.c
> > @@ -18,26 +18,26 @@ static const unsigned char data_b[] = {
> >  
> >  static const unsigned char data_a[] = ".2.{....p..$}.4...1.....L...C...";
> >  
> > -static const char *test_data_1_le[] __initconst = {
> > +static const char * const test_data_1_le[] __initconst = {
> 
> const char * const __initconst

This one didn't cause any warnings elsewhere.

> 
> >  	"be", "32", "db", "7b", "0a", "18", "93", "b2",
> >  	"70", "ba", "c4", "24", "7d", "83", "34", "9b",
> >  	"a6", "9c", "31", "ad", "9c", "0f", "ac", "e9",
> >  	"4c", "d1", "19", "99", "43", "b1", "af", "0c",
> >  };
> >  
> > +static const char *test_data_2_le[] __initdata = {
> > +static const char *test_data_4_le[] __initdata = {
> > +static const char *test_data_8_le[] __initdata = {
> 
> const char * __initdata
> 
> Why is test_data_1_le[] different?
> 
> Can we make them all "const char * const __initconst"?  That would make
> checkpatch happy ;)

I tried it, but it would have needed a lot more changes to shut up
warnings later in the code. This was the least intrusive.

checkpatch is a bit stupid about this, but then C declarations are
difficult to parse...

-Andi

-- 
ak@linux.intel.com -- Speaking for myself only.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH] checkpatch: Add a test for const with __read_mostly uses
  2015-04-08 23:52     ` Andi Kleen
@ 2015-04-09  0:14       ` Joe Perches
  2015-04-09  0:28         ` Andi Kleen
  2015-04-16 19:33       ` [PATCH 2/2] test-hexdump.c: Fix initconst confusion Geert Uytterhoeven
  1 sibling, 1 reply; 9+ messages in thread
From: Joe Perches @ 2015-04-09  0:14 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Andy Whitcroft, Andi Kleen, linux-kernel

const objects shouldn't be __read_mostly.  They are read-only.

Marking these objects as __read_mostly causes section conflicts
with LTO linking.

So add a test to try to avoid this issue.

Signed-off-by: Joe Perches <joe@perches.com>
---
 scripts/checkpatch.pl | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 9a8b2bd..199d81b 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -4777,6 +4777,16 @@ sub process {
 			}
 		}
 
+# check for __read_mostly with const non-pointer (should just be const)
+		if ($line =~ /\b__read_mostly\b/ &&
+		    $line =~ /($Type)\s*$Ident/ && $1 !~ /\*\s*$/ && $1 =~ /\bconst\b/) {
+			if (ERROR("CONST_READ_MOSTLY",
+				  "Invalid use of __read_mostly with const type\n" . $herecurr) &&
+			    $fix) {
+				$fixed[$fixlinenr] =~ s/\s+__read_mostly\b//;
+			}
+		}
+
 # don't use __constant_<foo> functions outside of include/uapi/
 		if ($realfile !~ m@^include/uapi/@ &&
 		    $line =~ /(__constant_(?:htons|ntohs|[bl]e(?:16|32|64)_to_cpu|cpu_to_[bl]e(?:16|32|64)))\s*\(/) {



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH] checkpatch: Add a test for const with __read_mostly uses
  2015-04-09  0:14       ` [PATCH] checkpatch: Add a test for const with __read_mostly uses Joe Perches
@ 2015-04-09  0:28         ` Andi Kleen
  2015-04-09  0:33           ` Joe Perches
  0 siblings, 1 reply; 9+ messages in thread
From: Andi Kleen @ 2015-04-09  0:28 UTC (permalink / raw)
  To: Joe Perches; +Cc: Andrew Morton, Andy Whitcroft, Andi Kleen, linux-kernel

On Wed, Apr 08, 2015 at 05:14:49PM -0700, Joe Perches wrote:
> const objects shouldn't be __read_mostly.  They are read-only.
> 
> Marking these objects as __read_mostly causes section conflicts
> with LTO linking.
> 
> So add a test to try to avoid this issue.

Thanks Joe. Looks good thanks. I suspect excluding * 
will miss quite a few cases, but there's no way around it.

-Andi

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] checkpatch: Add a test for const with __read_mostly uses
  2015-04-09  0:28         ` Andi Kleen
@ 2015-04-09  0:33           ` Joe Perches
  0 siblings, 0 replies; 9+ messages in thread
From: Joe Perches @ 2015-04-09  0:33 UTC (permalink / raw)
  To: Andi Kleen; +Cc: Andrew Morton, Andy Whitcroft, linux-kernel

On Thu, 2015-04-09 at 02:28 +0200, Andi Kleen wrote:
> On Wed, Apr 08, 2015 at 05:14:49PM -0700, Joe Perches wrote:
> > const objects shouldn't be __read_mostly.  They are read-only.
> > 
> > Marking these objects as __read_mostly causes section conflicts
> > with LTO linking.
> > 
> > So add a test to try to avoid this issue.
> 
> I suspect excluding *
> will miss quite a few cases, but there's no way around it.

That excludes only "const <foo> *" not "const foo * const"
so I believe it shouldn't exclude anything that's not
pointer to const.



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] test-hexdump.c: Fix initconst confusion
  2015-04-08 23:52     ` Andi Kleen
  2015-04-09  0:14       ` [PATCH] checkpatch: Add a test for const with __read_mostly uses Joe Perches
@ 2015-04-16 19:33       ` Geert Uytterhoeven
  2015-04-16 21:21         ` Andi Kleen
  1 sibling, 1 reply; 9+ messages in thread
From: Geert Uytterhoeven @ 2015-04-16 19:33 UTC (permalink / raw)
  To: Andi Kleen; +Cc: Andrew Morton, linux-kernel@vger.kernel.org, Andi Kleen

On Thu, Apr 9, 2015 at 1:52 AM, Andi Kleen <andi@firstfloor.org> wrote:
> On Wed, Apr 08, 2015 at 03:35:54PM -0700, Andrew Morton wrote:
>> >
>> > --- a/lib/test-hexdump.c
>> > +++ b/lib/test-hexdump.c
>> > @@ -18,26 +18,26 @@ static const unsigned char data_b[] = {
>> >
>> >  static const unsigned char data_a[] = ".2.{....p..$}.4...1.....L...C...";
>> >
>> > -static const char *test_data_1_le[] __initconst = {
>> > +static const char * const test_data_1_le[] __initconst = {
>>
>> const char * const __initconst
>
> This one didn't cause any warnings elsewhere.
>
>>
>> >     "be", "32", "db", "7b", "0a", "18", "93", "b2",
>> >     "70", "ba", "c4", "24", "7d", "83", "34", "9b",
>> >     "a6", "9c", "31", "ad", "9c", "0f", "ac", "e9",
>> >     "4c", "d1", "19", "99", "43", "b1", "af", "0c",
>> >  };
>> >
>> > +static const char *test_data_2_le[] __initdata = {
>> > +static const char *test_data_4_le[] __initdata = {
>> > +static const char *test_data_8_le[] __initdata = {
>>
>> const char * __initdata
>>
>> Why is test_data_1_le[] different?
>>
>> Can we make them all "const char * const __initconst"?  That would make
>> checkpatch happy ;)
>
> I tried it, but it would have needed a lot more changes to shut up
> warnings later in the code. This was the least intrusive.

"a lot more changes" is "one more change"? (patch sent)

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] test-hexdump.c: Fix initconst confusion
  2015-04-16 19:33       ` [PATCH 2/2] test-hexdump.c: Fix initconst confusion Geert Uytterhoeven
@ 2015-04-16 21:21         ` Andi Kleen
  0 siblings, 0 replies; 9+ messages in thread
From: Andi Kleen @ 2015-04-16 21:21 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Andi Kleen, Andrew Morton, linux-kernel@vger.kernel.org,
	Andi Kleen

> > I tried it, but it would have needed a lot more changes to shut up
> > warnings later in the code. This was the least intrusive.
> 
> "a lot more changes" is "one more change"? (patch sent)

Thanks Geert. You're right of course.
-Andi

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2015-04-16 21:21 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-04-08 13:06 [PATCH 1/2] Don't let LATENCYTOP and LOCKDEP select KALLSYMS_ALL Andi Kleen
2015-04-08 13:06 ` [PATCH 2/2] test-hexdump.c: Fix initconst confusion Andi Kleen
2015-04-08 22:35   ` Andrew Morton
2015-04-08 23:52     ` Andi Kleen
2015-04-09  0:14       ` [PATCH] checkpatch: Add a test for const with __read_mostly uses Joe Perches
2015-04-09  0:28         ` Andi Kleen
2015-04-09  0:33           ` Joe Perches
2015-04-16 19:33       ` [PATCH 2/2] test-hexdump.c: Fix initconst confusion Geert Uytterhoeven
2015-04-16 21:21         ` Andi Kleen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox