From: Robert Richter <robert.richter@amd.com>
To: Don Zickus <dzickus@redhat.com>
Cc: "mingo@elte.hu" <mingo@elte.hu>,
"andi@firstfloor.org" <andi@firstfloor.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"peterz@infradead.org" <peterz@infradead.org>,
"ying.huang@intel.com" <ying.huang@intel.com>
Subject: Re: [PATCH 4/5] x86, NMI: Allow NMI reason io port (0x61) to be processed on any CPU
Date: Tue, 19 Oct 2010 17:07:01 +0200 [thread overview]
Message-ID: <20101019150701.GR5969@erda.amd.com> (raw)
In-Reply-To: <1287195738-3136-5-git-send-email-dzickus@redhat.com>
On 15.10.10 22:22:17, Don Zickus wrote:
> From: Huang Ying <ying.huang@intel.com>
>
> In original NMI handler, NMI reason io port (0x61) is only processed
> on BSP. This makes it impossible to hot-remove BSP. To solve the
> issue, a raw spinlock is used to make the port can be processed on any
> CPU.
>
> Signed-off-by: Huang Ying <ying.huang@intel.com>
> Signed-off-by: Don Zickus <dzickus@redhat.com>
> ---
> arch/x86/kernel/traps.c | 45 +++++++++++++++++++++++++--------------------
> 1 files changed, 25 insertions(+), 20 deletions(-)
>
> diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
> index d8acab3..accb2f4 100644
> --- a/arch/x86/kernel/traps.c
> +++ b/arch/x86/kernel/traps.c
> @@ -83,6 +83,12 @@ EXPORT_SYMBOL_GPL(used_vectors);
>
> static int ignore_nmis;
>
> +/*
> + * Prevent NMI reason port (0x61) being accessed simultaneously, can
> + * only be used in NMI handler.
> + */
> +static DEFINE_RAW_SPINLOCK(nmi_reason_lock);
> +
> static inline void conditional_sti(struct pt_regs *regs)
> {
> if (regs->flags & X86_EFLAGS_IF)
> @@ -383,7 +389,6 @@ unknown_nmi_error(unsigned char reason, struct pt_regs *regs)
> static notrace __kprobes void default_do_nmi(struct pt_regs *regs)
> {
> unsigned char reason = 0;
> - int cpu;
>
> /*
> * CPU-specific NMI must be processed before non-CPU-specific
> @@ -400,28 +405,28 @@ static notrace __kprobes void default_do_nmi(struct pt_regs *regs)
> return;
>
> /* Non-CPU-specific NMI: NMI sources can be processed on any CPU */
> - cpu = smp_processor_id();
> - /* Only the BSP gets external NMIs from the system. */
> - if (!cpu) {
> - reason = get_nmi_reason();
> - if (reason & NMI_REASON_MASK) {
> - if (notify_die(DIE_NMI, "nmi", regs, reason, 2, SIGINT)
> - == NOTIFY_STOP)
> - return;
> - if (reason & NMI_REASON_SERR)
> - pci_serr_error(reason, regs);
> - else if (reason & NMI_REASON_IOCHK)
> - io_check_error(reason, regs);
> + raw_spin_lock(&nmi_reason_lock);
What about using raw_spin_trylock() instead? We don't have to wait
here since we are already processing it by another cpu.
-Robert
> + reason = get_nmi_reason();
> + if (reason & NMI_REASON_MASK) {
> + if (notify_die(DIE_NMI, "nmi", regs, reason, 2, SIGINT)
> + == NOTIFY_STOP)
> + goto unlock_return;
> + if (reason & NMI_REASON_SERR)
> + pci_serr_error(reason, regs);
> + else if (reason & NMI_REASON_IOCHK)
> + io_check_error(reason, regs);
> #ifdef CONFIG_X86_32
> - /*
> - * Reassert NMI in case it became active
> - * meanwhile as it's edge-triggered:
> - */
> - reassert_nmi();
> + /*
> + * Reassert NMI in case it became active
> + * meanwhile as it's edge-triggered:
> + */
> + reassert_nmi();
> #endif
> - return;
> - }
> +unlock_return:
> + raw_spin_unlock(&nmi_reason_lock);
> + return;
> }
> + raw_spin_unlock(&nmi_reason_lock);
>
> if (notify_die(DIE_NMI, "nmi", regs, 0, 2, SIGINT) == NOTIFY_STOP)
> return;
> --
> 1.7.2.3
>
>
--
Advanced Micro Devices, Inc.
Operating System Research Center
next prev parent reply other threads:[~2010-10-19 15:09 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-16 2:22 [PATCH 0/5] x86, NMI: give NMI handler a face-lift Don Zickus
2010-10-16 2:22 ` [PATCH 1/5] x86, NMI: Add NMI symbol constants and rename memory parity to PCI SERR Don Zickus
2010-10-16 16:36 ` [tip:perf/core] " tip-bot for Huang Ying
2010-10-16 2:22 ` [PATCH 2/5] x86, NMI: Add touch_nmi_watchdog to io_check_error delay Don Zickus
2010-10-16 16:36 ` [tip:perf/core] " tip-bot for Huang Ying
2010-10-16 2:22 ` [PATCH 3/5] x86, NMI: Rewrite NMI handler Don Zickus
2010-10-16 16:36 ` [tip:perf/core] " tip-bot for Huang Ying
2010-10-16 17:29 ` Peter Zijlstra
2010-10-16 18:20 ` Ingo Molnar
2010-10-16 18:40 ` Anca Emanuel
2010-10-17 0:46 ` Don Zickus
2010-10-17 10:42 ` Peter Zijlstra
2010-10-18 3:06 ` Huang Ying
2010-10-18 8:24 ` Peter Zijlstra
2010-10-16 2:22 ` [PATCH 4/5] x86, NMI: Allow NMI reason io port (0x61) to be processed on any CPU Don Zickus
2010-10-16 16:37 ` [tip:perf/core] " tip-bot for Huang Ying
2010-10-19 15:07 ` Robert Richter [this message]
2010-10-19 16:25 ` [PATCH 4/5] " Robert Richter
2010-10-19 18:37 ` Don Zickus
2010-10-20 0:23 ` Huang Ying
2010-10-20 10:03 ` Robert Richter
2010-10-21 0:46 ` Huang Ying
2010-10-20 14:27 ` Don Zickus
2010-10-21 0:40 ` Huang Ying
2010-10-21 1:18 ` Don Zickus
2010-10-21 1:25 ` Huang Ying
2010-10-21 2:37 ` Don Zickus
2010-10-21 2:53 ` Huang Ying
2010-10-16 2:22 ` [PATCH 5/5] x86, NMI: Remove do_nmi_callback logic Don Zickus
2010-10-16 16:37 ` [tip:perf/core] " tip-bot for Huang Ying
2010-10-19 15:03 ` [PATCH 5/5] " Robert Richter
2010-10-19 16:01 ` Don Zickus
2010-10-19 16:23 ` Robert Richter
2010-10-19 15:01 ` [PATCH 0/5] x86, NMI: give NMI handler a face-lift Robert Richter
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=20101019150701.GR5969@erda.amd.com \
--to=robert.richter@amd.com \
--cc=andi@firstfloor.org \
--cc=dzickus@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=ying.huang@intel.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.