ℹ️本記事は古いコンテンツを変換して表示しています。
表示が崩れたり、リンクが正しくない可能性があります。ご了承ください。
ℹ️本記事は古いコンテンツを変換して表示しています。
表示が崩れたり、リンクが正しくない可能性があります。ご了承ください。
2016/07/31 03:07 : カーネルデバッグに手を染めてみる(2)
前回からの続き。
VMを使えばシリアルポートなんて簡単に接続できることに、いまさら気づいた。(始めてから2週間くらい)機材そろえちゃったよ……。
気を取り直して、ハマっているbio(I/O)を探してみる。(そしてこれもうまくいかなかった。)
前回からの続き。
VMを使えばシリアルポートなんて簡単に接続できることに、いまさら気づいた。(始めてから2週間くらい)機材そろえちゃったよ……。
気を取り直して、ハマっているbio(I/O)を探してみる。(そしてこれもうまくいかなかった。)
sys/geom/geom_io.cによれば、g_bio_run_(down|up|task)
の3つのキューがあるらしい。
キューはstruct g_bioq
で、宣言はsys/geom/geom.hにある。
struct g_bioq { TAILQ_HEAD(, bio) bio_queue; struct mtx bio_queue_lock; int bio_queue_length; };
#define TAILQ_HEAD(name, type) \ struct name { \ struct type *tqh_first; /* first element */ \ struct type **tqh_last; /* addr of last next element */ \ TRACEBUF \ }
とりあえず1つ追ってみる。
db> print g_bio_run_up ffffffff81c208d0 db> x/gx g_bio_run_up g_bio_run_up: 0
と思ったらそもそもキューが空だった。down/taskもからっぽ。そもそも当てずっぽうだったから、原因にすぐたどり着くとは思ってなかったけど、ちょっと残念。