通常日記 | 分類別 ABC 順 | 北目式分類 | macppc/ | port-macppc 全文検索 | NetBSD (old) | NetBSD 解説 | PHP+Postgresql | PowerMac7220/4400 雑記帳 | 4400/200

NetBSD/macppc StarMax 専用

macppc の中でも Tanzania 板を使っているものは少し特殊なので、 それに限った記録はこちらに書きます。
(Motorola StarMax, PowerMac 4400 など)
hns - 日記自動生成システム - Version 2.19.9

先月 2006年11月 来月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Namazu for hns による簡易全文検索
詳しくは 詳細指定/ヘルプを参照して下さい
検索式:

2006年11月15日(水) [n年日記] Last Update: "2006/12/12 23:32:41"

#1 [4.99.3] gcc-3.4.6

login: Nov 15 06:50:14 livorno getty[588]: /dev/ttyE0: Device not configured
tlp0: transmit underrun; new threshold: 96/256 bytes
trap type 200 at 3a5b38
Stopped in pid 627.1 (cvs) at   netbsd:cache_lookup+0xc4:       cmpw    7,0,30
db> tlp0: receive ring overrun
reboot
syncing disks... 21 14 9 done
unmounting file systems...panic: lockmgr: draining against myself
single user で network が動いていない時でも
gcc-3.4.4/gcc/config/alpha/alpha.h
gcc-3.4.4/gcc/config/alpha/alpha.md
gcc-3.4.4/gcc/configtrap type 300 at 3a5b34
Stopped in pid 22.1 (tar) at/alpha/crtfa    netbsd:cache_lookup+0xc0:       lwz     0,32(31)

db> stbmatth
.c
gcat ufs_lookup+110
c-3.4.4/at VOP_LOOKUP+34
gcc/coat lookup+2f4
nfig/aat namei+10c
lpha/eat vn_open+90
lf.h
at sys_open+e0
at syscall_plain+14c
at setfault+c54
db> 
(上の表示を整理すると)
gcc-3.4.4/gcc/config/alpha/alpha.h
gcc-3.4.4/gcc/config/alpha/alpha.md
gcc-3.4.4/gcc/config/alpha/crtfastmath.c
gcc-3.4.4/gcc/config/alpha/elf.h

trap type 300 at 3a5b34
Stopped in pid 22.1 (tar) at netbsd:cache_lookup+0xc0:       lwz     0,32(31)
db> 
また back trace は
db> bt
at ufs_lookup+110
at VOP_LOOKUP+34
at lookup+2f4
at namei+10c
at vn_open+90
at sys_open+e0
at syscall_plain+14c
at setfault+c54
register:
db> show registers
r0          0x59d80000
r1          0xe537abf0
r2          0
r3          0x39aae70
r4          0xe537ae88
r5          0xe537ae9c
r6          0
r7          0x1
r8          0x4ee8f70
r9          0x30
r10         0xc00c
r11         0xe0184000
r12         0x20004084
r13         0
r14         0x200
r15         0
r16         0
r17         0
r18         0
r19         0xe537acd8
r20         0
r21         0x20
r22         0x8
r23         0x200
r24         0x39aae70
r25         0xe537ae9c
r26         0xe537ae88
r27         0x39aae70
r28         0xe537ae9c
r29         0xe537ae9c
r30         0x39aae70
r31         0x6a980000
iar         0x3a5b34    cache_lookup+0xc0
msr         0x9032
lr          0x2f9b8c    ufs_lookup+0x114
ctr         0x2fddc8    ufs_access
cr          0x20044084
xer         0x1
netbsd:cache_lookup+0xc0:       lwz     0,32(31)
db> 

