Messages in this thread Patch in this message | | | Date | Fri, 17 May 2019 21:34:31 +0200 | From | Borislav Petkov <> | Subject | Re: [PATCH v3 5/6] x86/MCE: Save MCA control bits that get set in hardware |
| |
On Fri, May 17, 2019 at 11:06:07AM -0700, Luck, Tony wrote: > and thus end up with that extra level on indent for the rest > of the function.
Ok:
--- diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c index 5bcecadcf4d9..25e501a853cd 100644 --- a/arch/x86/kernel/cpu/mce/core.c +++ b/arch/x86/kernel/cpu/mce/core.c @@ -1493,6 +1493,11 @@ static int __mcheck_cpu_mce_banks_init(void) for (i = 0; i < n_banks; i++) { struct mce_bank *b = &mce_banks[i]; + /* + * Init them all, __mcheck_cpu_apply_quirks() is going to apply + * the required vendor quirks before + * __mcheck_cpu_init_clear_banks() does the final bank setup. + */ b->ctl = -1ULL; b->init = 1; } @@ -1562,6 +1567,7 @@ static void __mcheck_cpu_init_generic(void) static void __mcheck_cpu_init_clear_banks(void) { struct mce_bank *mce_banks = this_cpu_read(mce_banks_array); + u64 msrval; int i; for (i = 0; i < this_cpu_read(mce_num_banks); i++) { @@ -1569,7 +1575,13 @@ static void __mcheck_cpu_init_clear_banks(void) if (!b->init) continue; + + /* Check if any bits are implemented in h/w */ wrmsrl(msr_ops.ctl(i), b->ctl); + rdmsrl(msr_ops.ctl(i), msrval); + + b->init = !!msrval; + wrmsrl(msr_ops.status(i), 0); } } @@ -2095,6 +2107,9 @@ static ssize_t show_bank(struct device *s, struct device_attribute *attr, b = &per_cpu(mce_banks_array, s->id)[bank]; + if (!b->init) + return -ENODEV; + return sprintf(buf, "%llx\n", b->ctl); } @@ -2113,6 +2128,9 @@ static ssize_t set_bank(struct device *s, struct device_attribute *attr, b = &per_cpu(mce_banks_array, s->id)[bank]; + if (!b->init) + return -ENODEV; + b->ctl = new; mce_restart(); -- Regards/Gruss, Boris.
Good mailing practices for 400: avoid top-posting and trim the reply.
| |