(toppers-users 2683) Re: Tinet でバスエラーが発生 (解決)
ABE Tsukasa
abe @ jo.tomakomai-ct.ac.jp
2007年 10月 10日 (水) 18:59:30 JST
システムクリエイト 高橋様
苫小牧高専、情報工学科の阿部です。
ずいぶん時間が経ってしまいました。申し訳ありません。
現在 TINET リリース 1.4 の準備をしています。
さて、
>【現象】
>SH7616 のイーサネットコントローラは送受信バッファの先頭は16Byteアライメントで
>ないといけないがドライバはそうなっていない。そのため、大量のデータを短時間に
>送受信すると固定長メモリ管理が破綻しバスエラーが発生する。
>また、TINETも現状では対応できない状態である。
の件です。
時間が経っているため、認識不足があればお許しください。
>【対策】
>TINETが管理するバッファとは別にコントローラが送受信する16Byteアライメントの
>バッファを用意するのが本筋だと考えられるが、そうすると TINET の『速度を犠牲に
>してもメモリを節約する』という趣旨に反するため、TINETが用意するバッファを16Byte
>アライメント調節にできるように若干増やし、送信時はTINETで生成した送信データを
>コントローラが使用する位置へコピー、受信時はコントローラが受信したデータをTINET
>が扱う位置へコピーすることで解決することとする。
>なお、この際 IPヘッダのアドレスが 4Byteアライメントになるように注意する。
>
>実際の変更内容は下記の通り。
>
>1.TINET
> 1)新たに送受信バッファアライメントを指定する IF_ETHER_NIC_BUF_16BYTE_ALIGNMENT
> という定義を設ける。この定義を tinet_nic_defs.h に下記のように追加する。
>
> #define IF_ETHER_NIC_BUF_16BYTE_ALIGNMENT /* 送受信バッファは16Byteアライメント */
>
> 2)TINET は送受信バッファのアライメントに関して考慮していない。
> 送受信バッファは T_NET_BUF_IF_PDU などで下記のように定義されている。
> typedef struct t_net_buf_if_pdu {
> UB idix; /* mpfid のインデックス */
> UB unit; /* インタフェース番号 */
> UH len; /* データの長さ */
> #if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
> UB align[4 - IF_HDR_ALIGN]; <--- ★これを増やす。
> #endif
> UB buf[IF_PDU_SIZE]; /* バッファ本体 */ <--- ★TINETが取り扱う送受信データ
> } T_NET_BUF_IF_PDU;
この部分については、
#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
UB align[IF_HDR_ALIGN];
#endif
と変更すると、
> アライメントについては IF_HDR_ALIGN を指定することで IPアドレスを4Byte
> アライメント調節にできるようになっているが、送受信バッファについては考慮
> されていない。そこで、align を少し多めに取り、16Byteアライメントでかつ必要
> な大きさのバッファを確保できるようにする。
>
> 実際には、若干トリッキーだが 下記のようにして align の大きさを 14 とする。
> 14という値は、16Byteアライメントの領域が確保でき、かつIPヘッダのIPアドレス
> が4Byteアライメントなるようにした値である。
>
> #if 0 /* 147行目 変更前 */
> #define IF_HDR_ALIGN 2 /* ヘッダのアライン単位 */
> #else /* 変更後 */
> #ifdef IF_ETHER_NIC_BUF_16BYTE_ALIGNMENT
> #define IF_HDR_ALIGN (-10)
> #else
> #define IF_HDR_ALIGN 2 /* ヘッダのアライン単位 */
> #endif
> #endif
この部分については、トリッキーなことをせずに、
#ifdef IF_ETHER_NIC_BUF_16BYTE_ALIGNMENT
#define IF_HDR_ALIGN 14
#else
#define IF_HDR_ALIGN 2 /* ヘッダのアライン単位 */
#endif
と出来ると思います。
なお、上記の部分は、tinet/net/ethernet.h と考えています。
対応が遅れ、大変申し訳ありませんが、
確認をお願いいたします。
--
.\" 苫小牧工業高等専門学校 情報工学科 教授 阿部 司
.\" E-mail: abe @ jo.tomakomai-ct.ac.jp TEL/FAX: 0144-67-8937