From: tip-bot for Huang Ying <ying.huang@intel.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, ying.huang@intel.com,
hpa@zytor.com, mingo@redhat.com, tglx@linutronix.de,
mingo@elte.hu, dzickus@redhat.com
Subject: [tip:perf/core] x86, NMI: Allow NMI reason io port (0x61) to be processed on any CPU
Date: Sat, 16 Oct 2010 16:37:10 GMT [thread overview]
Message-ID: <tip-4a45b5a06f61b46e7bce1aaf9331e2dc58704fa5@git.kernel.org> (raw)
In-Reply-To: <1287195738-3136-5-git-send-email-dzickus@redhat.com>
Commit-ID: 4a45b5a06f61b46e7bce1aaf9331e2dc58704fa5
Gitweb: http://git.kernel.org/tip/4a45b5a06f61b46e7bce1aaf9331e2dc58704fa5
Author: Huang Ying <ying.huang@intel.com>
AuthorDate: Fri, 15 Oct 2010 22:22:17 -0400
Committer: Ingo Molnar <mingo@elte.hu>
CommitDate: Sat, 16 Oct 2010 15:01:28 +0200
x86, NMI: Allow NMI reason io port (0x61) to be processed on any CPU
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>
Cc: andi@firstfloor.org
Cc: robert.richter@amd.com
Cc: peterz@infradead.org
LKML-Reference: <1287195738-3136-5-git-send-email-dzickus@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
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);
+ 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;
next prev parent reply other threads:[~2010-10-16 16:37 UTC|newest]
Thread overview: 35+ 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-bot for Huang Ying [this message]
2010-10-19 15:07 ` Robert Richter
2010-10-19 16:25 ` 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
-- strict thread matches above, loose matches on Subject: below --
2011-01-06 21:18 [PATCH 5/6] x86, NMI: Allow NMI reason io port (0x61) to be processed on any CPU Don Zickus
2011-01-07 15:34 ` [tip:perf/core] " tip-bot for Don Zickus
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=tip-4a45b5a06f61b46e7bce1aaf9331e2dc58704fa5@git.kernel.org \
--to=ying.huang@intel.com \
--cc=dzickus@redhat.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
/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.