Corey Minyard <minyard@xxxxxxx> writes:
I had a customer on x86 notice that sometimes offset 0xf in the CMOS
RAM was getting set to invalid values. Their BIOS used this for
information about how to boot, and this caused the BIOS to lock up.
They traced it down to the following code in arch/kernel/traps.c (now
in include/asm-i386/mach-default/mach_traps.c):
outb(0x8f, 0x70);
inb(0x71); /* dummy */
outb(0x0f, 0x70);
inb(0x71); /* dummy */
Just use a different dummy register, like 0x80 which is normally used
for delaying IO (I think that is what the dummy access does)
But I'm pretty sure this NMI handling is incorrect anyways, its
use of bits doesn't match what the datasheets say of modern x86
chipsets say. Perhaps it would be best to just get rid of that legacy register twiddling completely.
I will also remove it from x86-64.
-Andi