[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[netbsd,09312] Re: Invalid VA in TX mbuf chain
- To: netbsd@xxxxxxxxxxxxx
- Subject: [netbsd,09312] Re: Invalid VA in TX mbuf chain
- From: Izumi Tsutsui <tsutsui@xxxxxxxxxxxxxxx>
- Date: Sat, 17 Jun 2006 12:45:22 +0900
- Cc: tsutsui@xxxxxxxxxxxxxxx
- In-reply-to: <060410212936.M0113388@xxxxxxxxxxxxxxxxxxxxxx>
筒井です。
<060410212936.M0113388@xxxxxxxxxxxxxxxxxxxxxx>の記事において
私は書きました。
> ちまちまと個人的な TODO list を片付けていて、今度は
> NetBSD/cobalt に対して巨大なファイルを ftp で get すると
> r5k_pdcache_wb_range() の中で trap: TLB miss で panic する
> http://mail-index.netbsd.org/port-cobalt/2005/12/27/0003.html
> というのを調べてます。
:
> ここで MI の VM まわりの挙動について質問なんですが、
> bus_dmamap_load_mbuf() の時点では mbuf の VA は有効だったのに、
> bus_dmamap_sync() が呼ばれた時点ではその VA が無効になっている
> という現象は MI 側のカーネル VM の挙動として
> (1)あり得る。よって MD 側が何とかしないといけない。
> (2)あり得ない。MI 側のどこか、もしくは MD bus_dma ルーチンがおかしい。
> のどちらなのでしょう?
この件、 port-mips でも書いてますが、 options SOSEND_NO_LOAN をつけて
sys/kern/uipc_socket.c で sosend_loan() をしないようにすると
起きなくなるようです。
同じカーネルで use_sosend_loan=1 だと ftp での転送10回以内に
ほぼ 100%落ちますが、 use_sosend_loan=0 だと50回ほどやっても
落ちません。しかもなぜか use_sosend_loan=0 のときのほうが
転送速度はよくなります。
sosend_loan() で返ってくる mbuf のページは m_freem() するときに
soloanfree() が呼ばれて pmap_kremove() されるようですが、
tulip.c の tlp_start() では送信 mbuf を別の mbuf にコピー
していない限り bus_smamap_sync(,DMASYNC_PREWRITE) の前に
元の送信 mbuf に対して m_freem() を呼ぶところはないので
何が起こっているのかよくわかりません。
このへんをうまく追う方法ってなにかあるでしょうか。
---
Izumi Tsutsui