Messages in this thread Patch in this message | | | From | "Ghannam, Yazen" <> | Subject | [PATCH v2 6/6] x86/MCE: Treat MCE bank as initialized if control bits set in hardware | Date | Thu, 11 Apr 2019 20:18:04 +0000 |
| |
From: Yazen Ghannam <yazen.ghannam@amd.com>
The OS is expected to write all bits to MCA_CTL for each bank. However, some banks may be unused in which case the registers for such banks are Read-as-Zero/Writes-Ignored. Also, the OS may not write any control bits because of quirks, etc.
A bank can be considered uninitialized if the MCA_CTL register returns zero. This is because either the OS did not write anything or because the hardware is enforcing RAZ/WI for the bank.
Set a bank's init value based on if the control bits are set or not in hardware.
Return an error code in the sysfs interface for uninitialized banks.
Signed-off-by: Yazen Ghannam <yazen.ghannam@amd.com> --- Link: https://lkml.kernel.org/r/20190408141205.12376-3-Yazen.Ghannam@amd.com
v1->v2: * New in v2. * Based on discussion from v1 patch 2.
arch/x86/kernel/cpu/mce/core.c | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c index 71662133c70c..dcf5c6d72811 100644 --- a/arch/x86/kernel/cpu/mce/core.c +++ b/arch/x86/kernel/cpu/mce/core.c @@ -1572,6 +1572,9 @@ static void __mcheck_cpu_init_clear_banks(void) /* Save bits set in hardware. */ rdmsrl(msr_ops.ctl(i), b->ctl); + + /* Bank is initialized if bits are set in hardware. */ + b->init = !!b->ctl; } } @@ -2086,6 +2089,9 @@ static ssize_t show_bank(struct device *s, struct device_attribute *attr, b = &per_cpu(mce_banks, s->id)[bank]; + if (!b->init) + return -ENODEV; + return sprintf(buf, "%llx\n", b->ctl); } @@ -2104,6 +2110,9 @@ static ssize_t set_bank(struct device *s, struct device_attribute *attr, b = &per_cpu(mce_banks, s->id)[bank]; + if (!b->init) + return -ENODEV; + b->ctl = new; mce_restart(); -- 2.17.1
| |