Skip to contentSkip to conversation

MIPS: Makefile: workaround printk recursion bug

PATCH In review Wladislav Wiebe 2 participants 3 messages Apr 10, 2013 – Apr 11, 2013 MIPS

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 MIPS: Makefile: workaround printk recursion bug

From: Wladislav Wiebe <[email protected]>

Function tracing is broken due to removal of selecting FRAME_POINTER with FUNCTION_TRACER as result of commit: b732d439cb43336cd6d7e804ecb2c81193ef63b0

Latest commit ad8c396936e328f5344e1881afde9e28d5f2045f "MIPS: Unbreak function tracer for 64-bit kernel." fixes just the early startup hang, but on MIPS64/CAVIUM_OCTEON2 are still random printk recursion bugs which cause also Kernel hangs, especially on late startup phase when network drivers get loaded. This patch enable for CAVIUM_OCTEON2/64 Bit architecture -fno-omit-frame-pointer cflag when FUNCTION_TRACER get enabled. This will fix random Kernel hangs with "BUG: recent printk recursion!" from linux/kernel/printk.c.

Maybe there exist a other solution in mcount handling, since in the commit message from Al Cooper is mentioned that "MIPS frame pointers are generally considered to be useless because they cannot be used to unwind the stack. Unfortunately the MIPS function tracing code has bugs that are masked by the use of frame pointers. This commit fixes the bugs so that MIPS frame pointers don't need to be enabled."

But this is just a solution for MIPS32 - on a symmetric multiprocessing @MIPS64/CAVIUM_OCTEON2 it doesn't work properly.

---
 arch/mips/Makefile |    9 +++++++++
 1 file changed, 9 insertions(+)
arch/mips/Makefile +9 -0
index 6f7978f..8befe31 100644
@@ -119,6 +119,15 @@ cflags-$(CONFIG_SB1XXX_CORELIS)	+= $(call cc-option,-mno-sched-prolog) \
 				   -fno-omit-frame-pointer
 
 #
+# FTrace depended compiler options, currently only needed by MIPS64/OCTEON2.
+#
+ifdef CONFIG_64BIT
+ifdef CONFIG_CAVIUM_OCTEON2
+cflags-$(CONFIG_FUNCTION_TRACER) += $(call cc-option,-fno-omit-frame-pointer)
+endif
+endif
+
+#
 # CPU-dependent compiler/assembler options for optimization.
 #
 cflags-$(CONFIG_CPU_R3000)	+= -march=r3000
Signature · 1 line
1.7.9.5
#1 lore raw
Quoted 22 lines · Wladislav Wiebe

From: Wladislav Wiebe <[email protected]>

Function tracing is broken due to removal of selecting FRAME_POINTER with FUNCTION_TRACER as result of commit: b732d439cb43336cd6d7e804ecb2c81193ef63b0

Latest commit ad8c396936e328f5344e1881afde9e28d5f2045f "MIPS: Unbreak function tracer for 64-bit kernel." fixes just the early startup hang, but on MIPS64/CAVIUM_OCTEON2 are still random printk recursion bugs which cause also Kernel hangs, especially on late startup phase when network drivers get loaded. This patch enable for CAVIUM_OCTEON2/64 Bit architecture -fno-omit-frame-pointer cflag when FUNCTION_TRACER get enabled. This will fix random Kernel hangs with "BUG: recent printk recursion!" from linux/kernel/printk.c.

Maybe there exist a other solution in mcount handling, since in the commit message from Al Cooper is mentioned that "MIPS frame pointers are generally considered to be useless because they cannot be used to unwind the stack. Unfortunately the MIPS function tracing code has bugs that are masked by the use of frame pointers. This commit fixes the bugs so that MIPS frame pointers don't need to be enabled."

Quoted 2 lines

But this is just a solution for MIPS32 - on a symmetric multiprocessing @MIPS64/CAVIUM_OCTEON2 it doesn't work properly.

There are a couple of problems that I see with this patch:

1) It doesn't handle non-OCTEON2. Surely other 64-bit targets are effected as well

2) You don't say how it is broken or how this fixes it.

