LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH] x86: Introduce __die helper to X86_32
@ 2008-01-09 0:48 Harvey Harrison
2008-01-09 0:53 ` Harvey Harrison
0 siblings, 1 reply; 4+ messages in thread
From: Harvey Harrison @ 2008-01-09 0:48 UTC (permalink / raw)
To: Ingo Molnar; +Cc: LKML, H. Peter Anvin, Thomas Gleixner
Small step towards unifying traps_32|64.c. No functional
changes. Pull out a small helper from an if() statement
in die().
Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
---
Ingo, I know this will have checkpatch problems, doing code
movement first, will do the cleanup as a final step once
we get to the end of unifying the files.
arch/x86/kernel/traps_32.c | 76 ++++++++++++++++++++++++-------------------
1 files changed, 42 insertions(+), 34 deletions(-)
diff --git a/arch/x86/kernel/traps_32.c b/arch/x86/kernel/traps_32.c
index ac8fd36..edd0750 100644
--- a/arch/x86/kernel/traps_32.c
+++ b/arch/x86/kernel/traps_32.c
@@ -352,6 +352,45 @@ int is_valid_bugaddr(unsigned long ip)
return ud2 == 0x0b0f;
}
+static int die_counter;
+
+static int __die(const char * str, struct pt_regs * regs, long err)
+{
+ unsigned long sp;
+ unsigned short ss;
+
+ printk(KERN_EMERG "%s: %04lx [#%d] ", str, err & 0xffff, ++die_counter);
+#ifdef CONFIG_PREEMPT
+ printk("PREEMPT ");
+#endif
+#ifdef CONFIG_SMP
+ printk("SMP ");
+#endif
+#ifdef CONFIG_DEBUG_PAGEALLOC
+ printk("DEBUG_PAGEALLOC");
+#endif
+ printk("\n");
+
+ if (notify_die(DIE_OOPS, str, regs, err,
+ current->thread.trap_no, SIGSEGV) !=
+ NOTIFY_STOP) {
+ show_registers(regs);
+ /* Executive summary in case the oops scrolled away */
+ sp = (unsigned long) (®s->sp);
+ savesegment(ss, ss);
+ if (user_mode(regs)) {
+ sp = regs->sp;
+ ss = regs->ss & 0xffff;
+ }
+ printk(KERN_EMERG "EIP: [<%08lx>] ", regs->ip);
+ print_symbol("%s", regs->ip);
+ printk(" SS:ESP %04x:%08lx\n", ss, sp);
+ return 0;
+ } else {
+ return 1;
+ }
+}
+
/*
* This is gone through when something in the kernel has done something bad and
* is about to be terminated.
@@ -367,7 +406,6 @@ void die(const char * str, struct pt_regs * regs, long err)
.lock_owner = -1,
.lock_owner_depth = 0
};
- static int die_counter;
unsigned long flags;
oops_enter();
@@ -383,43 +421,13 @@ void die(const char * str, struct pt_regs * regs, long err)
raw_local_irq_save(flags);
if (++die.lock_owner_depth < 3) {
- unsigned long sp;
- unsigned short ss;
-
report_bug(regs->ip, regs);
- printk(KERN_EMERG "%s: %04lx [#%d] ", str, err & 0xffff,
- ++die_counter);
-#ifdef CONFIG_PREEMPT
- printk("PREEMPT ");
-#endif
-#ifdef CONFIG_SMP
- printk("SMP ");
-#endif
-#ifdef CONFIG_DEBUG_PAGEALLOC
- printk("DEBUG_PAGEALLOC");
-#endif
- printk("\n");
-
- if (notify_die(DIE_OOPS, str, regs, err,
- current->thread.trap_no, SIGSEGV) !=
- NOTIFY_STOP) {
- show_registers(regs);
- /* Executive summary in case the oops scrolled away */
- sp = (unsigned long) (®s->sp);
- savesegment(ss, ss);
- if (user_mode(regs)) {
- sp = regs->sp;
- ss = regs->ss & 0xffff;
- }
- printk(KERN_EMERG "EIP: [<%08lx>] ", regs->ip);
- print_symbol("%s", regs->ip);
- printk(" SS:ESP %04x:%08lx\n", ss, sp);
- }
- else
+ if (__die(str, regs, err))
regs = NULL;
- } else
+ } else {
printk(KERN_EMERG "Recursive die() failure, output suppressed\n");
+ }
bust_spinlocks(0);
die.lock_owner = -1;
--
1.5.4.rc2.1164.g6451
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] x86: Introduce __die helper to X86_32
2008-01-09 0:48 [PATCH] x86: Introduce __die helper to X86_32 Harvey Harrison
@ 2008-01-09 0:53 ` Harvey Harrison
0 siblings, 0 replies; 4+ messages in thread
From: Harvey Harrison @ 2008-01-09 0:53 UTC (permalink / raw)
To: Ingo Molnar; +Cc: LKML, H. Peter Anvin, Thomas Gleixner
On Tue, 2008-01-08 at 16:48 -0800, Harvey Harrison wrote:
> Small step towards unifying traps_32|64.c. No functional
> changes. Pull out a small helper from an if() statement
> in die().
>
> Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
> ---
> Ingo, I know this will have checkpatch problems, doing code
> movement first, will do the cleanup as a final step once
> we get to the end of unifying the files.
>
Sorry, sent the wrong version, will not compile. Will follow up.
Harvey
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] x86: Introduce __die helper to X86_32
@ 2008-01-09 1:18 Harvey Harrison
2008-01-09 16:13 ` Ingo Molnar
0 siblings, 1 reply; 4+ messages in thread
From: Harvey Harrison @ 2008-01-09 1:18 UTC (permalink / raw)
To: Ingo Molnar; +Cc: LKML, Thomas Gleixner, H. Peter Anvin
Small step towards unifying traps_32|64.c. No functional
changes. Pull out a small helper from an if() statement
in die().
Marked as __kprobes as eventually we will want to call this
from do_page_fault similar to how X86_64 does it.
Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
---
arch/x86/kernel/traps_32.c | 76 ++++++++++++++++++++++++-------------------
1 files changed, 42 insertions(+), 34 deletions(-)
diff --git a/arch/x86/kernel/traps_32.c b/arch/x86/kernel/traps_32.c
index ac8fd36..5f2b38e 100644
--- a/arch/x86/kernel/traps_32.c
+++ b/arch/x86/kernel/traps_32.c
@@ -352,6 +352,45 @@ int is_valid_bugaddr(unsigned long ip)
return ud2 == 0x0b0f;
}
+static int die_counter;
+
+int __kprobes __die(const char * str, struct pt_regs * regs, long err)
+{
+ unsigned long sp;
+ unsigned short ss;
+
+ printk(KERN_EMERG "%s: %04lx [#%d] ", str, err & 0xffff, ++die_counter);
+#ifdef CONFIG_PREEMPT
+ printk("PREEMPT ");
+#endif
+#ifdef CONFIG_SMP
+ printk("SMP ");
+#endif
+#ifdef CONFIG_DEBUG_PAGEALLOC
+ printk("DEBUG_PAGEALLOC");
+#endif
+ printk("\n");
+
+ if (notify_die(DIE_OOPS, str, regs, err,
+ current->thread.trap_no, SIGSEGV) !=
+ NOTIFY_STOP) {
+ show_registers(regs);
+ /* Executive summary in case the oops scrolled away */
+ sp = (unsigned long) (®s->sp);
+ savesegment(ss, ss);
+ if (user_mode(regs)) {
+ sp = regs->sp;
+ ss = regs->ss & 0xffff;
+ }
+ printk(KERN_EMERG "EIP: [<%08lx>] ", regs->ip);
+ print_symbol("%s", regs->ip);
+ printk(" SS:ESP %04x:%08lx\n", ss, sp);
+ return 0;
+ } else {
+ return 1;
+ }
+}
+
/*
* This is gone through when something in the kernel has done something bad and
* is about to be terminated.
@@ -367,7 +406,6 @@ void die(const char * str, struct pt_regs * regs, long err)
.lock_owner = -1,
.lock_owner_depth = 0
};
- static int die_counter;
unsigned long flags;
oops_enter();
@@ -383,43 +421,13 @@ void die(const char * str, struct pt_regs * regs, long err)
raw_local_irq_save(flags);
if (++die.lock_owner_depth < 3) {
- unsigned long sp;
- unsigned short ss;
-
report_bug(regs->ip, regs);
- printk(KERN_EMERG "%s: %04lx [#%d] ", str, err & 0xffff,
- ++die_counter);
-#ifdef CONFIG_PREEMPT
- printk("PREEMPT ");
-#endif
-#ifdef CONFIG_SMP
- printk("SMP ");
-#endif
-#ifdef CONFIG_DEBUG_PAGEALLOC
- printk("DEBUG_PAGEALLOC");
-#endif
- printk("\n");
-
- if (notify_die(DIE_OOPS, str, regs, err,
- current->thread.trap_no, SIGSEGV) !=
- NOTIFY_STOP) {
- show_registers(regs);
- /* Executive summary in case the oops scrolled away */
- sp = (unsigned long) (®s->sp);
- savesegment(ss, ss);
- if (user_mode(regs)) {
- sp = regs->sp;
- ss = regs->ss & 0xffff;
- }
- printk(KERN_EMERG "EIP: [<%08lx>] ", regs->ip);
- print_symbol("%s", regs->ip);
- printk(" SS:ESP %04x:%08lx\n", ss, sp);
- }
- else
+ if (__die(str, regs, err))
regs = NULL;
- } else
+ } else {
printk(KERN_EMERG "Recursive die() failure, output suppressed\n");
+ }
bust_spinlocks(0);
die.lock_owner = -1;
--
1.5.4.rc2.1164.g6451
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] x86: Introduce __die helper to X86_32
2008-01-09 1:18 Harvey Harrison
@ 2008-01-09 16:13 ` Ingo Molnar
0 siblings, 0 replies; 4+ messages in thread
From: Ingo Molnar @ 2008-01-09 16:13 UTC (permalink / raw)
To: Harvey Harrison; +Cc: LKML, Thomas Gleixner, H. Peter Anvin
* Harvey Harrison <harvey.harrison@gmail.com> wrote:
> Small step towards unifying traps_32|64.c. No functional changes.
> Pull out a small helper from an if() statement in die().
>
> Marked as __kprobes as eventually we will want to call this from
> do_page_fault similar to how X86_64 does it.
thanks, applied.
Ingo
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2008-01-09 16:13 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-01-09 0:48 [PATCH] x86: Introduce __die helper to X86_32 Harvey Harrison
2008-01-09 0:53 ` Harvey Harrison
2008-01-09 1:18 Harvey Harrison
2008-01-09 16:13 ` Ingo Molnar
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).