linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] ARM: Print BUG instead of undefined instruction on BUG_ON()
@ 2012-01-16 17:07 Stephen Boyd
  2012-01-17 20:04 ` Simon Glass
  0 siblings, 1 reply; 2+ messages in thread
From: Stephen Boyd @ 2012-01-16 17:07 UTC (permalink / raw)
  To: linux-arm-kernel; +Cc: linux-kernel, Simon Glass

The ARM kernel uses undefined instructions to implement
BUG/BUG_ON(). This leads to problems where people don't read one
line above the Oops message and see the "kernel BUG at ..."
message and so they wrongly assume the kernel has hit an
undefined instruction.

Instead of printing:

 Internal error: Oops - undefined instruction: 0 [#1] PREEMPT SMP

print

 Internal error: Oops - BUG: 0 [#1] PREEMPT SMP

This should prevent people from thinking the BUG_ON was an
undefined instruction when it was actually intentional.

Cc: Simon Glass <sjg@chromium.org>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
---
 arch/arm/kernel/traps.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
index 99a5727..f84dfe6 100644
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -266,6 +266,7 @@ void die(const char *str, struct pt_regs *regs, int err)
 {
 	struct thread_info *thread = current_thread_info();
 	int ret;
+	enum bug_trap_type bug_type = BUG_TRAP_TYPE_NONE;
 
 	oops_enter();
 
@@ -273,7 +274,9 @@ void die(const char *str, struct pt_regs *regs, int err)
 	console_verbose();
 	bust_spinlocks(1);
 	if (!user_mode(regs))
-		report_bug(regs->ARM_pc, regs);
+		bug_type = report_bug(regs->ARM_pc, regs);
+	if (bug_type != BUG_TRAP_TYPE_NONE)
+		str = "Oops - BUG";
 	ret = __die(str, err, thread, regs);
 
 	if (regs && kexec_should_crash(thread->task))
-- 
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.


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

* Re: [PATCH] ARM: Print BUG instead of undefined instruction on BUG_ON()
  2012-01-16 17:07 [PATCH] ARM: Print BUG instead of undefined instruction on BUG_ON() Stephen Boyd
@ 2012-01-17 20:04 ` Simon Glass
  0 siblings, 0 replies; 2+ messages in thread
From: Simon Glass @ 2012-01-17 20:04 UTC (permalink / raw)
  To: Stephen Boyd; +Cc: linux-arm-kernel, linux-kernel

On Mon, Jan 16, 2012 at 9:07 AM, Stephen Boyd <sboyd@codeaurora.org> wrote:
> The ARM kernel uses undefined instructions to implement
> BUG/BUG_ON(). This leads to problems where people don't read one
> line above the Oops message and see the "kernel BUG at ..."
> message and so they wrongly assume the kernel has hit an
> undefined instruction.
>
> Instead of printing:
>
>  Internal error: Oops - undefined instruction: 0 [#1] PREEMPT SMP
>
> print
>
>  Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
>
> This should prevent people from thinking the BUG_ON was an
> undefined instruction when it was actually intentional.
>
> Cc: Simon Glass <sjg@chromium.org>
> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>

Tested on a Tegra20 system. I would like to adjust the backtrace
output slightly so will send a patch for that at the same time, since
we are in there.

Acked-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>

> ---
>  arch/arm/kernel/traps.c |    5 ++++-
>  1 files changed, 4 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
> index 99a5727..f84dfe6 100644
> --- a/arch/arm/kernel/traps.c
> +++ b/arch/arm/kernel/traps.c
> @@ -266,6 +266,7 @@ void die(const char *str, struct pt_regs *regs, int err)
>  {
>        struct thread_info *thread = current_thread_info();
>        int ret;
> +       enum bug_trap_type bug_type = BUG_TRAP_TYPE_NONE;
>
>        oops_enter();
>
> @@ -273,7 +274,9 @@ void die(const char *str, struct pt_regs *regs, int err)
>        console_verbose();
>        bust_spinlocks(1);
>        if (!user_mode(regs))
> -               report_bug(regs->ARM_pc, regs);
> +               bug_type = report_bug(regs->ARM_pc, regs);
> +       if (bug_type != BUG_TRAP_TYPE_NONE)
> +               str = "Oops - BUG";
>        ret = __die(str, err, thread, regs);
>
>        if (regs && kexec_should_crash(thread->task))
> --
> Sent by an employee of the Qualcomm Innovation Center, Inc.
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
>

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

end of thread, other threads:[~2012-01-17 20:04 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-01-16 17:07 [PATCH] ARM: Print BUG instead of undefined instruction on BUG_ON() Stephen Boyd
2012-01-17 20:04 ` Simon Glass

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).