[BitVisor-devel:79] Re: USBデバイスが突然stallする
Hideki EIRAKU
hdk @ igel.co.jp
2016年 3月 29日 (火) 16:40:56 JST
フィールドストーン 八木様
榮樂です。こんにちは。
From: 八木 豊志樹 <toshiki.yagi @ field-stone.jp>
Subject: [BitVisor-devel:77] Re: USBデバイスが突然stallする
Date: Sat, 26 Mar 2016 08:41:39 +0900
> ただ、stallを起こしていた箇所で発生しているUSBデバイス
> からの読み込みに失敗する件については直らなかったので、
> プロトコルアナライザを使って実際の通信を確認してみました。
>
> プログラム上では500msに1度usb_bulk_read を発行する動作と
> なります。
> その結果、以下の様な挙動を確認しました。
> → IN addr 02 ep 1
> ← D2 (18バイトデータ) (FTDIデバイスのモデムステータス+読みたいデータ)
> → ACK
> → IN addr 02 ep 1
> ← NAK
> → IN addr 02 ep 1
> ← NAK
> (以下暫く続く)
> →IN addr 02 ep 1
> ← DATA0 (2バイトデータ) (FTDIデバイスのモデムステータスのみ)
>
> この間約720usでした。実際に読みたいデータが捨てられてしまっている
> ように見えます。
プロトコルアナライザーをお持ちであれば、正常に使用できている環境 (通常
のオペレーティング・システムで使用するなど) と比較してみるとわかること
があります。USB バス上に読みたいデータがあらわれていない場合は、当然ソ
フトウェアでそのデータを得ることはできないため、正常な場合と比較して、
コマンド不足等の差異があれば修正を試みて、USB デバイスが望み通りに動か
ない原因を特定します。USB バス上にはデータがあらわれているのに
BitVisor 側でそれを得られない場合は、BitVisor 側のデバッグが必要になり
ます。
> なお、関係あるかどうかはわかりませんが、この状態でしばらく放置
> している(500msに1度usb_bulk_read)と、
> panic: Out of memory.
> でbitvisorが落ちてしまいました。
>
> この情報から何か分かることはありますでしょうか。
Out of memory. が出ているのは mm_init_global() 関数内か、あるいは、
panic_oom() 関数によるものかと思います。usb_bulk_read() 関数などを使用
しているということは mm_init_global() 関数の実行は終わっていなければな
りませんので、panic_oom() 関数のほうだと思います。
現在 panic_oom() 関数を使っているのは、core_io_register_handler() 関数
か、または、pci_find_devices() 関数となります。しかし、alloc() 関数は
NULL を返すことがありませんので、それを除外すると、
core_io_register_handler() 関数内で hd >= MAX_HD の条件が成り立つ場合
となります。ここから考えられるのは、core_io_register_handler() 関数が
何度も呼び出されている可能性があります。MAX_HD が 64 ですので、例えば
500ms に一度呼び出されれば、64*500ms=32000ms ほどで panic: Out of
memory. になる計算となります。
--
Hideki EIRAKU <hdk @ igel.co.jp>
BitVisor-devel メーリングリストの案内