On Thu, May 16, 2019 at 08:20:58PM +0000, Ghannam, Yazen wrote: > We don't actually know if there are bits set in hardware until we read > it back. So I don't think this is adding anything new.
Bah, of course. We need to read it first (pasting the whole function). Now, __mcheck_cpu_init_clear_banks() gets called when we change configuration too, in mce_cpu_restart() and if we do it this way, we'll be rereading MCi_CTL each time but I don't see anything wrong with that. Hmmm? static void __mcheck_cpu_init_clear_banks(void) { struct mce_bank *mce_banks = this_cpu_read(mce_banks_array); int i; for (i = 0; i < this_cpu_read(mce_num_banks); i++) { struct mce_bank *b = &mce_banks[i]; rdmsrl(msr_ops.ctl(i), b->ctl); /* Bank is initialized if bits are set in hardware. */ b->init = !!b->ctl; if (b->init) { wrmsrl(msr_ops.ctl(i), b->ctl); wrmsrl(msr_ops.status(i), 0); } } } -- Regards/Gruss, Boris. Good mailing practices for 400: avoid top-posting and trim the reply.