public inbox for linux-ia64@vger.kernel.org
 help / color / mirror / Atom feed
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


  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