aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/edac
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-02-20 15:47:44 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2017-02-20 15:47:44 -0500
commit60c906bab124a0627fba04c9ca5e61bba4747c0c (patch)
tree1680b243575b7184d3e06ae739bffbdfc3e3f943 /drivers/edac
parent7f4eb0a6d5a76ee054acd7255c05b8d5ca31c5d9 (diff)
parent9026cc82b632ed1a859935c82ed8ad65f27f2781 (diff)
Merge branch 'ras-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull RAS updates from Ingo Molnar: "The main changes in this cycle were: - Assign notifier chain priorities for all RAS related handlers to make the ordering explicit (Borislav Petkov) - Improve the AMD MCA banks sysfs output (Yazen Ghannam) - Various cleanups and restructuring of the x86 RAS code (Borislav Petkov)" * 'ras-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/ras, EDAC, acpi: Assign MCE notifier handlers a priority x86/ras: Get rid of mce_process_work() EDAC/mce/amd: Dump TSC value EDAC/mce/amd: Unexport amd_decode_mce() x86/ras/amd/inj: Change dependency x86/ras: Flip the TSC-adding logic x86/ras/amd: Make sysfs names of banks more user-friendly x86/ras/therm_throt: Do not log a fake MCE for thermal events x86/ras/inject: Make it depend on X86_LOCAL_APIC=y
Diffstat (limited to 'drivers/edac')
-rw-r--r--drivers/edac/i7core_edac.c1
-rw-r--r--drivers/edac/mce_amd.c8
-rw-r--r--drivers/edac/mce_amd.h1
-rw-r--r--drivers/edac/sb_edac.c3
-rw-r--r--drivers/edac/skx_edac.c3
5 files changed, 11 insertions, 5 deletions
diff --git a/drivers/edac/i7core_edac.c b/drivers/edac/i7core_edac.c
index 69b5adead0ad..75ad847593b7 100644
--- a/drivers/edac/i7core_edac.c
+++ b/drivers/edac/i7core_edac.c
@@ -1835,6 +1835,7 @@ static int i7core_mce_check_error(struct notifier_block *nb, unsigned long val,
1835 1835
1836static struct notifier_block i7_mce_dec = { 1836static struct notifier_block i7_mce_dec = {
1837 .notifier_call = i7core_mce_check_error, 1837 .notifier_call = i7core_mce_check_error,
1838 .priority = MCE_PRIO_EDAC,
1838}; 1839};
1839 1840
1840struct memdev_dmi_entry { 1841struct memdev_dmi_entry {
diff --git a/drivers/edac/mce_amd.c b/drivers/edac/mce_amd.c
index 27513dca8009..ba35b7ea3686 100644
--- a/drivers/edac/mce_amd.c
+++ b/drivers/edac/mce_amd.c
@@ -942,7 +942,8 @@ static const char *decode_error_status(struct mce *m)
942 return "Corrected error, no action required."; 942 return "Corrected error, no action required.";
943} 943}
944 944
945int amd_decode_mce(struct notifier_block *nb, unsigned long val, void *data) 945static int
946amd_decode_mce(struct notifier_block *nb, unsigned long val, void *data)
946{ 947{
947 struct mce *m = (struct mce *)data; 948 struct mce *m = (struct mce *)data;
948 struct cpuinfo_x86 *c = &cpu_data(m->extcpu); 949 struct cpuinfo_x86 *c = &cpu_data(m->extcpu);
@@ -1005,6 +1006,9 @@ int amd_decode_mce(struct notifier_block *nb, unsigned long val, void *data)
1005 goto err_code; 1006 goto err_code;
1006 } 1007 }
1007 1008
1009 if (m->tsc)
1010 pr_emerg(HW_ERR "TSC: %llu\n", m->tsc);
1011
1008 if (!fam_ops) 1012 if (!fam_ops)
1009 goto err_code; 1013 goto err_code;
1010 1014
@@ -1046,10 +1050,10 @@ int amd_decode_mce(struct notifier_block *nb, unsigned long val, void *data)
1046 1050
1047 return NOTIFY_STOP; 1051 return NOTIFY_STOP;
1048} 1052}
1049EXPORT_SYMBOL_GPL(amd_decode_mce);
1050 1053
1051static struct notifier_block amd_mce_dec_nb = { 1054static struct notifier_block amd_mce_dec_nb = {
1052 .notifier_call = amd_decode_mce, 1055 .notifier_call = amd_decode_mce,
1056 .priority = MCE_PRIO_EDAC,
1053}; 1057};
1054 1058
1055static int __init mce_amd_init(void) 1059static int __init mce_amd_init(void)
diff --git a/drivers/edac/mce_amd.h b/drivers/edac/mce_amd.h
index c2359a1ea6b3..0b6a68673e0e 100644
--- a/drivers/edac/mce_amd.h
+++ b/drivers/edac/mce_amd.h
@@ -79,6 +79,5 @@ struct amd_decoder_ops {
79void amd_report_gart_errors(bool); 79void amd_report_gart_errors(bool);
80void amd_register_ecc_decoder(void (*f)(int, struct mce *)); 80void amd_register_ecc_decoder(void (*f)(int, struct mce *));
81void amd_unregister_ecc_decoder(void (*f)(int, struct mce *)); 81void amd_unregister_ecc_decoder(void (*f)(int, struct mce *));
82int amd_decode_mce(struct notifier_block *nb, unsigned long val, void *data);
83 82
84#endif /* _EDAC_MCE_AMD_H */ 83#endif /* _EDAC_MCE_AMD_H */
diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c
index 573be9c0ffb8..a65ea44e3b0b 100644
--- a/drivers/edac/sb_edac.c
+++ b/drivers/edac/sb_edac.c
@@ -3117,7 +3117,8 @@ static int sbridge_mce_check_error(struct notifier_block *nb, unsigned long val,
3117} 3117}
3118 3118
3119static struct notifier_block sbridge_mce_dec = { 3119static struct notifier_block sbridge_mce_dec = {
3120 .notifier_call = sbridge_mce_check_error, 3120 .notifier_call = sbridge_mce_check_error,
3121 .priority = MCE_PRIO_EDAC,
3121}; 3122};
3122 3123
3123/**************************************************************************** 3124/****************************************************************************
diff --git a/drivers/edac/skx_edac.c b/drivers/edac/skx_edac.c
index 79ef675e4d6f..1159dba4671f 100644
--- a/drivers/edac/skx_edac.c
+++ b/drivers/edac/skx_edac.c
@@ -1007,7 +1007,8 @@ static int skx_mce_check_error(struct notifier_block *nb, unsigned long val,
1007} 1007}
1008 1008
1009static struct notifier_block skx_mce_dec = { 1009static struct notifier_block skx_mce_dec = {
1010 .notifier_call = skx_mce_check_error, 1010 .notifier_call = skx_mce_check_error,
1011 .priority = MCE_PRIO_EDAC,
1011}; 1012};
1012 1013
1013static void skx_remove(void) 1014static void skx_remove(void)