From: Alexander van Heukelum <heukelum@mailshack.com>
To: Neil Horman <nhorman@tuxdriver.com>
Cc: Alexander van Heukelum <heukelum@fastmail.fm>,
akpm@linux-foundation.org, kexec@lists.infradead.org,
linux-kernel@vger.kernel.org, hbabu@us.ibm.com, mingo@redhat.com,
ebiederm@xmission.com, hpa@zytor.com, Ingo Molnar <mingo@elte.hu>,
tglx@linutronix.de, vgoyal@redhat.com
Subject: [PATCH] x86, dumpstack: make die and die_nmi equal
Date: Mon, 20 Oct 2008 17:11:06 +0200 [thread overview]
Message-ID: <20081020151106.GA26034@mailshack.com> (raw)
In-Reply-To: <20081020150834.GA26018@mailshack.com>
Use the x86_64 version of die() and die_nmi() on i386 too.
Changes to the original x86_64-version have no influence
on the generated code:
- whitespace, comments
- use user_mode_vm() instead of user_mode()
Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>
---
arch/x86/kernel/dumpstack_32.c | 40 ++++++++++++++--------------------------
arch/x86/kernel/dumpstack_64.c | 9 +++++++--
2 files changed, 21 insertions(+), 28 deletions(-)
diff --git a/arch/x86/kernel/dumpstack_32.c b/arch/x86/kernel/dumpstack_32.c
index e45952b..6f00938 100644
--- a/arch/x86/kernel/dumpstack_32.c
+++ b/arch/x86/kernel/dumpstack_32.c
@@ -377,52 +377,40 @@ void die(const char *str, struct pt_regs *regs, long err)
{
unsigned long flags = oops_begin();
- if (die_nest_count < 3) {
+ if (!user_mode_vm(regs))
report_bug(regs->ip, regs);
- if (__die(str, regs, err))
- regs = NULL;
- } else {
- printk(KERN_EMERG "Recursive die() failure, output suppressed\n");
- }
+ if (__die(str, regs, err))
+ regs = NULL;
oops_end(flags, regs, SIGSEGV);
}
-static DEFINE_SPINLOCK(nmi_print_lock);
-
void notrace __kprobes
die_nmi(char *str, struct pt_regs *regs, int do_panic)
{
+ unsigned long flags;
+
if (notify_die(DIE_NMIWATCHDOG, str, regs, 0, 2, SIGINT) == NOTIFY_STOP)
return;
- spin_lock(&nmi_print_lock);
+ flags = oops_begin();
/*
* We are in trouble anyway, lets at least try
- * to get a message out:
+ * to get a message out.
*/
- bust_spinlocks(1);
printk(KERN_EMERG "%s", str);
printk(" on CPU%d, ip %08lx, registers:\n",
smp_processor_id(), regs->ip);
show_registers(regs);
- if (do_panic)
- panic("Non maskable interrupt");
- console_silent();
- spin_unlock(&nmi_print_lock);
- bust_spinlocks(0);
-
- /*
- * If we are in kernel we are probably nested up pretty bad
- * and might aswell get out now while we still can:
- */
- if (!user_mode_vm(regs)) {
- current->thread.trap_no = 2;
+ if (kexec_should_crash(current))
crash_kexec(regs);
- }
-
- do_exit(SIGSEGV);
+ if (do_panic || panic_on_oops)
+ panic("Non maskable interrupt");
+ oops_end(flags, NULL, SIGBUS);
+ nmi_exit();
+ local_irq_enable();
+ do_exit(SIGBUS);
}
static int __init oops_setup(char *s)
diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c
index cd7b46b..dbcca05 100644
--- a/arch/x86/kernel/dumpstack_64.c
+++ b/arch/x86/kernel/dumpstack_64.c
@@ -508,19 +508,24 @@ int __kprobes __die(const char *str, struct pt_regs *regs, long err)
return 0;
}
+/*
+ * This is gone through when something in the kernel has done something bad
+ * and is about to be terminated:
+ */
void die(const char *str, struct pt_regs *regs, long err)
{
unsigned long flags = oops_begin();
- if (!user_mode(regs))
+ if (!user_mode_vm(regs))
report_bug(regs->ip, regs);
if (__die(str, regs, err))
regs = NULL;
+
oops_end(flags, regs, SIGSEGV);
}
-notrace __kprobes void
+void notrace __kprobes
die_nmi(char *str, struct pt_regs *regs, int do_panic)
{
unsigned long flags;
--
1.5.4.3
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
WARNING: multiple messages have this Message-ID (diff)
From: Alexander van Heukelum <heukelum@mailshack.com>
To: Neil Horman <nhorman@tuxdriver.com>
Cc: Ingo Molnar <mingo@elte.hu>,
kexec@lists.infradead.org, linux-kernel@vger.kernel.org,
vgoyal@redhat.com, hbabu@us.ibm.com, ebiederm@xmission.com,
tglx@linutronix.de, mingo@redhat.com, hpa@zytor.com,
akpm@linux-foundation.org,
Alexander van Heukelum <heukelum@fastmail.fm>
Subject: [PATCH] x86, dumpstack: make die and die_nmi equal
Date: Mon, 20 Oct 2008 17:11:06 +0200 [thread overview]
Message-ID: <20081020151106.GA26034@mailshack.com> (raw)
In-Reply-To: <20081020150834.GA26018@mailshack.com>
Use the x86_64 version of die() and die_nmi() on i386 too.
Changes to the original x86_64-version have no influence
on the generated code:
- whitespace, comments
- use user_mode_vm() instead of user_mode()
Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>
---
arch/x86/kernel/dumpstack_32.c | 40 ++++++++++++++--------------------------
arch/x86/kernel/dumpstack_64.c | 9 +++++++--
2 files changed, 21 insertions(+), 28 deletions(-)
diff --git a/arch/x86/kernel/dumpstack_32.c b/arch/x86/kernel/dumpstack_32.c
index e45952b..6f00938 100644
--- a/arch/x86/kernel/dumpstack_32.c
+++ b/arch/x86/kernel/dumpstack_32.c
@@ -377,52 +377,40 @@ void die(const char *str, struct pt_regs *regs, long err)
{
unsigned long flags = oops_begin();
- if (die_nest_count < 3) {
+ if (!user_mode_vm(regs))
report_bug(regs->ip, regs);
- if (__die(str, regs, err))
- regs = NULL;
- } else {
- printk(KERN_EMERG "Recursive die() failure, output suppressed\n");
- }
+ if (__die(str, regs, err))
+ regs = NULL;
oops_end(flags, regs, SIGSEGV);
}
-static DEFINE_SPINLOCK(nmi_print_lock);
-
void notrace __kprobes
die_nmi(char *str, struct pt_regs *regs, int do_panic)
{
+ unsigned long flags;
+
if (notify_die(DIE_NMIWATCHDOG, str, regs, 0, 2, SIGINT) == NOTIFY_STOP)
return;
- spin_lock(&nmi_print_lock);
+ flags = oops_begin();
/*
* We are in trouble anyway, lets at least try
- * to get a message out:
+ * to get a message out.
*/
- bust_spinlocks(1);
printk(KERN_EMERG "%s", str);
printk(" on CPU%d, ip %08lx, registers:\n",
smp_processor_id(), regs->ip);
show_registers(regs);
- if (do_panic)
- panic("Non maskable interrupt");
- console_silent();
- spin_unlock(&nmi_print_lock);
- bust_spinlocks(0);
-
- /*
- * If we are in kernel we are probably nested up pretty bad
- * and might aswell get out now while we still can:
- */
- if (!user_mode_vm(regs)) {
- current->thread.trap_no = 2;
+ if (kexec_should_crash(current))
crash_kexec(regs);
- }
-
- do_exit(SIGSEGV);
+ if (do_panic || panic_on_oops)
+ panic("Non maskable interrupt");
+ oops_end(flags, NULL, SIGBUS);
+ nmi_exit();
+ local_irq_enable();
+ do_exit(SIGBUS);
}
static int __init oops_setup(char *s)
diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c
index cd7b46b..dbcca05 100644
--- a/arch/x86/kernel/dumpstack_64.c
+++ b/arch/x86/kernel/dumpstack_64.c
@@ -508,19 +508,24 @@ int __kprobes __die(const char *str, struct pt_regs *regs, long err)
return 0;
}
+/*
+ * This is gone through when something in the kernel has done something bad
+ * and is about to be terminated:
+ */
void die(const char *str, struct pt_regs *regs, long err)
{
unsigned long flags = oops_begin();
- if (!user_mode(regs))
+ if (!user_mode_vm(regs))
report_bug(regs->ip, regs);
if (__die(str, regs, err))
regs = NULL;
+
oops_end(flags, regs, SIGSEGV);
}
-notrace __kprobes void
+void notrace __kprobes
die_nmi(char *str, struct pt_regs *regs, int do_panic)
{
unsigned long flags;
--
1.5.4.3
next prev parent reply other threads:[~2008-10-20 15:55 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-17 21:00 [PATCH] kexec: fix hang on i386 when panic occurs while console_sem is held Neil Horman
2008-10-17 21:00 ` Neil Horman
2008-10-20 12:13 ` Ingo Molnar
2008-10-20 12:13 ` Ingo Molnar
2008-10-20 13:42 ` Neil Horman
2008-10-20 13:42 ` Neil Horman
2008-10-20 15:07 ` [PATCH] x86, dumpstack: some more unification Alexander van Heukelum
2008-10-20 15:07 ` Alexander van Heukelum
2008-10-20 15:08 ` [PATCH] x86: make oops_begin and oops_end equal Alexander van Heukelum
2008-10-20 15:08 ` Alexander van Heukelum
2008-10-20 15:11 ` Alexander van Heukelum [this message]
2008-10-20 15:11 ` [PATCH] x86, dumpstack: make die and die_nmi equal Alexander van Heukelum
2008-10-21 14:59 ` Neil Horman
2008-10-21 14:59 ` Neil Horman
2008-10-22 10:00 ` [PATCH 0/7] x86, dumpstack: unify oops_begin, oops_end, die_nmi and die Alexander van Heukelum
2008-10-22 10:00 ` Alexander van Heukelum
2008-10-22 10:00 ` [PATCH 1/7] i386, dumpstack: Move crash_kexec before bust_spinlocks(0) in oops_end Alexander van Heukelum
2008-10-22 10:00 ` Alexander van Heukelum
2008-10-22 10:00 ` [PATCH 2/7] x86, dumpstack: let signr=0 signal no do_exit Alexander van Heukelum
2008-10-22 10:00 ` Alexander van Heukelum
2008-10-22 10:00 ` [PATCH 3/7] x86_64, dumpstack: move kexec_crash from __die to oops_end Alexander van Heukelum
2008-10-22 10:00 ` Alexander van Heukelum
2008-10-22 10:00 ` [PATCH 4/7] x86, dumpstack: always call oops_exit from oops_end Alexander van Heukelum
2008-10-22 10:00 ` Alexander van Heukelum
2008-10-22 10:00 ` [PATCH 5/7] i386, dumpstack: use x86_64's method to account die_nest_count Alexander van Heukelum
2008-10-22 10:00 ` Alexander van Heukelum
2008-10-22 10:00 ` [PATCH 6/7] i386, dumpstack: use oops_begin/oops_end in die_nmi Alexander van Heukelum
2008-10-22 10:00 ` Alexander van Heukelum
2008-10-22 10:00 ` [PATCH 7/7] i386, dumpstack: unify die() Alexander van Heukelum
2008-10-22 10:00 ` Alexander van Heukelum
2008-10-22 13:37 ` Neil Horman
2008-10-22 13:37 ` Neil Horman
2008-10-22 12:36 ` [PATCH 6/7] i386, dumpstack: use oops_begin/oops_end in die_nmi Neil Horman
2008-10-22 12:36 ` Neil Horman
2008-10-22 11:18 ` [PATCH 5/7] i386, dumpstack: use x86_64's method to account die_nest_count Neil Horman
2008-10-22 11:18 ` Neil Horman
2008-10-22 11:14 ` [PATCH 4/7] x86, dumpstack: always call oops_exit from oops_end Neil Horman
2008-10-22 11:14 ` Neil Horman
2008-10-22 11:11 ` [PATCH 3/7] x86_64, dumpstack: move kexec_crash from __die to oops_end Neil Horman
2008-10-22 11:11 ` Neil Horman
2008-10-22 11:01 ` [PATCH 2/7] x86, dumpstack: let signr=0 signal no do_exit Neil Horman
2008-10-22 11:01 ` Neil Horman
2008-10-22 10:49 ` [PATCH 1/7] i386, dumpstack: Move crash_kexec before bust_spinlocks(0) in oops_end Neil Horman
2008-10-22 10:49 ` Neil Horman
2008-10-21 14:45 ` [PATCH] x86: make oops_begin and oops_end equal Neil Horman
2008-10-21 14:45 ` Neil Horman
2008-10-22 10:18 ` Alexander van Heukelum
2008-10-22 10:18 ` Alexander van Heukelum
2008-10-22 10:45 ` Neil Horman
2008-10-22 10:45 ` Neil Horman
2008-10-22 12:02 ` Ingo Molnar
2008-10-22 12:02 ` Ingo Molnar
2008-10-22 19:19 ` Neil Horman
2008-10-22 19:19 ` Neil Horman
2008-10-23 9:22 ` Alexander van Heukelum
2008-10-23 9:22 ` Alexander van Heukelum
2008-10-20 16:51 ` [PATCH] x86, dumpstack: some more unification Neil Horman
2008-10-20 16:51 ` Neil Horman
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=20081020151106.GA26034@mailshack.com \
--to=heukelum@mailshack.com \
--cc=akpm@linux-foundation.org \
--cc=ebiederm@xmission.com \
--cc=hbabu@us.ibm.com \
--cc=heukelum@fastmail.fm \
--cc=hpa@zytor.com \
--cc=kexec@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=mingo@redhat.com \
--cc=nhorman@tuxdriver.com \
--cc=tglx@linutronix.de \
--cc=vgoyal@redhat.com \
/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 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.