aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/edac/sb_edac.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-04-03 20:07:17 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-04-03 20:07:17 -0400
commit4a4389abdd9822fdf3cc2ac6ed87eb811fd43acc (patch)
treefd0da7010c1fe5878cd8b52eb6b01ba858e2f79f /drivers/edac/sb_edac.c
parent73f10274a6c8699738246ed2e1d704dc52702565 (diff)
parent49856dc973cd95d85ac1cab6c70410d8331e5c04 (diff)
Merge branch 'linux_next' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-edac
Pull sb_edac patches from Mauro Carvalho Chehab: "A couple sb_edac driver improvements, cleaning a little bit the amount of data sent to dmesg, and fixing one error message" * 'linux_next' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-edac: sb_edac: mark MCE messages as KERN_DEBUG sb_edac: use "event" instead of "exception" when MC wasnt signaled
Diffstat (limited to 'drivers/edac/sb_edac.c')
-rw-r--r--drivers/edac/sb_edac.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c
index 347c7a1c2725..c460ba5d65a8 100644
--- a/drivers/edac/sb_edac.c
+++ b/drivers/edac/sb_edac.c
@@ -1828,6 +1828,7 @@ static int sbridge_mce_check_error(struct notifier_block *nb, unsigned long val,
1828 struct mce *mce = (struct mce *)data; 1828 struct mce *mce = (struct mce *)data;
1829 struct mem_ctl_info *mci; 1829 struct mem_ctl_info *mci;
1830 struct sbridge_pvt *pvt; 1830 struct sbridge_pvt *pvt;
1831 char *type;
1831 1832
1832 if (get_edac_report_status() == EDAC_REPORTING_DISABLED) 1833 if (get_edac_report_status() == EDAC_REPORTING_DISABLED)
1833 return NOTIFY_DONE; 1834 return NOTIFY_DONE;
@@ -1846,17 +1847,23 @@ static int sbridge_mce_check_error(struct notifier_block *nb, unsigned long val,
1846 if ((mce->status & 0xefff) >> 7 != 1) 1847 if ((mce->status & 0xefff) >> 7 != 1)
1847 return NOTIFY_DONE; 1848 return NOTIFY_DONE;
1848 1849
1849 printk("sbridge: HANDLING MCE MEMORY ERROR\n"); 1850 if (mce->mcgstatus & MCG_STATUS_MCIP)
1851 type = "Exception";
1852 else
1853 type = "Event";
1854
1855 sbridge_mc_printk(mci, KERN_DEBUG, "HANDLING MCE MEMORY ERROR\n");
1850 1856
1851 printk("CPU %d: Machine Check Exception: %Lx Bank %d: %016Lx\n", 1857 sbridge_mc_printk(mci, KERN_DEBUG, "CPU %d: Machine Check %s: %Lx "
1852 mce->extcpu, mce->mcgstatus, mce->bank, mce->status); 1858 "Bank %d: %016Lx\n", mce->extcpu, type,
1853 printk("TSC %llx ", mce->tsc); 1859 mce->mcgstatus, mce->bank, mce->status);
1854 printk("ADDR %llx ", mce->addr); 1860 sbridge_mc_printk(mci, KERN_DEBUG, "TSC %llx ", mce->tsc);
1855 printk("MISC %llx ", mce->misc); 1861 sbridge_mc_printk(mci, KERN_DEBUG, "ADDR %llx ", mce->addr);
1862 sbridge_mc_printk(mci, KERN_DEBUG, "MISC %llx ", mce->misc);
1856 1863
1857 printk("PROCESSOR %u:%x TIME %llu SOCKET %u APIC %x\n", 1864 sbridge_mc_printk(mci, KERN_DEBUG, "PROCESSOR %u:%x TIME %llu SOCKET "
1858 mce->cpuvendor, mce->cpuid, mce->time, 1865 "%u APIC %x\n", mce->cpuvendor, mce->cpuid,
1859 mce->socketid, mce->apicid); 1866 mce->time, mce->socketid, mce->apicid);
1860 1867
1861 /* Only handle if it is the right mc controller */ 1868 /* Only handle if it is the right mc controller */
1862 if (cpu_data(mce->cpu).phys_proc_id != pvt->sbridge_dev->mc) 1869 if (cpu_data(mce->cpu).phys_proc_id != pvt->sbridge_dev->mc)