From: Andi Kleen <andi@firstfloor.org>
To: hpa@zytor.com, linux-kernel@vger.kernel.org, mingo@elte.hu,
tglx@linutronix.de
Subject: [PATCH] [14/28] x86: MCE: Add MSR read wrappers for easier error injection
Date: Tue, 7 Apr 2009 17:07:55 +0200 (CEST) [thread overview]
Message-ID: <20090407150756.23F221D046E@basil.firstfloor.org> (raw)
In-Reply-To: <20090407507.636692542@firstfloor.org>
This will be used by future patches to allow machine check error injection.
Right now it's a nop, except for adding some wrappers around the MSR reads.
This is early in the sequence to avoid too many conflicts.
Andi Kleen <ak@linux.intel.com>
Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
arch/x86/kernel/cpu/mcheck/mce_64.c | 37 ++++++++++++++++++++++++------------
1 file changed, 25 insertions(+), 12 deletions(-)
Index: linux/arch/x86/kernel/cpu/mcheck/mce_64.c
===================================================================
--- linux.orig/arch/x86/kernel/cpu/mcheck/mce_64.c 2009-04-07 16:09:59.000000000 +0200
+++ linux/arch/x86/kernel/cpu/mcheck/mce_64.c 2009-04-07 16:43:12.000000000 +0200
@@ -171,6 +171,19 @@
panic(msg);
}
+/* MSR access wrappers used for error injection */
+static u64 mce_rdmsrl(u32 msr)
+{
+ u64 v;
+ rdmsrl(msr, v);
+ return v;
+}
+
+static void mce_wrmsrl(u32 msr, u64 v)
+{
+ wrmsrl(msr, v);
+}
+
int mce_available(struct cpuinfo_x86 *c)
{
if (mce_dont_init)
@@ -188,7 +201,7 @@
m->cs = 0;
}
if (rip_msr)
- rdmsrl(rip_msr, m->ip);
+ m->ip = mce_rdmsrl(rip_msr);
}
/*
@@ -250,7 +263,7 @@
mce_setup(&m);
- rdmsrl(MSR_IA32_MCG_STATUS, m.mcgstatus);
+ m.mcgstatus = mce_rdmsrl(MSR_IA32_MCG_STATUS);
for (i = 0; i < banks; i++) {
if (!bank[i] || !test_bit(i, *b))
continue;
@@ -261,7 +274,7 @@
m.tsc = 0;
barrier();
- rdmsrl(MSR_IA32_MC0_STATUS + i*4, m.status);
+ m.status = mce_rdmsrl(MSR_IA32_MC0_STATUS + i*4);
if (!(m.status & MCI_STATUS_VAL))
continue;
@@ -276,9 +289,9 @@
continue;
if (m.status & MCI_STATUS_MISCV)
- rdmsrl(MSR_IA32_MC0_MISC + i*4, m.misc);
+ m.misc = mce_rdmsrl(MSR_IA32_MC0_MISC + i*4);
if (m.status & MCI_STATUS_ADDRV)
- rdmsrl(MSR_IA32_MC0_ADDR + i*4, m.addr);
+ m.addr = mce_rdmsrl(MSR_IA32_MC0_ADDR + i*4);
if (!(flags & MCP_TIMESTAMP))
m.tsc = 0;
@@ -294,7 +307,7 @@
/*
* Clear state for this bank.
*/
- wrmsrl(MSR_IA32_MC0_STATUS+4*i, 0);
+ mce_wrmsrl(MSR_IA32_MC0_STATUS+4*i, 0);
}
/*
@@ -342,8 +355,8 @@
goto out;
mce_setup(&m);
+ m.mcgstatus = mce_rdmsrl(MSR_IA32_MCG_STATUS);
- rdmsrl(MSR_IA32_MCG_STATUS, m.mcgstatus);
/* if the restart IP is not valid, we're done for */
if (!(m.mcgstatus & MCG_STATUS_RIPV))
no_way_out = 1;
@@ -360,7 +373,7 @@
m.addr = 0;
m.bank = i;
- rdmsrl(MSR_IA32_MC0_STATUS + i*4, m.status);
+ m.status = mce_rdmsrl(MSR_IA32_MC0_STATUS + i*4);
if ((m.status & MCI_STATUS_VAL) == 0)
continue;
@@ -400,9 +413,9 @@
}
if (m.status & MCI_STATUS_MISCV)
- rdmsrl(MSR_IA32_MC0_MISC + i*4, m.misc);
+ m.misc = mce_rdmsrl(MSR_IA32_MC0_MISC + i*4);
if (m.status & MCI_STATUS_ADDRV)
- rdmsrl(MSR_IA32_MC0_ADDR + i*4, m.addr);
+ m.addr = mce_rdmsrl(MSR_IA32_MC0_ADDR + i*4);
mce_get_rip(&m, regs);
mce_log(&m);
@@ -467,9 +480,9 @@
/* the last thing we do is clear state */
for (i = 0; i < banks; i++) {
if (test_bit(i, toclear))
- wrmsrl(MSR_IA32_MC0_STATUS+4*i, 0);
+ mce_wrmsrl(MSR_IA32_MC0_STATUS+4*i, 0);
}
- wrmsrl(MSR_IA32_MCG_STATUS, 0);
+ mce_wrmsrl(MSR_IA32_MCG_STATUS, 0);
out:
atomic_dec(&mce_entry);
sync_core();
next prev parent reply other threads:[~2009-04-07 15:14 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-07 15:07 [PATCH] [0/28] x86: MCE: Feature series for 2.6.31 Andi Kleen
2009-04-07 15:07 ` [PATCH] [1/28] x86: Fix panic with interrupts off (needed for MCE) Andi Kleen
2009-04-20 0:26 ` Hidetoshi Seto
2009-04-20 5:36 ` Andi Kleen
2009-04-07 15:07 ` [PATCH] [2/28] x86: MCE: Synchronize core after machine check handling Andi Kleen
2009-04-07 15:07 ` [PATCH] [3/28] x86: MCE: Remove assumption that RIP MSR is exact Andi Kleen
2009-04-07 15:07 ` [PATCH] [4/28] x86: MCE: Use symbolic macros to access MCG_CAP register Andi Kleen
2009-04-07 15:07 ` [PATCH] [5/28] x86: MCE: Use extended sysattrs for the check_interval attribute Andi Kleen
2009-04-07 15:07 ` [PATCH] [6/28] x86: MCE: Add machine check exception count in /proc/interrupts Andi Kleen
2009-04-08 5:00 ` Hidetoshi Seto
2009-04-08 9:56 ` Andi Kleen
2009-04-07 15:07 ` [PATCH] [7/28] x86: MCE: Log corrected errors when panicing Andi Kleen
2009-04-07 15:07 ` [PATCH] [8/28] x86: MCE: Remove unused mce_events variable Andi Kleen
2009-04-07 15:07 ` [PATCH] [9/28] x86: MCE: Remove machine check handler idle notify on 64bit Andi Kleen
2009-04-07 15:07 ` [PATCH] [10/28] x86: MCE: Remove oops_begin() use in 64bit machine check Andi Kleen
2009-04-07 15:07 ` [PATCH] [11/28] x86: MCE: Remove mce_init unused argument Andi Kleen
2009-04-07 15:07 ` [PATCH] [12/28] x86: MCE: Rename and align out2 label Andi Kleen
2009-04-07 15:07 ` [PATCH] [13/28] x86: MCE: Implement bootstrapping for machine check wakeups Andi Kleen
2009-04-07 15:07 ` Andi Kleen [this message]
2009-04-17 11:23 ` [PATCH] [14/28] x86: MCE: Add MSR read wrappers for easier error injection Hidetoshi Seto
2009-04-17 13:00 ` Andi Kleen
2009-04-17 23:55 ` H. Peter Anvin
2009-04-07 15:07 ` [PATCH] [15/28] x86: MCE: Remove TSC print heuristic Andi Kleen
2009-04-07 15:07 ` [PATCH] [16/28] x86: MCE: Drop BKL in mce_open Andi Kleen
2009-04-07 15:07 ` [PATCH] [17/28] x86: MCE: Add table driven machine check grading Andi Kleen
2009-04-07 15:08 ` [PATCH] [18/28] x86: MCE: Check early in exception handler if panic is needed Andi Kleen
2009-04-07 15:08 ` [PATCH] [19/28] x86: MCE: Implement panic synchronization Andi Kleen
2009-04-07 15:08 ` [PATCH] [20/28] x86: MCE: Switch x86 machine check handler to Monarch election Andi Kleen
2009-04-17 11:24 ` Hidetoshi Seto
2009-04-17 13:09 ` Andi Kleen
2009-04-17 13:53 ` [PATCH] [20/28] x86: MCE: Switch x86 machine check handler to Monarch election. II Andi Kleen
2009-04-07 15:08 ` [PATCH] [21/28] x86: MCE: Store record length into memory struct mce anchor Andi Kleen
2009-04-07 15:08 ` [PATCH] [22/28] x86: MCE: Default to panic timeout for machine checks Andi Kleen
2009-04-17 11:24 ` Hidetoshi Seto
2009-04-17 13:12 ` Andi Kleen
2009-04-07 15:08 ` [PATCH] [23/28] x86: MCE: Improve documentation Andi Kleen
2009-04-08 5:12 ` Hidetoshi Seto
2009-04-07 15:08 ` [PATCH] [24/28] x86: MCE: Support more than 256 CPUs in struct mce Andi Kleen
2009-04-07 15:08 ` [PATCH] [25/28] x86: MCE: Extend struct mce user interface with more information Andi Kleen
2009-04-07 15:08 ` [PATCH] [26/28] Export add_timer_on for modules Andi Kleen
2009-04-07 15:08 ` [PATCH] [27/28] MCE: Add basic error injection infrastructure Andi Kleen
2009-04-07 15:08 ` [PATCH] [28/28] x86: MCE: Implement new status bits Andi Kleen
2009-04-17 11:24 ` Hidetoshi Seto
2009-04-17 13:17 ` Andi Kleen
2009-04-17 11:24 ` [PATCH] [0/28] x86: MCE: Feature series for 2.6.31 Hidetoshi Seto
2009-04-17 13:28 ` Andi Kleen
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=20090407150756.23F221D046E@basil.firstfloor.org \
--to=andi@firstfloor.org \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome