All of lore.kernel.org
 help / color / mirror / Atom feed
* [tip:x86/asm 24/32] mm/migrate.o: warning: objtool: migrate_misplaced_transhuge_page()+0x71: unreachable instruction
@ 2017-11-03  3:36 kbuild test robot
  2017-11-03 15:50 ` Josh Poimboeuf
  0 siblings, 1 reply; 4+ messages in thread
From: kbuild test robot @ 2017-11-03  3:36 UTC (permalink / raw)
  To: Andy Lutomirski
  Cc: kbuild-all, linux-kernel, tipbuild, Ingo Molnar, Borislav Petkov

[-- Attachment #1: Type: text/plain, Size: 788 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/asm
head:   1e4c4f610f774df6088d7c065b2dd4d22adba698
commit: da51da189a24bb9b7e2d5a123be096e51a4695a5 [24/32] x86/entry/64: Pass SP0 directly to load_sp0()
config: x86_64-randconfig-in0-11031034 (attached as .config)
compiler: gcc-4.6 (Debian 4.6.4-7) 4.6.4
reproduce:
        git checkout da51da189a24bb9b7e2d5a123be096e51a4695a5
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All warnings (new ones prefixed by >>):

>> mm/migrate.o: warning: objtool: migrate_misplaced_transhuge_page()+0x71: unreachable instruction

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 30752 bytes --]

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

* Re: [tip:x86/asm 24/32] mm/migrate.o: warning: objtool: migrate_misplaced_transhuge_page()+0x71: unreachable instruction
  2017-11-03  3:36 [tip:x86/asm 24/32] mm/migrate.o: warning: objtool: migrate_misplaced_transhuge_page()+0x71: unreachable instruction kbuild test robot
@ 2017-11-03 15:50 ` Josh Poimboeuf
  2017-11-03 22:19   ` [PATCH] objtool: Prevent GCC from merging annotate_unreachable(), take 2 Josh Poimboeuf
  0 siblings, 1 reply; 4+ messages in thread
From: Josh Poimboeuf @ 2017-11-03 15:50 UTC (permalink / raw)
  To: kbuild test robot
  Cc: Andy Lutomirski, kbuild-all, linux-kernel, tipbuild, Ingo Molnar,
	Borislav Petkov

On Fri, Nov 03, 2017 at 11:36:50AM +0800, kbuild test robot wrote:
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/asm
> head:   1e4c4f610f774df6088d7c065b2dd4d22adba698
> commit: da51da189a24bb9b7e2d5a123be096e51a4695a5 [24/32] x86/entry/64: Pass SP0 directly to load_sp0()
> config: x86_64-randconfig-in0-11031034 (attached as .config)
> compiler: gcc-4.6 (Debian 4.6.4-7) 4.6.4
> reproduce:
>         git checkout da51da189a24bb9b7e2d5a123be096e51a4695a5
>         # save the attached .config to linux build tree
>         make ARCH=x86_64 
> 
> All warnings (new ones prefixed by >>):
> 
> >> mm/migrate.o: warning: objtool: migrate_misplaced_transhuge_page()+0x71: unreachable instruction

I've got a fix for this one coming shortly.

-- 
Josh

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

* [PATCH] objtool: Prevent GCC from merging annotate_unreachable(), take 2
  2017-11-03 15:50 ` Josh Poimboeuf
@ 2017-11-03 22:19   ` Josh Poimboeuf
  2017-11-04 22:31     ` [tip:core/urgent] " tip-bot for Josh Poimboeuf
  0 siblings, 1 reply; 4+ messages in thread
From: Josh Poimboeuf @ 2017-11-03 22:19 UTC (permalink / raw)
  To: x86
  Cc: Andy Lutomirski, kbuild-all, linux-kernel, tipbuild, Ingo Molnar,
	Borislav Petkov, kbuild test robot


This fixes the following warning with GCC 4.6:

  mm/migrate.o: warning: objtool: migrate_misplaced_transhuge_page()+0x71: unreachable instruction

The problem is that the compiler merged identical annotate_unreachable()
inline asm blocks, resulting in a missing 'unreachable' annotation.

This problem happened before, and was partially fixed with:

  3d1e236022cc ("objtool: Prevent GCC from merging annotate_unreachable()")

That commit tried to ensure that each instance of the
annotate_unreachable() inline asm statement has a unique label.  It used
the __LINE__ macro to generate the label number.  However, even the line
number isn't necessarily unique when used in an inline function with
multiple callers (in this case, __alloc_pages_node()'s use of
VM_BUG_ON).

