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新しいリビジョンの物が書かれていれば大丈夫だろうと云う
想定の元で比較かなぁ。



追記