Hatena::ブログ(Diary)

だえもんだもん

2011-03-26

PT1/PT2 driver for FreeBSD-8

| 00:26

up0309.gzです。gz->tar.gzはお約束。

これで複数枚いければ良いのですが。。。

よっちいよっちい 2011/03/27 08:46 ドライバを更新しようと kldunloadを実行しようとしたところ,リブートしました.(^^;

panic: free: address 0x1a59000(0x1a59000) has not been allocated.

cpuid = 0
KDB: stack backtrace:
#0 0xffffffff805f4e0e at kdb_backtrace+0x5e
#1 0xffffffff805c2d07 at panic+0x187
#2 0xffffffff805affe7 at free+0xc7
#3 0xffffffff80ee496d at free_dmabuf+0x3d
#4 0xffffffff80ee49cd at ptx_dma_free+0x3d
#5 0xffffffff80ee20fb at ptx_detach+0xbb
#6 0xffffffff805ee324 at device_detach+0x84
#7 0xffffffff805ee92c at driver_module_handler+0x37c
#8 0xffffffff805b20e9 at module_unload+0x49
#9 0xffffffff805a9848 at linker_file_unload+0x178
#10 0xffffffff805ab507 at kern_kldunload+0x117
#11 0xffffffff80600dd5 at syscallenter+0x1e5
#12 0xffffffff808aca5b at syscall+0x4b

なにかあるんでしょうね....

bsdaemonbsdaemon 2011/03/27 12:53 うひゃー、orz でも転んでも泣いてはダメです。
detatchはまともに実装してません。suspendも左に同じ。kthreadを綺麗に止めて、また動かせる気がしないので、いつもmake installしたらrebootしてました。
しかし変な場所で死んでるな…覚悟ができたらunloadしてみます。

TosyTosy 2011/03/29 13:11 お疲れさまです。本番機を2枚挿しに戻したので、色々試してみました。ブースタ追加したら受信状況が大幅に改善されたので(MXが+4dBくらい)。

ただ、全体的な状況としては「幻バージョン改」と同じような感じです。一番重い条件として試した8TS×(b25+tsstrip)×約10分間の動作では、micropacket errorが33個、drop(s->drop+=1の回数)が18個ほど出てます。ちなみに8TSで後段を外すと0個/1個、4TSの重い条件で8個/0個、軽い条件で0個/0個。

ぱっと見、micorpacket errorとdropの発現傾向にも相関は感じられません。dropは後段が重いから出てるとしても、micropacket errorはどういう条件で出てるのでしょうかね…。

bsdaemonbsdaemon 2011/04/02 11:44 うーん、ダメですか。
micropacket errorでreset_dmaしちゃうと、リングバッファを全部破棄して、しかも録画終了と開始を上げ下げしなおす時間もあるから、4TS全部が大きくふっとびますもんね。悲しい。

PT2からは、4byteのmicropacket単位でデータが書き込まれるはずで、ヘッダにありえない値が入っている、というのがぽろぽろ起きるとなると。。。バッファのalignmentかboundaryに制約があるのかしら。micropacket errorが起こるメモリアドレスに何か共通点があったりする?試してみたいところですが、うーん、PT2が¥10kくらいにならんかな(^^;

よっちいよっちい 2011/04/09 14:49 kldunloadできない件ですけれども,bus_dmamem_free() の引数が違ってそうな気がします.

誤 : bus_dmamem_free(dmat, dmabuf->pa, dmabuf->map);
正 : bus_dmamem_free(dmat, dmabuf->va, dmabuf->map);

気のせいだったらゴメンなさい.

その他もちょっといじったパッチを2senに上げてみました(up0310.gz).

bsdaemonbsdaemon 2011/04/10 10:25 > bus_dmamem_free() の引数が違ってそうな気がします.
こ、これはビンゴですね。さすがにこれでは死ぬ。というか、これまでkldunload試してなかったのがばればれだ。

あとはざっと眺めた感じ、kthreadが止まるのを待たずにdmaバッファをfreeしちゃってるので、運が悪いとそこでふっとぶかもしれません。だってkthread_joinみたいなのがないんだもの。。。cond var.でcv_waitさせるのかなあ。

ともあれ、他の変数型の修正と合わせて、取り込ませていただきます。ありがとうございました。

トラックバック - http://d.hatena.ne.jp/bsdaemon/20110326/1301153206