All Zhaoxin newer CPUs support CMCI that compatible with Intel's
"Machine-Check Architecture", so add support for Zhaoxin CMCI in
mce/core.c and mce/intel.c.
Signed-off-by: Tony W Wang-oc <[email protected]>
---
arch/x86/include/asm/mce.h | 6 ++++++
arch/x86/kernel/cpu/mce/core.c | 25 +++++++++++++++++++++++++
arch/x86/kernel/cpu/mce/intel.c | 3 ++-
3 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/arch/x86/include/asm/mce.h b/arch/x86/include/asm/mce.h
index dc2d4b2..0986a11 100644
--- a/arch/x86/include/asm/mce.h
+++ b/arch/x86/include/asm/mce.h
@@ -350,4 +350,10 @@ umc_normaddr_to_sysaddr(u64 norm_addr, u16 nid, u8 umc, u64 *sys_addr) { return
static inline void mce_hygon_feature_init(struct cpuinfo_x86 *c) { return mce_amd_feature_init(c); }
+#ifdef CONFIG_CPU_SUP_ZHAOXIN
+void mce_zhaoxin_feature_init(struct cpuinfo_x86 *c);
+#else
+static inline void mce_zhaoxin_feature_init(struct cpuinfo_x86 *c) { }
+#endif
+
#endif /* _ASM_X86_MCE_H */
diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c
index 3f878f6..a3b07ca 100644
--- a/arch/x86/kernel/cpu/mce/core.c
+++ b/arch/x86/kernel/cpu/mce/core.c
@@ -1777,6 +1777,27 @@ static void mce_centaur_feature_init(struct cpuinfo_x86 *c)
}
}
+void mce_zhaoxin_feature_init(struct cpuinfo_x86 *c)
+{
+ struct mce_bank *mce_banks = this_cpu_ptr(mce_banks_array);
+
+ /*
+ * These CPUs bank8 SVAD error may be triggered unexpected when
+ * bringup virtual machine. it is not hardware bug. Always disable
+ * bank8 SVAD error by default.
+ */
+ if ((c->x86 == 6 && c->x86_model == 0x19 &&
+ (c->x86_stepping > 3 && c->x86_stepping < 8)) ||
+ (c->x86 == 6 && c->x86_model == 0x1f) ||
+ (c->x86 == 7 && c->x86_model == 0x1b)) {
+ if (this_cpu_read(mce_num_banks) > 8)
+ mce_banks[8].ctl = 0;
+ }
+
+ intel_init_cmci();
+ mce_adjust_timer = cmci_intel_adjust_timer;
+}
+
static void __mcheck_cpu_init_vendor(struct cpuinfo_x86 *c)
{
switch (c->x86_vendor) {
@@ -1798,6 +1819,10 @@ static void __mcheck_cpu_init_vendor(struct cpuinfo_x86 *c)
mce_centaur_feature_init(c);
break;
+ case X86_VENDOR_ZHAOXIN:
+ mce_zhaoxin_feature_init(c);
+ break;
+
default:
break;
}
diff --git a/arch/x86/kernel/cpu/mce/intel.c b/arch/x86/kernel/cpu/mce/intel.c
index eee4b12..b49cba7 100644
--- a/arch/x86/kernel/cpu/mce/intel.c
+++ b/arch/x86/kernel/cpu/mce/intel.c
@@ -85,7 +85,8 @@ static int cmci_supported(int *banks)
* initialization is vendor keyed and this
* makes sure none of the backdoors are entered otherwise.
*/
- if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL)
+ if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL &&
+ boot_cpu_data.x86_vendor != X86_VENDOR_ZHAOXIN)
return 0;
if (!boot_cpu_has(X86_FEATURE_APIC) || lapic_get_maxlvt() < 6)
return 0;
--
2.7.4
Hi Tony,
I love your patch! Yet something to improve:
[auto build test ERROR on linus/master]
[cannot apply to v5.3-rc8 next-20190904]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Tony-W-Wang-oc/x86-mce-Add-Zhaoxin-MCE-support/20190909-190435
config: i386-randconfig-b002-201936 (attached as .config)
compiler: gcc-7 (Debian 7.4.0-11) 7.4.0
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <[email protected]>
All errors (new ones prefixed by >>):
>> arch/x86/kernel/cpu/mce/core.c:1780:6: error: redefinition of 'mce_zhaoxin_feature_init'
void mce_zhaoxin_feature_init(struct cpuinfo_x86 *c)
^~~~~~~~~~~~~~~~~~~~~~~~
In file included from arch/x86/kernel/cpu/mce/core.c:50:0:
arch/x86/include/asm/mce.h:356:20: note: previous definition of 'mce_zhaoxin_feature_init' was here
static inline void mce_zhaoxin_feature_init(struct cpuinfo_x86 *c) { }
^~~~~~~~~~~~~~~~~~~~~~~~
vim +/mce_zhaoxin_feature_init +1780 arch/x86/kernel/cpu/mce/core.c
1779
> 1780 void mce_zhaoxin_feature_init(struct cpuinfo_x86 *c)
1781 {
1782 struct mce_bank *mce_banks = this_cpu_ptr(mce_banks_array);
1783
1784 /*
1785 * These CPUs bank8 SVAD error may be triggered unexpected when
1786 * bringup virtual machine. it is not hardware bug. Always disable
1787 * bank8 SVAD error by default.
1788 */
1789 if ((c->x86 == 6 && c->x86_model == 0x19 &&
1790 (c->x86_stepping > 3 && c->x86_stepping < 8)) ||
1791 (c->x86 == 6 && c->x86_model == 0x1f) ||
1792 (c->x86 == 7 && c->x86_model == 0x1b)) {
1793 if (this_cpu_read(mce_num_banks) > 8)
1794 mce_banks[8].ctl = 0;
1795 }
1796
1797 intel_init_cmci();
1798 mce_adjust_timer = cmci_intel_adjust_timer;
1799 }
1800
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
On Mon, 9 Sep 2019, kbuild test robot <[email protected]> wrote:
>Hi Tony,
>
>I love your patch! Yet something to improve:
Glad to hear, thanks.
>
>[auto build test ERROR on linus/master]
>[cannot apply to v5.3-rc8 next-20190904]
>[if your patch is applied to the wrong git tree, please drop us a note to help
>improve the system]
>
>url:
>https://github.com/0day-ci/linux/commits/Tony-W-Wang-oc/x86-mce-Add-Zhao
>xin-MCE-support/20190909-190435
>config: i386-randconfig-b002-201936 (attached as .config)
>compiler: gcc-7 (Debian 7.4.0-11) 7.4.0
>reproduce:
> # save the attached .config to linux build tree
> make ARCH=i386
>
>If you fix the issue, kindly add following tag
>Reported-by: kbuild test robot <[email protected]>
>
>All errors (new ones prefixed by >>):
>
>>> arch/x86/kernel/cpu/mce/core.c:1780:6: error: redefinition of
>'mce_zhaoxin_feature_init'
> void mce_zhaoxin_feature_init(struct cpuinfo_x86 *c)
> ^~~~~~~~~~~~~~~~~~~~~~~~
> In file included from arch/x86/kernel/cpu/mce/core.c:50:0:
> arch/x86/include/asm/mce.h:356:20: note: previous definition of
>'mce_zhaoxin_feature_init' was here
> static inline void mce_zhaoxin_feature_init(struct cpuinfo_x86 *c) { }
> ^~~~~~~~~~~~~~~~~~~~~~~~
>
>vim +/mce_zhaoxin_feature_init +1780 arch/x86/kernel/cpu/mce/core.c
>
> 1779
>> 1780 void mce_zhaoxin_feature_init(struct cpuinfo_x86 *c)
> 1781 {
> 1782 struct mce_bank *mce_banks = this_cpu_ptr(mce_banks_array);
> 1783
> 1784 /*
> 1785 * These CPUs bank8 SVAD error may be triggered unexpected
>when
> 1786 * bringup virtual machine. it is not hardware bug. Always disable
> 1787 * bank8 SVAD error by default.
> 1788 */
> 1789 if ((c->x86 == 6 && c->x86_model == 0x19 &&
> 1790 (c->x86_stepping > 3 && c->x86_stepping < 8)) ||
> 1791 (c->x86 == 6 && c->x86_model == 0x1f) ||
> 1792 (c->x86 == 7 && c->x86_model == 0x1b)) {
> 1793 if (this_cpu_read(mce_num_banks) > 8)
> 1794 mce_banks[8].ctl = 0;
> 1795 }
> 1796
> 1797 intel_init_cmci();
> 1798 mce_adjust_timer = cmci_intel_adjust_timer;
> 1799 }
> 1800
>
Will fix this issue in V2.
>---
>0-DAY kernel test infrastructure Open Source Technology
>Center
>https://lists.01.org/pipermail/kbuild-all Intel Corporation