From: Judith Lebzelter <judith@osdl.org>
To: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Judith Lebzelter <judith@osdl.org>,
paulus@samba.org, linuxppc-dev@ozlabs.org,
linux-kernel@vger.kernel.org, Andrew Morton <akpm@osdl.org>
Subject: Re: [PATCH] use-generic-bug-for-ppc resubmitted
Date: Wed, 4 Oct 2006 16:29:27 -0700 [thread overview]
Message-ID: <20061004232927.GI665@shell0.pdx.osdl.net> (raw)
In-Reply-To: <45241659.301@goop.org>
On Wed, Oct 04, 2006 at 01:15:21PM -0700, Jeremy Fitzhardinge wrote:
> Judith Lebzelter wrote:
> >Index: linux/arch/ppc/kernel/traps.c
> >===================================================================
> >--- linux.orig/arch/ppc/kernel/traps.c 2006-10-03
> >16:11:26.461653713 -0700
> >+++ linux/arch/ppc/kernel/traps.c 2006-10-04 10:00:21.198907987 -0700
> >@@ -28,6 +28,7 @@
> > #include <linux/init.h>
> > #include <linux/module.h>
> > #include <linux/prctl.h>
> >+#include <linux/bug.h>
> >
> > #include <asm/pgtable.h>
> > #include <asm/uaccess.h>
> >@@ -568,55 +569,9 @@
> > */
> > extern struct bug_entry __start___bug_table[], __stop___bug_table[];
> >
> >-#ifndef CONFIG_MODULES
> >-#define module_find_bug(x) NULL
> >-#endif
> >
> Looks like you need to delete a bit more here - the extern struct
> bug_entry, and the comment above.
> J
Here is the generic bug ppc patch with the suggested change. It compiles
without error.
Signed-off-by: Judith Lebzelter <judith@osdl.org>
---
arch/ppc/kernel/traps.c
arch/ppc/Kconfig
Index: linux/arch/ppc/Kconfig
===================================================================
--- linux.orig/arch/ppc/Kconfig 2006-10-03 16:11:26.000000000 -0700
+++ linux/arch/ppc/Kconfig 2006-10-03 17:10:09.000000000 -0700
@@ -52,6 +52,11 @@
bool
default y
+config GENERIC_BUG
+ bool
+ default y
+ depends on BUG
+
source "init/Kconfig"
menu "Processor"
Index: linux/arch/ppc/kernel/traps.c
===================================================================
--- linux.orig/arch/ppc/kernel/traps.c 2006-10-03 16:11:26.000000000 -0700
+++ linux/arch/ppc/kernel/traps.c 2006-10-04 15:37:46.674644563 -0700
@@ -28,6 +28,7 @@
#include <linux/init.h>
#include <linux/module.h>
#include <linux/prctl.h>
+#include <linux/bug.h>
#include <asm/pgtable.h>
#include <asm/uaccess.h>
@@ -559,64 +560,9 @@
}
}
-/*
- * Look through the list of trap instructions that are used for BUG(),
- * BUG_ON() and WARN_ON() and see if we hit one. At this point we know
- * that the exception was caused by a trap instruction of some kind.
- * Returns 1 if we should continue (i.e. it was a WARN_ON) or 0
- * otherwise.
- */
-extern struct bug_entry __start___bug_table[], __stop___bug_table[];
-
-#ifndef CONFIG_MODULES
-#define module_find_bug(x) NULL
-#endif
-
-struct bug_entry *find_bug(unsigned long bugaddr)
-{
- struct bug_entry *bug;
-
- for (bug = __start___bug_table; bug < __stop___bug_table; ++bug)
- if (bugaddr == bug->bug_addr)
- return bug;
- return module_find_bug(bugaddr);
-}
-
-int check_bug_trap(struct pt_regs *regs)
+int is_valid_bugaddr(unsigned long addr)
{
- struct bug_entry *bug;
- unsigned long addr;
-
- if (regs->msr & MSR_PR)
- return 0; /* not in kernel */
- addr = regs->nip; /* address of trap instruction */
- if (addr < PAGE_OFFSET)
- return 0;
- bug = find_bug(regs->nip);
- if (bug == NULL)
- return 0;
- if (bug->line & BUG_WARNING_TRAP) {
- /* this is a WARN_ON rather than BUG/BUG_ON */
-#ifdef CONFIG_XMON
- xmon_printf(KERN_ERR "Badness in %s at %s:%ld\n",
- bug->function, bug->file,
- bug->line & ~BUG_WARNING_TRAP);
-#endif /* CONFIG_XMON */
- printk(KERN_ERR "Badness in %s at %s:%ld\n",
- bug->function, bug->file,
- bug->line & ~BUG_WARNING_TRAP);
- dump_stack();
- return 1;
- }
-#ifdef CONFIG_XMON
- xmon_printf(KERN_CRIT "kernel BUG in %s at %s:%ld!\n",
- bug->function, bug->file, bug->line);
- xmon(regs);
-#endif /* CONFIG_XMON */
- printk(KERN_CRIT "kernel BUG in %s at %s:%ld!\n",
- bug->function, bug->file, bug->line);
-
- return 0;
+ return addr >= PAGE_OFFSET;
}
void program_check_exception(struct pt_regs *regs)
@@ -671,7 +617,9 @@
/* trap exception */
if (debugger_bpt(regs))
return;
- if (check_bug_trap(regs)) {
+
+ if (!(regs->msr & MSR_PR) && /* not user-mode */
+ report_bug(regs->nip) == BUG_TRAP_TYPE_WARN) {
regs->nip += 4;
return;
}
prev parent reply other threads:[~2006-10-04 23:29 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-04 18:49 [PATCH] use-generic-bug-for-ppc Judith Lebzelter
2006-10-04 20:15 ` Jeremy Fitzhardinge
2006-10-04 23:29 ` Judith Lebzelter [this message]
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=20061004232927.GI665@shell0.pdx.osdl.net \
--to=judith@osdl.org \
--cc=akpm@osdl.org \
--cc=jeremy@goop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=paulus@samba.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox