Debugging With "git bisect"

http://kerneltrap.org/?q=node/11753
kernelをアップデートした際に、以前は動いていた機能が使えなくなった場合の対処法、についての話。

initが起動する前にkernelが死んでしまい、ログが見えない時の対処法

netconsole*1を使う。固まった時に、ALT-SYSRQ-tによりタスクトレースを表示する*2
タスクトレースの例

firefox-bin S C03E5236 0 27495 27474 27496 27494 (NOTLB)
deb3dea0 00000086 00000002 c03e5236 08e28000 08e28000 c0159f0b 0000000a
f5c98a70 4d700e00 00004fee 00000000 f5c98b7c c012392e deb3deb4 014fb180
00000000 dfcffac0 deb3deb4 05387194 000000fb f5c98a70 c03e5236 deb3deb4
Call Trace:
[] schedule_timeout+0x89/0xa7
[] find_extend_vma+0x20/0x61
[] lock_timer_base+0x1d/0x4d
[] schedule_timeout+0x89/0xa7
[] futex_wake+0xc7/0xd1
[] process_timeout+0x0/0x9
[] do_futex+0x1da/0xcfa
[] default_wake_function+0x0/0x15
[] vfs_write+0x130/0x170
[] sys_futex+0x102/0x115
[] sysenter_past_esp+0x56/0x79
=======================

カーネルアップデートに伴うどのパッチが問題を起こしているかを調べる方法

git bisectを使う。

参考

*1:http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.6/networking/netconsole.txt.html

*2:カーネル設定でCONFIG_MAGIC_SYSRQを有効にする。カーネルのブートオプションにignore_loglevelを指定する