From: Borislav Petkov <bp@alien8.de> To: Hidehiro Kawai <hidehiro.kawai.ez@hitachi.com> Cc: Jonathan Corbet <corbet@lwn.net>, Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@kernel.org>, "Eric W. Biederman" <ebiederm@xmission.com>, "H. Peter Anvin" <hpa@zytor.com>, Andrew Morton <akpm@linux-foundation.org>, Thomas Gleixner <tglx@linutronix.de>, Vivek Goyal <vgoyal@redhat.com>, Baoquan He <bhe@redhat.com>, linux-doc@vger.kernel.org, x86@kernel.org, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, Michal Hocko <mhocko@kernel.org>, Ingo Molnar <mingo@redhat.com>, Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Subject: Re: [V5 PATCH 4/4] x86/apic: Introduce apic_extnmi boot option Date: Wed, 25 Nov 2015 12:49:48 +0100 [thread overview] Message-ID: <20151125114948.GA4227@pd.tnic> (raw) In-Reply-To: <20151120093650.4285.94971.stgit@softrs> On Fri, Nov 20, 2015 at 06:36:50PM +0900, Hidehiro Kawai wrote: > This patch introduces new boot option, apic_extnmi: > > apic_extnmi={ bsp | all | none} > > The default value is "bsp" and this is the current behavior; only > BSP receives external NMI. "all" allows external NMIs to be > broadcast to all CPUs. This would raise the success rate of panic > on NMI when BSP hangs up in NMI context or the external NMI is > swallowed by other NMI handlers on BSP. If you specified "none", > any CPUs don't receive external NMIs. This is useful for dump > capture kernel so that it wouldn't be shot down while saving a > crash dump. > > V5: > - Rename the option from "noextnmi" to "apic_extnmi" > - Add apic_extnmi=all feature > - Fix the wrong documentation about "noextnmi" (apic_extnmi=none) > > Signed-off-by: Hidehiro Kawai <hidehiro.kawai.ez@hitachi.com> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: Ingo Molnar <mingo@redhat.com> > Cc: "H. Peter Anvin" <hpa@zytor.com> > Cc: Jonathan Corbet <corbet@lwn.net> > --- > Documentation/kernel-parameters.txt | 9 +++++++++ > arch/x86/include/asm/apic.h | 5 +++++ > arch/x86/kernel/apic/apic.c | 31 ++++++++++++++++++++++++++++++- > 3 files changed, 44 insertions(+), 1 deletion(-) > > diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt > index f8aae63..ceed3bc 100644 > --- a/Documentation/kernel-parameters.txt > +++ b/Documentation/kernel-parameters.txt > @@ -472,6 +472,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted. > Change the amount of debugging information output > when initialising the APIC and IO-APIC components. > > + apic_extnmi= [APIC,X86] External NMI delivery setting > + Format: { bsp (default) | all | none } > + bsp: External NMI is delivered to only CPU 0 only to > + all: External NMIs are broadcast to all CPUs as a > + backup of CPU 0 > + none: External NMI is masked for all CPUs. This is > + useful so that a dump capture kernel won't be > + shot down by NMI > + > autoconf= [IPV6] > See Documentation/networking/ipv6.txt. > > diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h > index 7f62ad4..c80f6b6 100644 > --- a/arch/x86/include/asm/apic.h > +++ b/arch/x86/include/asm/apic.h > @@ -23,6 +23,11 @@ > #define APIC_VERBOSE 1 > #define APIC_DEBUG 2 > > +/* Macros for apic_extnmi which controls external NMI masking */ > +#define APIC_EXTNMI_BSP 0 /* Default */ > +#define APIC_EXTNMI_ALL 1 > +#define APIC_EXTNMI_NONE 2 > + > /* > * Define the default level of output to be very little > * This can be turned up by using apic=verbose for more > diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c > index 2f69e3b..a2a8074 100644 > --- a/arch/x86/kernel/apic/apic.c > +++ b/arch/x86/kernel/apic/apic.c > @@ -82,6 +82,12 @@ physid_mask_t phys_cpu_present_map; > static unsigned int disabled_cpu_apicid __read_mostly = BAD_APICID; > > /* > + * This variable controls which CPUs receive external NMIs. By default, > + * external NMIs are delivered to only BSP. only to the BSP. > + */ > +static int apic_extnmi = APIC_EXTNMI_BSP; > + > +/* > * Map cpu index to physical APIC ID > */ > DEFINE_EARLY_PER_CPU_READ_MOSTLY(u16, x86_cpu_to_apicid, BAD_APICID); > @@ -1161,6 +1167,8 @@ void __init init_bsp_APIC(void) > value = APIC_DM_NMI; > if (!lapic_is_integrated()) /* 82489DX */ > value |= APIC_LVT_LEVEL_TRIGGER; > + if (apic_extnmi == APIC_EXTNMI_NONE) > + value |= APIC_LVT_MASKED; > apic_write(APIC_LVT1, value); > } > > @@ -1380,7 +1388,8 @@ void setup_local_APIC(void) > /* > * only the BP should see the LINT1 NMI signal, obviously. > */ That comment needs adjusting. > - if (!cpu) > + if ((!cpu && apic_extnmi != APIC_EXTNMI_NONE) || > + apic_extnmi == APIC_EXTNMI_ALL) > value = APIC_DM_NMI; > else > value = APIC_DM_NMI | APIC_LVT_MASKED; > @@ -2548,3 +2557,23 @@ static int __init apic_set_disabled_cpu_apicid(char *arg) > return 0; > } > early_param("disable_cpu_apicid", apic_set_disabled_cpu_apicid); > + > +static int __init apic_set_extnmi(char *arg) > +{ > + if (!arg) > + return -EINVAL; > + > + if (strcmp("all", arg) == 0) if (!strncmp("all", arg, 3)) ditto for the rest > + apic_extnmi = APIC_EXTNMI_ALL; > + else if (strcmp("none", arg) == 0) > + apic_extnmi = APIC_EXTNMI_NONE; > + else if (strcmp("bsp", arg) == 0) > + apic_extnmi = APIC_EXTNMI_BSP; > + else { > + pr_warn("Unknown external NMI delivery mode `%s' is ignored\n", s/is // Also, if there's no other delivery mode which makes sense, you can do: pr_warn("Unknown external NMI delivery mode `%s', defaulting to 'bsp'\n", arg); apic_extnmi = APIC_EXTNMI_BSP; Btw, you can let the pr_warn line be longer than 80 cols. And if you don't default, you need return -EINVAL; here. -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply.
WARNING: multiple messages have this Message-ID (diff)
From: Borislav Petkov <bp@alien8.de> To: Hidehiro Kawai <hidehiro.kawai.ez@hitachi.com> Cc: x86@kernel.org, Baoquan He <bhe@redhat.com>, Jonathan Corbet <corbet@lwn.net>, Peter Zijlstra <peterz@infradead.org>, linux-doc@vger.kernel.org, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, Michal Hocko <mhocko@kernel.org>, Ingo Molnar <mingo@redhat.com>, Thomas Gleixner <tglx@linutronix.de>, "Eric W. Biederman" <ebiederm@xmission.com>, "H. Peter Anvin" <hpa@zytor.com>, Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>, Andrew Morton <akpm@linux-foundation.org>, Ingo Molnar <mingo@kernel.org>, Vivek Goyal <vgoyal@redhat.com> Subject: Re: [V5 PATCH 4/4] x86/apic: Introduce apic_extnmi boot option Date: Wed, 25 Nov 2015 12:49:48 +0100 [thread overview] Message-ID: <20151125114948.GA4227@pd.tnic> (raw) In-Reply-To: <20151120093650.4285.94971.stgit@softrs> On Fri, Nov 20, 2015 at 06:36:50PM +0900, Hidehiro Kawai wrote: > This patch introduces new boot option, apic_extnmi: > > apic_extnmi={ bsp | all | none} > > The default value is "bsp" and this is the current behavior; only > BSP receives external NMI. "all" allows external NMIs to be > broadcast to all CPUs. This would raise the success rate of panic > on NMI when BSP hangs up in NMI context or the external NMI is > swallowed by other NMI handlers on BSP. If you specified "none", > any CPUs don't receive external NMIs. This is useful for dump > capture kernel so that it wouldn't be shot down while saving a > crash dump. > > V5: > - Rename the option from "noextnmi" to "apic_extnmi" > - Add apic_extnmi=all feature > - Fix the wrong documentation about "noextnmi" (apic_extnmi=none) > > Signed-off-by: Hidehiro Kawai <hidehiro.kawai.ez@hitachi.com> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: Ingo Molnar <mingo@redhat.com> > Cc: "H. Peter Anvin" <hpa@zytor.com> > Cc: Jonathan Corbet <corbet@lwn.net> > --- > Documentation/kernel-parameters.txt | 9 +++++++++ > arch/x86/include/asm/apic.h | 5 +++++ > arch/x86/kernel/apic/apic.c | 31 ++++++++++++++++++++++++++++++- > 3 files changed, 44 insertions(+), 1 deletion(-) > > diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt > index f8aae63..ceed3bc 100644 > --- a/Documentation/kernel-parameters.txt > +++ b/Documentation/kernel-parameters.txt > @@ -472,6 +472,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted. > Change the amount of debugging information output > when initialising the APIC and IO-APIC components. > > + apic_extnmi= [APIC,X86] External NMI delivery setting > + Format: { bsp (default) | all | none } > + bsp: External NMI is delivered to only CPU 0 only to > + all: External NMIs are broadcast to all CPUs as a > + backup of CPU 0 > + none: External NMI is masked for all CPUs. This is > + useful so that a dump capture kernel won't be > + shot down by NMI > + > autoconf= [IPV6] > See Documentation/networking/ipv6.txt. > > diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h > index 7f62ad4..c80f6b6 100644 > --- a/arch/x86/include/asm/apic.h > +++ b/arch/x86/include/asm/apic.h > @@ -23,6 +23,11 @@ > #define APIC_VERBOSE 1 > #define APIC_DEBUG 2 > > +/* Macros for apic_extnmi which controls external NMI masking */ > +#define APIC_EXTNMI_BSP 0 /* Default */ > +#define APIC_EXTNMI_ALL 1 > +#define APIC_EXTNMI_NONE 2 > + > /* > * Define the default level of output to be very little > * This can be turned up by using apic=verbose for more > diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c > index 2f69e3b..a2a8074 100644 > --- a/arch/x86/kernel/apic/apic.c > +++ b/arch/x86/kernel/apic/apic.c > @@ -82,6 +82,12 @@ physid_mask_t phys_cpu_present_map; > static unsigned int disabled_cpu_apicid __read_mostly = BAD_APICID; > > /* > + * This variable controls which CPUs receive external NMIs. By default, > + * external NMIs are delivered to only BSP. only to the BSP. > + */ > +static int apic_extnmi = APIC_EXTNMI_BSP; > + > +/* > * Map cpu index to physical APIC ID > */ > DEFINE_EARLY_PER_CPU_READ_MOSTLY(u16, x86_cpu_to_apicid, BAD_APICID); > @@ -1161,6 +1167,8 @@ void __init init_bsp_APIC(void) > value = APIC_DM_NMI; > if (!lapic_is_integrated()) /* 82489DX */ > value |= APIC_LVT_LEVEL_TRIGGER; > + if (apic_extnmi == APIC_EXTNMI_NONE) > + value |= APIC_LVT_MASKED; > apic_write(APIC_LVT1, value); > } > > @@ -1380,7 +1388,8 @@ void setup_local_APIC(void) > /* > * only the BP should see the LINT1 NMI signal, obviously. > */ That comment needs adjusting. > - if (!cpu) > + if ((!cpu && apic_extnmi != APIC_EXTNMI_NONE) || > + apic_extnmi == APIC_EXTNMI_ALL) > value = APIC_DM_NMI; > else > value = APIC_DM_NMI | APIC_LVT_MASKED; > @@ -2548,3 +2557,23 @@ static int __init apic_set_disabled_cpu_apicid(char *arg) > return 0; > } > early_param("disable_cpu_apicid", apic_set_disabled_cpu_apicid); > + > +static int __init apic_set_extnmi(char *arg) > +{ > + if (!arg) > + return -EINVAL; > + > + if (strcmp("all", arg) == 0) if (!strncmp("all", arg, 3)) ditto for the rest > + apic_extnmi = APIC_EXTNMI_ALL; > + else if (strcmp("none", arg) == 0) > + apic_extnmi = APIC_EXTNMI_NONE; > + else if (strcmp("bsp", arg) == 0) > + apic_extnmi = APIC_EXTNMI_BSP; > + else { > + pr_warn("Unknown external NMI delivery mode `%s' is ignored\n", s/is // Also, if there's no other delivery mode which makes sense, you can do: pr_warn("Unknown external NMI delivery mode `%s', defaulting to 'bsp'\n", arg); apic_extnmi = APIC_EXTNMI_BSP; Btw, you can let the pr_warn line be longer than 80 cols. And if you don't default, you need return -EINVAL; here. -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply. _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
next prev parent reply other threads:[~2015-11-25 11:49 UTC|newest] Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-11-20 9:36 [V5 PATCH 0/4] Fix race issues among panic, NMI and crash_kexec Hidehiro Kawai 2015-11-20 9:36 ` Hidehiro Kawai 2015-11-20 9:36 ` [V5 PATCH 1/4] panic/x86: Fix re-entrance problem due to panic on NMI Hidehiro Kawai 2015-11-20 9:36 ` Hidehiro Kawai 2015-11-23 18:49 ` Borislav Petkov 2015-11-23 18:49 ` Borislav Petkov 2015-11-24 4:06 ` 河合英宏 / KAWAI,HIDEHIRO 2015-11-24 4:06 ` 河合英宏 / KAWAI,HIDEHIRO 2015-11-24 12:45 ` Michal Hocko 2015-11-24 12:45 ` Michal Hocko 2015-11-24 15:05 ` Steven Rostedt 2015-11-24 15:05 ` Steven Rostedt 2015-11-24 15:12 ` Steven Rostedt 2015-11-24 15:12 ` Steven Rostedt 2015-11-24 20:27 ` Michal Hocko 2015-11-24 20:27 ` Michal Hocko 2015-11-24 20:45 ` Steven Rostedt 2015-11-24 20:45 ` Steven Rostedt 2015-11-20 9:36 ` [V5 PATCH 2/4] panic/x86: Allow cpus to save registers even if they are looping in NMI context Hidehiro Kawai 2015-11-20 9:36 ` Hidehiro Kawai 2015-11-24 10:48 ` Borislav Petkov 2015-11-24 10:48 ` Borislav Petkov 2015-11-24 19:37 ` Steven Rostedt 2015-11-24 19:37 ` Steven Rostedt 2015-11-24 20:16 ` Borislav Petkov 2015-11-24 20:16 ` Borislav Petkov 2015-11-25 5:57 ` 河合英宏 / KAWAI,HIDEHIRO 2015-11-25 5:57 ` 河合英宏 / KAWAI,HIDEHIRO 2015-11-25 5:51 ` 河合英宏 / KAWAI,HIDEHIRO 2015-11-25 5:51 ` 河合英宏 / KAWAI,HIDEHIRO 2015-11-25 8:56 ` Borislav Petkov 2015-11-25 8:56 ` Borislav Petkov 2015-11-25 9:46 ` 河合英宏 / KAWAI,HIDEHIRO 2015-11-25 9:46 ` 河合英宏 / KAWAI,HIDEHIRO 2015-11-25 9:57 ` Borislav Petkov 2015-11-25 9:57 ` Borislav Petkov 2015-11-25 15:11 ` 河合英宏 / KAWAI,HIDEHIRO 2015-11-25 15:11 ` 河合英宏 / KAWAI,HIDEHIRO 2015-11-24 12:58 ` Michal Hocko 2015-11-24 12:58 ` Michal Hocko 2015-12-03 2:23 ` 河合英宏 / KAWAI,HIDEHIRO 2015-12-03 2:23 ` 河合英宏 / KAWAI,HIDEHIRO 2015-11-20 9:36 ` [V5 PATCH 3/4] kexec: Fix race between panic() and crash_kexec() called directly Hidehiro Kawai 2015-11-20 9:36 ` Hidehiro Kawai 2015-11-24 13:05 ` Michal Hocko 2015-11-24 13:05 ` Michal Hocko 2015-11-24 20:35 ` Steven Rostedt 2015-11-24 20:35 ` Steven Rostedt 2015-11-25 6:28 ` 河合英宏 / KAWAI,HIDEHIRO 2015-11-25 6:28 ` 河合英宏 / KAWAI,HIDEHIRO 2015-11-25 9:54 ` Borislav Petkov 2015-11-25 9:54 ` Borislav Petkov 2015-12-02 11:57 ` 河合英宏 / KAWAI,HIDEHIRO 2015-12-02 11:57 ` 河合英宏 / KAWAI,HIDEHIRO 2015-12-02 15:40 ` Borislav Petkov 2015-12-02 15:40 ` Borislav Petkov 2015-12-03 2:01 ` 河合英宏 / KAWAI,HIDEHIRO 2015-12-03 2:01 ` 河合英宏 / KAWAI,HIDEHIRO 2015-12-03 9:35 ` Borislav Petkov 2015-12-03 9:35 ` Borislav Petkov 2015-12-03 11:29 ` 河合英宏 / KAWAI,HIDEHIRO 2015-12-03 11:29 ` 河合英宏 / KAWAI,HIDEHIRO 2015-12-03 12:22 ` Borislav Petkov 2015-12-03 12:22 ` Borislav Petkov 2015-11-20 9:36 ` [V5 PATCH 4/4] x86/apic: Introduce apic_extnmi boot option Hidehiro Kawai 2015-11-20 9:36 ` Hidehiro Kawai 2015-11-25 11:49 ` Borislav Petkov [this message] 2015-11-25 11:49 ` Borislav Petkov 2015-11-25 15:29 ` 河合英宏 / KAWAI,HIDEHIRO 2015-11-25 15:29 ` 河合英宏 / KAWAI,HIDEHIRO
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=20151125114948.GA4227@pd.tnic \ --to=bp@alien8.de \ --cc=akpm@linux-foundation.org \ --cc=bhe@redhat.com \ --cc=corbet@lwn.net \ --cc=ebiederm@xmission.com \ --cc=hidehiro.kawai.ez@hitachi.com \ --cc=hpa@zytor.com \ --cc=kexec@lists.infradead.org \ --cc=linux-doc@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=masami.hiramatsu.pt@hitachi.com \ --cc=mhocko@kernel.org \ --cc=mingo@kernel.org \ --cc=mingo@redhat.com \ --cc=peterz@infradead.org \ --cc=tglx@linutronix.de \ --cc=vgoyal@redhat.com \ --cc=x86@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: linkBe 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.