From: Jay Lan <jlan@sgi.com>
To: linux-ia64@vger.kernel.org
Subject: Re: [PATCH 1/2] ia64 kdump: add kdump_on_fatal_mca
Date: Tue, 08 Apr 2008 17:36:10 +0000 [thread overview]
Message-ID: <47FBAD0A.5080701@sgi.com> (raw)
In-Reply-To: <47FAF533.8010707@jp.fujitsu.com>
Hidetoshi Seto wrote:
> While it is convenient that we can invoke kdump by asserting INIT
> via button on chassis etc., there are some situations that invoking
> kdump on fatal MCA is not welcomed rather than rebooting fast without
> dump.
>
> This patch adds a new flag 'kdump_on_fatal_mca' that is independent
> from 'kdump_on_init' currently available. Adding this flag enable
> us to turning on/off of kdump depend on the event, INIT and/or fatal
> MCA.
>
> Thanks,
> H.Seto
>
> Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
>
> ---
> arch/ia64/kernel/crash.c | 31 +++++++++++++++++++++++--------
> arch/ia64/kernel/mca.c | 6 +-----
> 2 files changed, 24 insertions(+), 13 deletions(-)
>
> Index: GIT-torvalds/arch/ia64/kernel/crash.c
> =================================> --- GIT-torvalds.orig/arch/ia64/kernel/crash.c
> +++ GIT-torvalds/arch/ia64/kernel/crash.c
> @@ -24,6 +24,7 @@ int kdump_status[NR_CPUS];
> static atomic_t kdump_cpu_frozen;
> atomic_t kdump_in_progress;
> static int kdump_on_init = 1;
> +static int kdump_on_fatal_mca = 0;
I think kdump_on_fatal_mca should be set to 1 by default. Fatal
mca is exactly the case where we need a dump to analyze the problem.
Thanhks,
- jay
>
> static inline Elf64_Word
> *append_elf_note(Elf64_Word *buf, char *name, unsigned type, void *data,
> @@ -148,7 +149,7 @@ kdump_init_notifier(struct notifier_bloc
> struct ia64_mca_notify_die *nd;
> struct die_args *args = data;
>
> - if (!kdump_on_init)
> + if (!kdump_on_init && !kdump_on_fatal_mca)
> return NOTIFY_DONE;
>
> if (!ia64_kimage) {
> @@ -174,11 +175,14 @@ kdump_init_notifier(struct notifier_bloc
>
> switch (val) {
> case DIE_INIT_MONARCH_PROCESS:
> - atomic_set(&kdump_in_progress, 1);
> - *(nd->monarch_cpu) = -1;
> + if (kdump_on_init) {
> + atomic_set(&kdump_in_progress, 1);
> + *(nd->monarch_cpu) = -1;
> + }
> break;
> case DIE_INIT_MONARCH_LEAVE:
> - machine_kdump_on_init();
> + if (kdump_on_init)
> + machine_kdump_on_init();
> break;
> case DIE_INIT_SLAVE_LEAVE:
> if (atomic_read(&kdump_in_progress))
> @@ -189,16 +193,19 @@ kdump_init_notifier(struct notifier_bloc
> unw_init_running(kdump_cpu_freeze, NULL);
> break;
> case DIE_MCA_MONARCH_LEAVE:
> - /* die_register->signr indicate if MCA is recoverable */
> - if (!args->signr)
> + /* die_register->signr indicate if MCA is recoverable */
> + if (kdump_on_fatal_mca && !args->signr) {
> + atomic_set(&kdump_in_progress, 1);
> + *(nd->monarch_cpu) = -1;
> machine_kdump_on_init();
> + }
> break;
> }
> return NOTIFY_DONE;
> }
>
> #ifdef CONFIG_SYSCTL
> -static ctl_table kdump_on_init_table[] = {
> +static ctl_table kdump_ctl_table[] = {
> {
> .ctl_name = CTL_UNNUMBERED,
> .procname = "kdump_on_init",
> @@ -207,6 +214,14 @@ static ctl_table kdump_on_init_table[] > .mode = 0644,
> .proc_handler = &proc_dointvec,
> },
> + {
> + .ctl_name = CTL_UNNUMBERED,
> + .procname = "kdump_on_fatal_mca",
> + .data = &kdump_on_fatal_mca,
> + .maxlen = sizeof(int),
> + .mode = 0644,
> + .proc_handler = &proc_dointvec,
> + },
> { .ctl_name = 0 }
> };
>
> @@ -215,7 +230,7 @@ static ctl_table sys_table[] = {
> .ctl_name = CTL_KERN,
> .procname = "kernel",
> .mode = 0555,
> - .child = kdump_on_init_table,
> + .child = kdump_ctl_table,
> },
> { .ctl_name = 0 }
> };
> Index: GIT-torvalds/arch/ia64/kernel/mca.c
> =================================> --- GIT-torvalds.orig/arch/ia64/kernel/mca.c
> +++ GIT-torvalds/arch/ia64/kernel/mca.c
> @@ -1266,16 +1266,12 @@ ia64_mca_handler(struct pt_regs *regs, s
> } else {
> /* Dump buffered message to console */
> ia64_mlogbuf_finish(1);
> -#ifdef CONFIG_KEXEC
> - atomic_set(&kdump_in_progress, 1);
> - monarch_cpu = -1;
> -#endif
> }
> +
> if (notify_die(DIE_MCA_MONARCH_LEAVE, "MCA", regs, (long)&nd, 0, recover)
> = NOTIFY_STOP)
> ia64_mca_spin(__func__);
>
> -
> if (atomic_dec_return(&mca_count) > 0) {
> int i;
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2008-04-08 17:36 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-08 4:31 [PATCH 1/2] ia64 kdump: add kdump_on_fatal_mca Hidetoshi Seto
2008-04-08 17:36 ` Jay Lan [this message]
2008-04-08 17:51 ` Luck, Tony
2008-04-08 18:19 ` Jay Lan
2008-04-08 18:21 ` Russ Anderson
2008-04-08 18:34 ` Jay Lan
2008-04-08 18:54 ` Luck, Tony
2008-04-09 0:36 ` Hidetoshi Seto
2008-04-09 21:59 ` Luck, Tony
2008-04-09 23:01 ` Bjorn Helgaas
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=47FBAD0A.5080701@sgi.com \
--to=jlan@sgi.com \
--cc=linux-ia64@vger.kernel.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