I have noticed that Linus has added the code for detecting and avoiding
the Pentium F0 bug. I assume he disassembled the BSDI patch, adapted it
to Linux use and included it in the 2.1.63 kernel source.
Congratulations! :-)
Meanwhile, I received an official answer from Cyrix. They sent me a
140-byte DOS utility, *without the source*. Yes, they followed Intel's
diselegant example :-(
Of course I disassembled it. What this utility does is that it
selectively disables the pipelines only for the xchg instruction, which
was causing the Cyrix COMA (similar to the Pentium DEATH).
It makes use of a few 6x86 undocumented registers. A very simple set6x86
script will take care of that:
WITH MAPEN ENABLED:
set6x86 -p 0x31 -s 0xF8
set6x86 -p 0x32 -s 0x7f
set6x86 -p 0x33 -c 0xFF
set6x86 -p 0x3c -s 0x87
Be careful to copy exactly as shown, particularly the -c on the third
line. Basically what this script does is setup the 6x86 for detection of
the xchg opcode (0x87). When detected in the instruction stream, the
xchg opcode will be serialized.
I have tested it and it effectively avoids the bug. It doesn't seem to
have any negative side-effects either, but more testing is needed. If it
proves inocuous, it can be used instead of my NO_LOCK workaround, if the
later proves problematic on some systems.
Regards,
========================================================
Andrew D. Balsa
Home Page: http://www.tux.org/~balsa
andrewbalsa@usa.net
========================================================
PS: If you forward this information to Bugtraq or any newsgroups, please
do _not_ snip any part away. Thanks.