Reported-by: kbuild test robot <fengguang.wu@intel.com>
Fixes: 3d1e236022cc ("objtool: Prevent GCC from merging annotate_unreachable()")
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
---
 include/linux/compiler.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/linux/compiler.h b/include/linux/compiler.h
index e95a2631e545..e9fe95b138cf 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -190,13 +190,13 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
 	asm("%c0:\n\t"							\
 	    ".pushsection .discard.reachable\n\t"			\
 	    ".long %c0b - .\n\t"					\
-	    ".popsection\n\t" : : "i" (__LINE__));			\
+	    ".popsection\n\t" : : "i" (__COUNTER__));			\
 })
 #define annotate_unreachable() ({					\
 	asm("%c0:\n\t"							\
 	    ".pushsection .discard.unreachable\n\t"			\
 	    ".long %c0b - .\n\t"					\
-	    ".popsection\n\t" : : "i" (__LINE__));			\
+	    ".popsection\n\t" : : "i" (__COUNTER__));			\
 })
 #define ASM_UNREACHABLE							\
 	"999:\n\t"							\
-- 
2.13.6

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

* [tip:core/urgent] objtool: Prevent GCC from merging annotate_unreachable(), take 2
  2017-11-03 22:19   ` [PATCH] objtool: Prevent GCC from merging annotate_unreachable(), take 2 Josh Poimboeuf
@ 2017-11-04 22:31     ` tip-bot for Josh Poimboeuf
  0 siblings, 0 replies; 4+ messages in thread
From: tip-bot for Josh Poimboeuf @ 2017-11-04 22:31 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: peterz, hpa, jpoimboe, fengguang.wu, mingo, tglx, bp, torvalds,
	linux-kernel, luto

Commit-ID:  ec1e1b6109171d1890a437481c35b2b56d2327b8
Gitweb:     https://git.kernel.org/tip/ec1e1b6109171d1890a437481c35b2b56d2327b8
Author:     Josh Poimboeuf <jpoimboe@redhat.com>
AuthorDate: Fri, 3 Nov 2017 17:19:41 -0500
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Sat, 4 Nov 2017 15:03:39 +0100

objtool: Prevent GCC from merging annotate_unreachable(), take 2

This fixes the following warning with GCC 4.6:

  mm/migrate.o: warning: objtool: migrate_misplaced_transhuge_page()+0x71: unreachable instruction

The problem is that the compiler merged identical annotate_unreachable()
inline asm blocks, resulting in a missing 'unreachable' annotation.

This problem happened before, and was partially fixed with:

  3d1e236022cc ("objtool: Prevent GCC from merging annotate_unreachable()")

That commit tried to ensure that each instance of the
annotate_unreachable() inline asm statement has a unique label.  It used
the __LINE__ macro to generate the label number.  However, even the line
number isn't necessarily unique when used in an inline function with
multiple callers (in this case, __alloc_pages_node()'s use of
VM_BUG_ON).

Reported-by: kbuild test robot <fengguang.wu@intel.com>
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@suse.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: kbuild-all@01.org
Cc: tipbuild@zytor.com
Fixes: 3d1e236022cc ("objtool: Prevent GCC from merging annotate_unreachable()")
Link: http://lkml.kernel.org/r/20171103221941.cajpwszir7ujxyc4@treble
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 include/linux/compiler.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/linux/compiler.h b/include/linux/compiler.h
index fd8697a..2027104 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -191,13 +191,13 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
 	asm("%c0:\n\t"							\
 	    ".pushsection .discard.reachable\n\t"			\
 	    ".long %c0b - .\n\t"					\
-	    ".popsection\n\t" : : "i" (__LINE__));			\
+	    ".popsection\n\t" : : "i" (__COUNTER__));			\
 })
 #define annotate_unreachable() ({					\
 	asm("%c0:\n\t"							\
 	    ".pushsection .discard.unreachable\n\t"			\
 	    ".long %c0b - .\n\t"					\
-	    ".popsection\n\t" : : "i" (__LINE__));			\
+	    ".popsection\n\t" : : "i" (__COUNTER__));			\
 })
 #define ASM_UNREACHABLE							\
 	"999:\n\t"							\

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

end of thread, other threads:[~2017-11-04 22:36 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-03  3:36 [tip:x86/asm 24/32] mm/migrate.o: warning: objtool: migrate_misplaced_transhuge_page()+0x71: unreachable instruction kbuild test robot
2017-11-03 15:50 ` Josh Poimboeuf
2017-11-03 22:19   ` [PATCH] objtool: Prevent GCC from merging annotate_unreachable(), take 2 Josh Poimboeuf
2017-11-04 22:31     ` [tip:core/urgent] " tip-bot for Josh Poimboeuf

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.