Core2系CPUのerrata (2)
前回の続き。
BIOSアップデートでの対応は再起動必要になるので、再起動出来ない所向けに
どうにか出来ないか頑張ってみるテスト。
linux kernel の arch/i386/kernel/microcode.c を眺めていたら
マイクロコードのリビジョンらしき物が拾えるのを見つけた。
出力されるのはMICRO_DEBUG付きでビルドしたときのみなので、既に動いている
状態のホストで出力するように変更は出来ない。
実際に値が入っているのはMSRで、rdmsr命令経由でMSR_IA32_UCODE_REV(0x8B)
渡して呼ぶとマイクロコードのリビジョンが取れる模様。
この命令自体は特権命令なのでring 0で呼ぶ必要があり、ユーザランドからは呼べない。
なので、arch/i386/kernel/microcode.c:collect_cpu_info相当の
ルーチンを呼ぶだけのLKM書いて適当に対応。
# insmod hoge.ko # dmesg | grep hoge | tail -1 hoge: sig=0xf29, pf=0x4, rev=0x2e, cksum=0x0
と何となく取れてるっぽい。
あとは、BIOSアップデート経由で更新した物とmicrocode_ctlで更新した物
を比較して、同じor新しいリビジョンの物が書かれていれば大丈夫だろうと云う
想定の元で比較かなぁ。
追記