Messages in this thread | | | From | Tony W Wang-oc <> | Subject | 答复: [PATCH v2 1/4] x86/mce: Add Zhaoxin M CE support | Date | Wed, 11 Sep 2019 10:10:48 +0000 |
| |
On Tue, Sep 10, 2019, Borislav Petkov wrote: >On Tue, Sep 10, 2019 at 08:19:08AM +0000, Tony W Wang-oc wrote: >> All Zhaoxin newer CPUs support MCE that compatible with Intel's >> "Machine-Check Architecture", so add support for Zhaoxin MCE in >> mce/core.c. >> >> Signed-off-by: Tony W Wang-oc <TonyWWang-oc@zhaoxin.com> >> --- >> arch/x86/kernel/cpu/mce/core.c | 30 ++++++++++++++++++++++++------ >> 1 file changed, 24 insertions(+), 6 deletions(-) >> >> diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c >> index 743370e..3f878f6 100644 >> --- a/arch/x86/kernel/cpu/mce/core.c >> +++ b/arch/x86/kernel/cpu/mce/core.c >> @@ -488,8 +488,9 @@ int mce_usable_address(struct mce *m) >> if (!(m->status & MCI_STATUS_ADDRV)) >> return 0; >> >> - /* Checks after this one are Intel-specific: */ >> - if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL) >> + /* Checks after this one are Intel/Zhaoxin-specific: */ >> + if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL && >> + boot_cpu_data.x86_vendor != X86_VENDOR_ZHAOXIN) >> return 1; >> >> if (!(m->status & MCI_STATUS_MISCV)) >> @@ -510,7 +511,8 @@ bool mce_is_memory_error(struct mce *m) >> if (m->cpuvendor == X86_VENDOR_AMD || >> m->cpuvendor == X86_VENDOR_HYGON) { >> return amd_mce_is_memory_error(m); >> - } else if (m->cpuvendor == X86_VENDOR_INTEL) { >> + } else if (m->cpuvendor == X86_VENDOR_INTEL || >> + m->cpuvendor == X86_VENDOR_ZHAOXIN) { >> /* >> * Intel SDM Volume 3B - 15.9.2 Compound Error Codes >> * > >Make that a switch-case for better readability pls.
Ok.
> >> @@ -1697,6 +1699,21 @@ static int __mcheck_cpu_apply_quirks(struct >cpuinfo_x86 *c) >> if (c->x86 == 6 && c->x86_model == 45) >> quirk_no_way_out = quirk_sandybridge_ifu; >> } >> + >> + if (c->x86_vendor == X86_VENDOR_ZHAOXIN) { >> + /* >> + * All newer Zhaoxin CPUs support MCE broadcasting. Enable >> + * synchronization with a one second timeout. >> + */ >> + 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 > 6) { > >Can this be simplified into maybe something like this: > > if (c->x86 > 6 || (c->x86_model == 0x19 || c->x86_model == 0x1f)) > >this is, of course, assuming that Zhaoxin doesn't do family < 6 and that >the other steppings for model 0x19 don't matter because they don't exist >or so... >
Yes, Zhaoxin doesn't do family<6, and the other steppings for model 0x19 doesn't have MCA. So will simplified like this: if (c->x86 > 6 || (c->x86_model == 0x19 || c->x86_model == 0x1f))
Sincerely TonyWWang-oc
| |