Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 166413
b: refs/heads/master
c: 11868a2
h: refs/heads/master
i:
  166411: e59ead8
v: v3
  • Loading branch information
Ingo Molnar committed Sep 23, 2009
1 parent ebfc61e commit 4d929a2
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 14c93e8eba70c3c85d8f8acc6cfdc728aef92076
refs/heads/master: 11868a2dc4f5e4f2f652bfd259e1360193fcee62
23 changes: 21 additions & 2 deletions trunk/arch/x86/kernel/cpu/mcheck/mce.c
Original file line number Diff line number Diff line change
Expand Up @@ -305,20 +305,33 @@ static int msr_to_offset(u32 msr)
static u64 mce_rdmsrl(u32 msr)
{
u64 v;

if (__get_cpu_var(injectm).finished) {
int offset = msr_to_offset(msr);

if (offset < 0)
return 0;
return *(u64 *)((char *)&__get_cpu_var(injectm) + offset);
}
rdmsrl(msr, v);

if (rdmsrl_safe(msr, &v)) {
WARN_ONCE(1, "mce: Unable to read msr %d!\n", msr);
/*
* Return zero in case the access faulted. This should
* not happen normally but can happen if the CPU does
* something weird, or if the code is buggy.
*/
v = 0;
}

return v;
}

static void mce_wrmsrl(u32 msr, u64 v)
{
if (__get_cpu_var(injectm).finished) {
int offset = msr_to_offset(msr);

if (offset >= 0)
*(u64 *)((char *)&__get_cpu_var(injectm) + offset) = v;
return;
Expand Down Expand Up @@ -415,7 +428,7 @@ static inline void mce_get_rip(struct mce *m, struct pt_regs *regs)
m->ip = mce_rdmsrl(rip_msr);
}

#ifdef CONFIG_X86_LOCAL_APIC
#ifdef CONFIG_X86_LOCAL_APIC
/*
* Called after interrupts have been reenabled again
* when a MCE happened during an interrupts off region
Expand Down Expand Up @@ -1172,6 +1185,7 @@ static int mce_banks_init(void)
return -ENOMEM;
for (i = 0; i < banks; i++) {
struct mce_bank *b = &mce_banks[i];

b->ctl = -1ULL;
b->init = 1;
}
Expand Down Expand Up @@ -1203,6 +1217,7 @@ static int __cpuinit mce_cap_init(void)
banks = b;
if (!mce_banks) {
int err = mce_banks_init();

if (err)
return err;
}
Expand Down Expand Up @@ -1237,6 +1252,7 @@ static void mce_init(void)

for (i = 0; i < banks; i++) {
struct mce_bank *b = &mce_banks[i];

if (!b->init)
continue;
wrmsrl(MSR_IA32_MCx_CTL(i), b->ctl);
Expand Down Expand Up @@ -1626,6 +1642,7 @@ static int mce_disable(void)

for (i = 0; i < banks; i++) {
struct mce_bank *b = &mce_banks[i];

if (b->init)
wrmsrl(MSR_IA32_MCx_CTL(i), 0);
}
Expand Down Expand Up @@ -1911,6 +1928,7 @@ static void mce_disable_cpu(void *h)
cmci_clear();
for (i = 0; i < banks; i++) {
struct mce_bank *b = &mce_banks[i];

if (b->init)
wrmsrl(MSR_IA32_MCx_CTL(i), 0);
}
Expand All @@ -1928,6 +1946,7 @@ static void mce_reenable_cpu(void *h)
cmci_reenable();
for (i = 0; i < banks; i++) {
struct mce_bank *b = &mce_banks[i];

if (b->init)
wrmsrl(MSR_IA32_MCx_CTL(i), b->ctl);
}
Expand Down

0 comments on commit 4d929a2

Please sign in to comment.