#2 [4.99.3] 整理してみる

  1. sys/kern/vfs_cache.c の inline cache_lookup_entry() の中で落ちる
    150:        LIST_FOREACH(ncp, ncpp, nc_hash) {
    151:                if (ncp->nc_dvp == dvp &&
    152:                    ncp->nc_nlen == cnp->cn_namelen &&
    153:                    !memcmp(ncp->nc_name, cnp->cn_nameptr, (u_int)ncp->nc_nlen))
    154:                        break;
    155:        }
    
    この部分のコードは 2004/04/05 から変化がない
  2. cvs update, tar zxf などの操作中
  3. 落ちるのに 5 分もあれば充分
  4. trap type 300 (Data Storage Interrupt) または trap type 200 (Machine Check)
    trap type 300 at 38f554
    Stopped in pid 3873.1 (tar) at  netbsd:cache_lookup+0x8c:       lwz     0,32(31)
    
    db> tlp0: receive ring overrun
    
    trap type 200 at 38f91c
    Stopped in pid 724.1 (cvs) at   netbsd:cache_lookup_raw+0x8c:   cmpw    7,30,0
    db> tlp0: receive ring overrun
    
    inline 展開されているので、落ちる場所はいくつかある
  5. (多分)主に落ちるコードは inline cache_lookup_entry の中の(この例で言えば 0x003a6170 の) 次のところで、r31 が 0x6a980000 のような 困る値になっている
         lwz     0,32(31)
    
    上の objdump -d の例では (inline が解除されているので) r31 でなく r9 になっている
  6. これは sys/sys/queue.h の 163-166 行目の次の部分が展開された部分だと思われる
     #define	LIST_FOREACH(var, head, field)					\
     	for ((var) = ((head)->lh_first);				\
    		(var);							\
     		(var) = ((var)->field.le_next))
    
    このうちの最後の行だと思われる。この部分は 6 年くらい前から同じ。
  7. 今回調べているのは主として 4.99.3 と gcc 4.1.2 の組合せ
  8. vfs_cache.c を cc するのに
    • -O2 を -O1 にすると、若干落ちにくくなるような気はするが 多分関係ない
    • -O2 を -O0 または (何もなし)にすると、inline 展開がなくなるが、 それでも同じ
    • gcc 3.4.6 で作って見たが、 同様に落ちる
  9. 機種は S-900, mini, 4400/200 など様々
  10. NIC は (殆んど) tlp0。でも gm0 (mini) もある
  11. 版は 3.99.21, (tlp0) 4.99.1, 4.99.3 など
  12. ただし 3.99.21 は問題なく動いている機械もある(gm0)。4.99.3 は動いている機械がない。 (ここまで全て TsubaiBSD)
  13. NIC が関係ありそうな気がするので、 single user で NIC が動いていないはずの 状態で (local の) tar を開けて見るが、やはり 全く同様に落ちる
    trap type 300 at 3a5b34
    Stopped in pid 22.1 (tar) at netbsd:cache_lookup+0xc0:       lwz     0,32(31)
    db> 
    
  14. kuro-hg (sandpoint/TNF) 4.99.3 は多分問題なく動いている(re0)

3.99.15 (20060101) では問題なし:

何と kernel だけ新しくしても問題ない .... (場合もある) ...

kernel(2006)

3.99.153.99.173.99.193.99.203.99.214.99.14.99.3
userland ↓
04/0805/0605/276/056/166/256/2807/02(2)07/02(UTC)8/2210/08
3.99.15








3.99.17--








×
3.99.19----




×

3.99.20------×○(*1)

3.99.21------
--






4.99.3------
--





×
(*1) ×は、以前に snapshot を作った時の kernel(GENERIC)。 ○は、今回同じ src から作り直したもの。 L2-1M-PB2-SHM ではあるが、実は違うはずはない .. 速度的な違いがあるかも知れない。 念為×となっている方を再試したが、やはり× (GENERIC)。 GENERIC を作り直したが、○。ここは「作り直すと○」以前のものだと×。ということになっている。

(いま手元で使っている機械も、3.99.21 だけれど、問題ない ..)
ちなみに HAVE_GCC = 4 になったのは Jun 24, 2006 → share/mk/bsd.own.mk
ただし要注意なことは(僕の作っている) TsubaiBSD の場合 snapshot の kernel を make して いる cc は必ずしも、それと連動していない。
今気が付いた。make clean しないで make している。
今回新たに作っている kernel は全て gcc-4.1.2 による... と思ったが、

  • 一度ちょっと試そうと lang/gcc34 を入れた (tsubai patch 入)
  • 信じられないことに $path に (ずうっと昔から) /usr/pkg/gcc34/bin が入っていた
  • どうも、そういう問題の気がする
  • 例えば 20061008 を (gcc34 で) make しようとすると ..
    cc1: error: unrecognized command line option "-Wno-pointer-sign"
    cc1: error: unrecognized command line option "-Wno-attributes"
    
    . if ${HAVE_GCC} > 3
    
    で避けてある ..
     env HAVE_GCC=3 make
    
    とすればいい
ここまでの感触は、gcc-34 (3.4.6) で作ると問題なし、gcc-4.1.2 だと 問題あり。


最近の日記
以上、1 日分です。
タイトル一覧
カテゴリ分類
Powered by hns-2.19.9, HyperNikkiSystem Project

Count.cgi (since 2000/03/03)