3) Function graph tracing on 3.9.0-rc6 compiled with gcc-4.7.0 works fine for me without this. So I see no need to clog up the make files with a rats nest of ifdef

Without more information about why this is needed, I would have to say NAK.

David Daney

Quoted 27 lines
---
  arch/mips/Makefile |    9 +++++++++
  1 file changed, 9 insertions(+)
arch/mips/Makefile +9 -0
index 6f7978f..8befe31 100644
@@ -119,6 +119,15 @@ cflags-$(CONFIG_SB1XXX_CORELIS)	+= $(call cc-option,-mno-sched-prolog) \
  				   -fno-omit-frame-pointer
 
  #
+# FTrace depended compiler options, currently only needed by MIPS64/OCTEON2.
+#
+ifdef CONFIG_64BIT
+ifdef CONFIG_CAVIUM_OCTEON2
+cflags-$(CONFIG_FUNCTION_TRACER) += $(call cc-option,-fno-omit-frame-pointer)
+endif
+endif
+
+#
  # CPU-dependent compiler/assembler options for optimization.
  #
  cflags-$(CONFIG_CPU_R3000)	+= -march=r3000
#2 lore raw

Hi,

Quoted 26 lines · David Daney
Quoted 22 lines · Wladislav Wiebe

From: Wladislav Wiebe <[email protected]>

Function tracing is broken due to removal of selecting FRAME_POINTER with FUNCTION_TRACER as result of commit: b732d439cb43336cd6d7e804ecb2c81193ef63b0

Latest commit ad8c396936e328f5344e1881afde9e28d5f2045f "MIPS: Unbreak function tracer for 64-bit kernel." fixes just the early startup hang, but on MIPS64/CAVIUM_OCTEON2 are still random printk recursion bugs which cause also Kernel hangs, especially on late startup phase when network drivers get loaded. This patch enable for CAVIUM_OCTEON2/64 Bit architecture -fno-omit-frame-pointer cflag when FUNCTION_TRACER get enabled. This will fix random Kernel hangs with "BUG: recent printk recursion!" from linux/kernel/printk.c.

Maybe there exist a other solution in mcount handling, since in the commit message from Al Cooper is mentioned that "MIPS frame pointers are generally considered to be useless because they cannot be used to unwind the stack. Unfortunately the MIPS function tracing code has bugs that are masked by the use of frame pointers. This commit fixes the bugs so that MIPS frame pointers don't need to be enabled."

Quoted 2 lines

But this is just a solution for MIPS32 - on a symmetric multiprocessing @MIPS64/CAVIUM_OCTEON2 it doesn't work properly.

Quoted 7 lines

There are a couple of problems that I see with this patch:

1) It doesn't handle non-OCTEON2. Surely other 64-bit targets are effected as well

2) You don't say how it is broken or how this fixes it.

3) Function graph tracing on 3.9.0-rc6 compiled with gcc-4.7.0 works fine for me without this. So I see no need to clog up the make files with a rats nest of ifdef

well, didn't cross checked with gcc-4.7.0 (currently using gcc-4.3). Will do so and get back if problem still visible.

Thanks!

Quoted 33 lines

Without more information about why this is needed, I would have to say NAK.

David Daney

Quoted 27 lines
---
  arch/mips/Makefile |    9 +++++++++
  1 file changed, 9 insertions(+)
arch/mips/Makefile +9 -0
index 6f7978f..8befe31 100644
@@ -119,6 +119,15 @@ cflags-$(CONFIG_SB1XXX_CORELIS)    += $(call cc-option,-mno-sched-prolog) \
                     -fno-omit-frame-pointer
 
  #
+# FTrace depended compiler options, currently only needed by MIPS64/OCTEON2.
+#
+ifdef CONFIG_64BIT
+ifdef CONFIG_CAVIUM_OCTEON2
+cflags-$(CONFIG_FUNCTION_TRACER) += $(call cc-option,-fno-omit-frame-pointer)
+endif
+endif
+
+#
  # CPU-dependent compiler/assembler options for optimization.
  #
  cflags-$(CONFIG_CPU_R3000)    += -march=r3000