通常日記 | 分類別 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月11日() [n年日記] Last Update: "2006/12/12 23:32:17"

#1 [4.99.3] sysinst 中に

     Status: Running
    Command: progress -zf /mnt2//macppc/binary/sets/comp.tgz tar --chroot -xhep -

--- 89% |*************************     | 95454 KB    1.57 MB/s    00:07 ETA
Stopped in pid 75.1 (tar) at    0x38f608:       lwz     0,32(31)
db> bt
at 0x2e35e4
at 0x3a29ec
at 0x3932b0
at 0x392b88
at 0x39c91c
at 0x3ed9a0
at 0x3f15c4
db> show registers
r0          0xd8000000
r1          0xe53cdc70
r2          0
r3          0x3d0cdd8
r4          0xe53cde38
r5          0xe53cde4c
r6          0
r7          0x1
r8          0x5ed4f70
r9          0x30
r10         0xe01cb000
r11         0x800000
r12         0x20004084
r13         0
r14         0x200
r15         0
r16         0
r17         0
r18         0
r19         0xe53cdd68
r20         0
r21         0x20
r22         0
r23         0
r24         0x3d0cdd8
r25         0xe53cde4c
r26         0xe53cde38
r27         0xe53cde38
r28         0xe53cde4c
r29         0x18
r30         0x3d0cdd8
r31         0x38000000
iar         0x38f608
msr         0x9032
lr          0x2e35e8
ctr         0x2e7824
cr          0x20044084
xer         0x1
0x38f608:       lwz     0,32(31)
db> 
See man ddb 違う disk を付けたら、無事完了して、pkg_add 中

pkg_add 中に同じ問題:

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
bt
at ufs_lookup+110
at VOP_LOOKUP+34
at lookup+2f4
at namei+10c
at rename_files+114
at syscall_plain+14c
at setfault+c54
db> show register
r0          0xb4d80000
r1          0xe53c7c70
r2          0
r3          0x59832b8
r4          0xe53c7e84
r5          0xe53c7e98
r6          0
r7          0x1
r8          0x5ed3d00
r9          0x30
r10         0xe01d1000
r11         0x600000    fragttl_histo+0xb4
r12         0x20000084
r13         0
r14         0x200
r15         0
r16         0
r17         0
r18         0
r19         0xe53c7d68
r20         0
r21         0
r22         0x8
r23         0
r24         0x59832b8
r25         0xe53c7e98
r26         0xe53c7e84
r27         0xe53c7e84
r28         0xe53c7e98
r29         0x1c
r30         0x59832b8
r31         0x21f80000
iar         0x38f554    cache_lookup+0x8c
msr         0x9032
lr          0x2e35e8    ufs_lookup+0x114
ctr         0x2e7824    ufs_access
cr          0x20040084
xer         0x1
netbsd:cache_lookup+0x8c:       lwz     0,32(31)
db> 

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

#1 [4.99.3] trap type 200 at 38f91c

かなり頻繁に起きる
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
bt
at nfs_lookup+f0
at VOP_LOOKUP+34
at lookup+2f4
at namei+10c
at vn_open+174
at sys_open+e0
at syscall_plain+14c
at setfault+c54
db> show registers
r0          0xffffffff
r1          0xe5550ba0
r2          0
r3          0x47cec88
r4          0xe5550e88
r5          0xe5550e9c
r6          0
r7          0
r8          0x2f
r9          0x30
r10         0xe0185000
r11         0x600000    fragttl_histo+0x8c
r12         0x22002024
r13         0
r14         0x18a0000
r15         0x18a0000
r16         0x1880000
r17         0x18aec00
r18         0x18ce080
r19         0xe5550cd8
r20         0
r21         0x20
r22         0
r23         0
r24         0x1
r25         0xe5550e88
r26         0x84044
r27         0xe5550e88
r28         0xe5550e9c
r29         0x3
r30         0x47cec88
r31         0x89f00000
iar         0x38f91c    cache_lookup_raw+0x8c
msr         0x49030
lr          0x28b520    nfs_lookup+0xf4
ctr         0x28b42c    nfs_lookup
cr          0x22022028
xer         0x6
netbsd:cache_lookup_raw+0x8c:   cmpw    7,30,0
db> 

2006年11月13日(月) [n年日記] Last Update: "2006/12/12 23:32:31"

#1 [4.99.3] trap type 300 at 38f918

10/20 の続き
trap type 300 at 38f918
Stopped in pid 446.1 (cvs) at   netbsd:cache_lookup_raw+0x88:   lwz     0,32(31)

db> bt
at nfs_lookup+f0
at VOP_LOOKUP+34
at lookup+2f4
at namei+10c
at vn_open+174
at sys_open+e0
at syscall_plain+14c
at setfault+c54
db> tlp0: receive ring overrun
show registers
r0          0x5a10e003
r1          0xe55dfba0
r2          0
r3          0x344ec88
r4          0xe55dfe88
r5          0xe55dfe9c
r6          0
r7          0
r8          0x2f
r9          0x30
r10         0xe0185000
r11         0x600000    fragttl_histo+0x8c
r12         0x22002024
r13         0
r14         0x18a0000
r15         0x18a0000
r16         0x1880000
r17         0x18aec00
r18         0x18a8140
r19         0xe55dfcd8
r20         0
r21         0x20
r22         0
r23         0
r24         0x1
r25         0xe55dfe88
r26         0x84044
r27         0xe55dfe88
r28         0xe55dfe9c
r29         0x3
r30         0x344ec88
r31         0x34a80000
iar         0x38f918    cache_lookup_raw+0x88
msr         0x9032
lr          0x28b520    nfs_lookup+0xf4
ctr         0x28b42c    nfs_lookup
cr          0x22022024
xer         0x6
netbsd:cache_lookup_raw+0x88:   lwz     0,32(31)
db> 
lwz     0,32(31)
Load Word and Zero  rD,d(rA) .... r31 + 32 を r0 に読む
r31         0x34a80000
となっているので 「0x34a80020 を読む」かな。確かに大きすぎる。880M ..
> bc
ibase = 16
34A80020
883425312
↓
883,425,312
  M   k

...obj/L2-1M-PB2-SHM)> objdump -S netbsd:

青: 参照
白: 変更(代入)
赤: 問題
0038f88c <cache_lookup_raw>:
  38f88c:       7c 08 02 a6     mflr    r0
  38f890:       94 21 ff d0     stwu    r1,-48(r1)
  38f894:       3d 20 00 60     lis     r9,96
  38f898:       93 61 00 1c     stw     r27,28(r1)
  38f89c:       7c 9b 23 78     mr      r27,r4
  38f8a0:       93 81 00 20     stw     r28,32(r1)
  38f8a4:       7c bc 2b 78     mr      r28,r5
  38f8a8:       93 c1 00 28     stw     r30,40(r1)
  38f8ac:       7c 7e 1b 78     mr      r30,r3
  38f8b0:       93 a1 00 24     stw     r29,36(r1)
  38f8b4:       93 e1 00 2c     stw     r31,44(r1)
  38f8b8:       90 01 00 34     stw     r0,52(r1)
  38f8bc:       81 29 e0 24     lwz     r9,-8156(r9)
  38f8c0:       2f 89 00 00     cmpwi   cr7,r9,0
  38f8c4:       41 9e 01 60     beq-    cr7,38fa24 <cache_lookup_raw+0x198>
  38f8c8:       83 a5 00 18     lwz     r29,24(r5)
  38f8cc:       2f 9d 00 1f     cmpwi   cr7,r29,31
  38f8d0:       41 9d 01 30     bgt-    cr7,38fa00 <cache_lookup_raw+0x174>
-----
  38f8d4:       81 45 00 1c     lwz     r10,28(r5)
  38f8d8:       3d 60 00 60     lis     r11,96
  38f8dc:       80 0b eb f0     lwz     r0,-5136(r11)
  38f8e0:       54 69 e8 fe     rlwinm  r9,r3,29,3,31
  38f8e4:       7d 29 52 78     xor     r9,r9,r10
  38f8e8:       3d 60 00 60     lis     r11,96
  38f8ec:       7d 29 00 38     and     r9,r9,r0
  38f8f0:       81 4b eb f4     lwz     r10,-5132(r11)
  38f8f4:       55 29 10 3a     rlwinm  r9,r9,2,0,29
  38f8f8:       7f e9 50 2e     lwzx    r31,r9,r10
  38f8fc:       2f 9f 00 00     cmpwi   cr7,r31,0
  38f900:       40 be 00 14     bne+    cr7,38f914 <cache_lookup_raw+0x88>
  38f904:       48 00 00 b8     b       38f9bc <cache_lookup_raw+0x130>

  38f908:       83 ff 00 00     lwz     r31,0(r31)
  38f90c:       2f 9f 00 00     cmpwi   cr7,r31,0
  38f910:       41 9e 00 ac     beq-    cr7,38f9bc <cache_lookup_raw+0x130>
  38f914:       80 1f 00 20     lwz     r0,32(r31)
-----
  38f918:       7f 9e 00 00     cmpw    cr7,r30,r0
  38f91c:       40 9e ff ec     bne+    cr7,38f908 <cache_lookup_raw+0x7c>
  38f920:       88 1f 00 34     lbz     r0,52(r31)
  38f924:       7f 9d 00 00     cmpw    cr7,r29,r0
  38f928:       40 9e ff e0     bne+    cr7,38f908 <cache_lookup_raw+0x7c>
  38f92c:       80 9c 00 14     lwz     r4,20(r28)
  38f930:       38 7f 00 35     addi    r3,r31,53
  38f934:       7f a5 eb 78     mr      r5,r29
  38f938:       48 15 ac 31     bl      4ea568 <memcmp>
  38f93c:       2c 03 00 00     cmpwi   r3,0
  38f940:       40 82 ff c8     bne+    38f908 <cache_lookup_raw+0x7c>
  38f944:       81 1f 00 08     lwz     r8,8(r31)
  38f948:       2f 88 00 00     cmpwi   cr7,r8,0
  38f94c:       41 9e 00 38     beq-    cr7,38f984 <cache_lookup_raw+0xf8>
  38f950:       80 1f 00 0c     lwz     r0,12(r31)
  38f954:       3d 60 00 60     lis     r11,96
  38f958:       39 6b ec 04     addi    r11,r11,-5116
0038fc04 <cache_enter>: の中に次の部分がある。これも cache_lookup_entry の inline (らしい)
 ..
  38fc90:       4b ff f7 01     bl      38f390 <cache_remove>
-----
  38fc94:       83 7c 00 1c     lwz     r27,28(r28)
  38fc98:       3f 00 00 60     lis     r24,96
  38fc9c:       57 d9 e8 fe     rlwinm  r25,r30,29,3,31
  38fca0:       80 18 eb f0     lwz     r0,-5136(r24)
  38fca4:       7f 29 da 78     xor     r9,r25,r27
  38fca8:       3e e0 00 60     lis     r23,96
  38fcac:       7d 29 00 38     and     r9,r9,r0
  38fcb0:       81 77 eb f4     lwz     r11,-5132(r23)
  38fcb4:       55 29 10 3a     rlwinm  r9,r9,2,0,29
  38fcb8:       7f e9 58 2e     lwzx    r31,r9,r11
  38fcbc:       2f 9f 00 00     cmpwi   cr7,r31,0
  38fcc0:       40 be 00 14     bne+    cr7,38fcd4 <cache_enter+0xd0>
  38fcc4:       48 00 00 54     b       38fd18 <cache_enter+0x114>
  38fcc8:       83 ff 00 00     lwz     r31,0(r31)
  38fccc:       2f 9f 00 00     cmpwi   cr7,r31,0
  38fcd0:       41 9e 00 48     beq-    cr7,38fd18 <cache_enter+0x114>
  38fcd4:       80 1f 00 20     lwz     r0,32(r31)
-----
  38fcd8:       7f 9e 00 00     cmpw    cr7,r30,r0
  38fcdc:       40 9e ff ec     bne+    cr7,38fcc8 <cache_enter+0xc4>
  38fce0:       88 bf 00 34     lbz     r5,52(r31)
  38fce4:       80 1c 00 18     lwz     r0,24(r28)
  38fce8:       7f 85 00 00     cmpw    cr7,r5,r0
  38fcec:       40 9e ff dc     bne+    cr7,38fcc8 <cache_enter+0xc4>
  38fcf0:       80 9c 00 14     lwz     r4,20(r28)
  38fcf4:       38 7f 00 35     addi    r3,r31,53
  38fcf8:       48 15 a8 71     bl      4ea568 <memcmp>
  38fcfc:       2f 83 00 00     cmpwi   cr7,r3,0
つまり r31 を変更しているのは
static inline struct namecache *
cache_lookup_entry(const struct vnode *dvp, const struct componentname *cnp)
の中。ここだけ最適化を外して作って見よう。

一部だけ cc -O1:

  1. まず普通に kernel を作っておいて
  2. obj/KERNEL に cd して、vfs_cache.o を消す
  3. 引続き Makefile の中の COPTS?= -O2 -pipe の -O2 を -O1 に変更
  4. TOOLDIR 変数に設定して make
   123  13:32   ./build.sh -T /export/20061008/checkout/src/tooldir.NetBSD-3.99.21-powerpc 
                kernel=L2-1M-PB2-SHM
   124  13:53   mv sys/arch/macppc/compile/obj/L2-1M-PB2-SHM/vfs_cache.o 
                   sys/arch/macppc/compile/obj/L2-1M-PB2-SHM/vfs_cache.o-keep2
   125  13:54   cd sys/arch/macppc/compile/obj/L2-1M-PB2-SHM
   126  13:54   vi Makefile
   134  13:56   rm vfs_cache.o
   135  13:56   env TOOLDIR=/export/20061008/checkout/src/tooldir.NetBSD-3.99.21-powerpc 
                make
これで見かけ上問題を回避出来たような気がする。 何故そう思うかと言って cvs update をすると必ず落ちていたのが、落ちなくなった。

ちなみに -O2 を単に消してしまうと mfmsr 等のシンボルが未定義となってしまう。

ld -N -Ttext 100000 -e __start -S -o netbsd ${SYSTEM_OBJ} vers.o
autoconf.o: In function `cpu_configure':
autoconf.c:(.text+0x194): undefined reference to `mfmsr'
autoconf.c:(.text+0x1a4): undefined reference to `mtmsr'
machdep.o: In function `sysctl_machdep_setup':
machdep.c:(.text+0x11f0): undefined reference to `mfpvr'
*** Error code 1

-O1 の時の objdump -d netbsd (cache_look_raw):

0038f8e0 <cache_lookup_raw>:
  38f8e0:       94 21 ff d0     stwu    r1,-48(r1)
  38f8e4:       7c 08 02 a6     mflr    r0
  38f8e8:       93 41 00 18     stw     r26,24(r1)
  38f8ec:       93 61 00 1c     stw     r27,28(r1)
  38f8f0:       93 81 00 20     stw     r28,32(r1)
  38f8f4:       93 a1 00 24     stw     r29,36(r1)
  38f8f8:       93 c1 00 28     stw     r30,40(r1)
  38f8fc:       93 e1 00 2c     stw     r31,44(r1)
  38f900:       90 01 00 34     stw     r0,52(r1)
  38f904:       7c 9a 23 78     mr      r26,r4
  38f908:       7c bc 2b 78     mr      r28,r5
  38f90c:       3d 20 00 60     lis     r9,96
  38f910:       81 29 de 54     lwz     r9,-8620(r9)
  38f914:       2f 89 00 00     cmpwi   cr7,r9,0
  38f918:       40 be 00 1c     bne+    cr7,38f934 <cache_lookup_raw+0x54>
  38f91c:       80 05 00 04     lwz     r0,4(r5)
  38f920:       54 00 04 a0     rlwinm  r0,r0,0,18,16
  38f924:       90 05 00 04     stw     r0,4(r5)
  38f928:       91 24 00 00     stw     r9,0(r4)
  38f92c:       38 60 ff ff     li      r3,-1
  38f930:       48 00 01 a8     b       38fad8 <cache_lookup_raw+0x1f8>
  38f934:       83 a5 00 18     lwz     r29,24(r5)
  38f938:       2f 9d 00 1f     cmpwi   cr7,r29,31
  38f93c:       40 bd 00 28     ble+    cr7,38f964 <cache_lookup_raw+0x84>
-----
  38f940:       3d 20 00 63     lis     r9,99
  38f944:       39 29 e1 a0     addi    r9,r9,-7776
  38f948:       81 69 00 14     lwz     r11,20(r9)
  38f94c:       39 6b 00 01     addi    r11,r11,1
  38f950:       91 69 00 14     stw     r11,20(r9)
  38f954:       80 05 00 04     lwz     r0,4(r5)
  38f958:       54 00 04 a0     rlwinm  r0,r0,0,18,16
  38f95c:       90 05 00 04     stw     r0,4(r5)
  38f960:       48 00 01 6c     b       38facc <cache_lookup_raw+0x1ec>

  38f964:       7c 7e 1b 78     mr      r30,r3
  38f968:       7c bb 2b 78     mr      r27,r5
  38f96c:       54 69 e8 fe     rlwinm  r9,r3,29,3,31
  38f970:       80 05 00 1c     lwz     r0,28(r5)
  38f974:       7d 29 02 78     xor     r9,r9,r0
  38f978:       3d 60 00 60     lis     r11,96
  38f97c:       80 0b ea 20     lwz     r0,-5600(r11)
  38f980:       7d 29 00 38     and     r9,r9,r0
  38f984:       3d 60 00 60     lis     r11,96
  38f988:       81 6b ea 24     lwz     r11,-5596(r11)
  38f98c:       55 29 10 3a     rlwinm  r9,r9,2,0,29
  38f990:       7f e9 58 2e     lwzx    r31,r9,r11
  38f994:       2f 9f 00 00     cmpwi   cr7,r31,0
  38f998:       41 9e 00 40     beq-    cr7,38f9d8 <cache_lookup_raw+0xf8>
  38f99c:       80 1f 00 20     lwz     r0,32(r31)
-----
  38f9a0:       7f 9e 00 00     cmpw    cr7,r30,r0
  38f9a4:       40 be 00 28     bne+    cr7,38f9cc <cache_lookup_raw+0xec>
  38f9a8:       88 1f 00 34     lbz     r0,52(r31)
  38f9ac:       7f 9d 00 00     cmpw    cr7,r29,r0
  38f9b0:       40 be 00 1c     bne+    cr7,38f9cc <cache_lookup_raw+0xec>
  38f9b4:       38 7f 00 35     addi    r3,r31,53
  38f9b8:       80 9b 00 14     lwz     r4,20(r27)
  38f9bc:       7f a5 eb 78     mr      r5,r29
  38f9c0:       48 15 a9 e1     bl      4ea3a0 <memcmp>

-O1 の時の objdump -d netbsd (cache_lookup):

0038f4d8 <cache_lookup>:
  38f4d8:       94 21 ff d0     stwu    r1,-48(r1)
  38f4dc:       7c 08 02 a6     mflr    r0
  38f4e0:       93 21 00 14     stw     r25,20(r1)
  38f4e4:       93 41 00 18     stw     r26,24(r1)
  38f4e8:       93 61 00 1c     stw     r27,28(r1)
  38f4ec:       93 81 00 20     stw     r28,32(r1)
  38f4f0:       93 a1 00 24     stw     r29,36(r1)
  38f4f4:       93 c1 00 28     stw     r30,40(r1)
  38f4f8:       93 e1 00 2c     stw     r31,44(r1)
  38f4fc:       90 01 00 34     stw     r0,52(r1)
  38f500:       7c 7b 1b 78     mr      r27,r3
  38f504:       7c 99 23 78     mr      r25,r4
  38f508:       7c bc 2b 78     mr      r28,r5
  38f50c:       3d 20 00 60     lis     r9,96
  38f510:       81 29 de c4     lwz     r9,-8508(r9)
  38f514:       2f 89 00 00     cmpwi   cr7,r9,0
  38f518:       40 be 00 1c     bne+    cr7,38f534 <cache_lookup+0x5c>
  38f51c:       80 05 00 04     lwz     r0,4(r5)
  38f520:       54 00 04 a0     rlwinm  r0,r0,0,18,16
  38f524:       90 05 00 04     stw     r0,4(r5)
  38f528:       91 24 00 00     stw     r9,0(r4)
  38f52c:       3b c0 ff ff     li      r30,-1
  38f530:       48 00 03 80     b       38f8b0 <cache_lookup+0x3d8>
  38f534:       83 a5 00 18     lwz     r29,24(r5)
  38f538:       2f 9d 00 1f     cmpwi   cr7,r29,31
  38f53c:       40 bd 00 28     ble+    cr7,38f564 <cache_lookup+0x8c>
-----
  38f540:       3d 20 00 63     lis     r9,99
  38f544:       39 29 e2 10     addi    r9,r9,-7664
  38f548:       81 69 00 14     lwz     r11,20(r9)
  38f54c:       39 6b 00 01     addi    r11,r11,1
  38f550:       91 69 00 14     stw     r11,20(r9)
  38f554:       80 05 00 04     lwz     r0,4(r5)
  38f558:       54 00 04 a0     rlwinm  r0,r0,0,18,16
  38f55c:       90 05 00 04     stw     r0,4(r5)
  38f560:       48 00 03 24     b       38f884 <cache_lookup+0x3ac>
  38f564:       7c 7e 1b 78     mr      r30,r3
  38f568:       7c ba 2b 78     mr      r26,r5
  38f56c:       54 69 e8 fe     rlwinm  r9,r3,29,3,31
  38f570:       80 05 00 1c     lwz     r0,28(r5)
  38f574:       7d 29 02 78     xor     r9,r9,r0
  38f578:       3d 60 00 60     lis     r11,96
  38f57c:       80 0b ea 90     lwz     r0,-5488(r11)
  38f580:       7d 29 00 38     and     r9,r9,r0
  38f584:       3d 60 00 60     lis     r11,96
  38f588:       81 6b ea 94     lwz     r11,-5484(r11)
  38f58c:       55 29 10 3a     rlwinm  r9,r9,2,0,29
  38f590:       7f e9 58 2e     lwzx    r31,r9,r11
  38f594:       2f 9f 00 00     cmpwi   cr7,r31,0
  38f598:       41 9e 00 40     beq-    cr7,38f5d8 <cache_lookup+0x100>
  38f59c:       80 1f 00 20     lwz     r0,32(r31)
----
  38f5a0:       7f 9e 00 00     cmpw    cr7,r30,r0
  38f5a4:       40 be 00 28     bne+    cr7,38f5cc <cache_lookup+0xf4>
  38f5a8:       88 1f 00 34     lbz     r0,52(r31)
  38f5ac:       7f 9d 00 00     cmpw    cr7,r29,r0
  38f5b0:       40 be 00 1c     bne+    cr7,38f5cc <cache_lookup+0xf4>
  38f5b4:       38 7f 00 35     addi    r3,r31,53
  38f5b8:       80 9a 00 14     lwz     r4,20(r26)
  38f5bc:       7f a5 eb 78     mr      r5,r29
  38f5c0:       48 15 ae 49     bl      4ea408 <memcmp>
  38f5c4:       2f 83 00 00     cmpwi   cr7,r3,0
  38f5c8:       41 9e 00 28     beq-    cr7,38f5f0 <cache_lookup+0x118>
  38f5cc:       83 ff 00 00     lwz     r31,0(r31)
  38f5d0:       2f 9f 00 00     cmpwi   cr7,r31,0
  38f5d4:       40 9e ff c8     bne+    cr7,38f59c <cache_lookup+0xc4>
  38f5d8:       3d 60 00 63     lis     r11,99
  38f5dc:       39 6b e2 10     addi    r11,r11,-7664
(cache_lookup_raw と cache_lookup を比べていた) ..

#2 [4.99.3] 別のところで落ちました

tlp0: transmit underrun; new threshold: 160/1024 bytes
panic: kernel diagnostic assertion "(startoff & PAGE_MASK) == 0 && (endoff & PAGE_MASK) == 0" 
failed: file "/export/20061008/checkout/src/sys/miscfs/genfs/genfs_vnops.c", line 1081
Stopped in pid 6.1 (pagedaemon) at      netbsd:cpu_Debugger+0x14:       addi    1
,1,16
db> bt
at panic+1cc
at __assert+2c
at genfs_putpages+1e8
at VOP_PUTPAGES+40
at uvn_put+c
at uvmpd_scan_queue+158
at uvmpd_scan+4c
at uvm_pageout+168
at cpu_switchto+60
db> 
ここも -O1 ですかね .. で作り直したら、元の問題
trap type 300 at 38f99c
Stopped in pid 663.1 (cvs) at   netbsd:cache_lookup_raw+0xbc:   lwz     0,32(31)

db> tlp0: receive ring overrun
bt
at nfs_lookup+f0
at VOP_LOOKUP+34
at lookup+2f4
at namei+10c
at vn_open+174
at sys_open+e0
at syscall_plain+14c
at setfault+c54
db> 
作った方法は合っていると思う
ttyr4:root@mini 14:42:14/061113(...obj/L2-1M-PB2-SHM)# ls -l netbsd genfs_vnops.o vfs_cache.o
-rw-r--r--  1 root  wheel    23536 Nov 13 14:42 genfs_vnops.o
-rwxr-xr-x  1 root  wheel  5839756 Nov 13 14:42 netbsd*
-rw-r--r--  1 root  wheel     9640 Nov 13 13:56 vfs_cache.o
ttyr4:root@mini DING!/061113(...obj/L2-1M-PB2-SHM)# 
どうも、いつもここで落ちる ?
cvs update: Updating databases/zope-mysql/pkg
cvs update: Updating devel

show register:

db> show register    
r0          0xf8e0099a
r1          0xe548fba0
r2          0
r3          0x169c888
r4          0xe548fe88
r5          0xe548fe9c
r6          0
r7          0
r8          0
r9          0x30
r10         0xc044
r11         0xe0185000
r12         0x22002084
r13         0
r14         0x18a0000
r15         0x18a0000
r16         0x1880000
r17         0x18b7000
r18         0x18b11e0
r19         0xe548fcd8
r20         0
r21         0x20
r22         0
r23         0
r24         0
r25         0xe548fe88
r26         0xe548fe88
r27         0xe548fe9c
r28         0xe548fe9c
r29         0xf
r30         0x169c888
r31         0xd8000000
iar         0x38f99c    cache_lookup_raw+0xbc
msr         0x9032
lr          0x28b520    nfs_lookup+0xf4
ctr         0x28b42c    nfs_lookup
cr          0x22042088
xer         0x9
netbsd:cache_lookup_raw+0xbc:   lwz     0,32(31)
db> 

#3 [4.99.3] patch for sys/sys/queue.h

as a result, followin patch fix the problem I've been tracing for these month.
Index: sys/sys/queue.h
===================================================================
RCS file: /export/20061008/Repository/src/sys/sys/queue.h,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 queue.h
--- sys/sys/queue.h	8 Oct 2006 17:09:38 -0000	1.1.1.1
+++ sys/sys/queue.h	13 Nov 2006 08:11:39 -0000
@@ -161,7 +161,7 @@
 
 #define	LIST_FOREACH(var, head, field)					\
 	for ((var) = ((head)->lh_first);				\
-		(var);							\
+		(var != NULL);							\
 		(var) = ((var)->field.le_next))
 
 /*
... no ... still .. there ..
cvs update: Updating graphics/gphoto/files
cvs update: Updating graphics/gphoto/patches
login: Nov 13 17:01:54 livorno getty[559]: /dev/ttyE0: Device not configured
tlp0: transmit underrun; new threshold: 96/256 bytes
trap type 300 at 38dcbc
Stopped in pid 73.1 (cvs) at    netbsd:cache_lookup+0x8c:       lwz     0,32(31)

db> 

Now queue.h patch + -O1 for vfs_cache.c:

U print/libgnomecups/src/dist/smbfs/lib/smb/rq.c
U print/libgnomecups/src/dist/smbfs/lib/smb/subr.c
cvs update: Updating print/libgnomecups/src/dist/smbfs/mount_smbfs
trap type 300 at 3a6170
Stopped in pid 562.1 (cvs) at   netbsd:cache_lookup_entry+0x68: lwz     9,32(9)
db> tlp0: receive ring overrun
bt
at cache_lookup+a8
at ufs_lookup+110
at VOP_LOOKUP+34
at lookup+2f4
at namei+10c
at sys___stat30+50
at syscall_plain+14c
at setfault+c54
db> 

cache_lookup_entry:

003a6108 <cache_lookup_entry>:
  3a6108:       94 21 ff d0     stwu    r1,-48(r1)
  3a610c:       7c 08 02 a6     mflr    r0
  3a6110:       93 e1 00 2c     stw     r31,44(r1)
  3a6114:       90 01 00 34     stw     r0,52(r1)
  3a6118:       7c 3f 0b 78     mr      r31,r1
  3a611c:       90 7f 00 18     stw     r3,24(r31)
  3a6120:       90 9f 00 1c     stw     r4,28(r31)
  3a6124:       81 3f 00 1c     lwz     r9,28(r31)
  3a6128:       81 29 00 1c     lwz     r9,28(r9)
  3a612c:       80 1f 00 18     lwz     r0,24(r31)
  3a6130:       54 00 e8 fe     rlwinm  r0,r0,29,3,31
  3a6134:       7d 2b 02 78     xor     r11,r9,r0
  3a6138:       3d 20 00 61     lis     r9,97
  3a613c:       80 09 61 e0     lwz     r0,25056(r9)
  3a6140:       7d 60 00 38     and     r0,r11,r0
  3a6144:       54 00 10 3a     rlwinm  r0,r0,2,0,29
  3a6148:       7c 0b 03 78     mr      r11,r0
  3a614c:       3d 20 00 61     lis     r9,97
  3a6150:       80 09 61 e4     lwz     r0,25060(r9)
  3a6154:       7c 0b 02 14     add     r0,r11,r0
  3a6158:       90 1f 00 0c     stw     r0,12(r31)
  3a615c:       81 3f 00 0c     lwz     r9,12(r31)
  3a6160:       80 09 00 00     lwz     r0,0(r9)	// ncp = ncpp
  3a6164:       90 1f 00 08     stw     r0,8(r31)
  3a6168:       48 00 00 7c     b       3a61e4 <cache_lookup_entry+0xdc>
(loop) // LIST_FOREACH
  3a616c:       81 3f 00 08     lwz     r9,8(r31)       //
  3a6170:       81 29 00 20     lwz     r9,32(r9)	//  traps here ここで落ちる
  3a6174:       80 1f 00 18     lwz     r0,24(r31)	// 
  3a6178:       7f 89 00 00     cmpw    cr7,r9,r0	// 
  3a617c:       40 9e 00 5c     bne-    cr7,3a61d8 <cache_lookup_entry+0xd0>

  3a6180:       81 3f 00 08     lwz     r9,8(r31)	// if (ncp-> ..
  3a6184:       88 09 00 34     lbz     r0,52(r9)
  3a6188:       54 00 06 3e     clrlwi  r0,r0,24
  3a618c:       7c 0b 03 78     mr      r11,r0
  3a6190:       81 3f 00 1c     lwz     r9,28(r31)
  3a6194:       80 09 00 18     lwz     r0,24(r9)
  3a6198:       7f 8b 00 00     cmpw    cr7,r11,r0
  3a619c:       40 9e 00 3c     bne-    cr7,3a61d8 <cache_lookup_entry+0xd0>
  3a61a0:       81 3f 00 08     lwz     r9,8(r31)	// ncp->nc_name
  3a61a4:       39 69 00 35     addi    r11,r9,53
  3a61a8:       81 3f 00 1c     lwz     r9,28(r31)	// cnp->cn_nameptr
  3a61ac:       81 49 00 14     lwz     r10,20(r9)
  3a61b0:       81 3f 00 08     lwz     r9,8(r31)	//(uint)ncp->nc_nlen
  3a61b4:       88 09 00 34     lbz     r0,52(r9)
  3a61b8:       54 00 06 3e     clrlwi  r0,r0,24
  3a61bc:       7d 63 5b 78     mr      r3,r11		// ncp->nc_name
  3a61c0:       7d 44 53 78     mr      r4,r10		// cnp->cn_nameptr
  3a61c4:       7c 05 03 78     mr      r5,r0		// ncp->nc_nlen
  3a61c8:       48 15 af 05     bl      5010cc <memcmp>
  3a61cc:       7c 60 1b 78     mr      r0,r3
  3a61d0:       2f 80 00 00     cmpwi   cr7,r0,0
  3a61d4:       41 9e 00 1c     beq-    cr7,3a61f0 <cache_lookup_entry+0xe8> // break
  3a61d8:       81 3f 00 08     lwz     r9,8(r31)
  3a61dc:       80 09 00 00     lwz     r0,0(r9)
  3a61e0:       90 1f 00 08     stw     r0,8(r31)
  3a61e4:       80 1f 00 08     lwz     r0,8(r31)
  3a61e8:       2f 80 00 00     cmpwi   cr7,r0,0    // (var) ncp == 0 ?
  3a61ec:       40 9e ff 80     bne+    cr7,3a616c <cache_lookup_entry+0x64>
      // end of LIST_FOREACH
  3a61f0:       80 1f 00 08     lwz     r0,8(r31)
  3a61f4:       7c 03 03 78     mr      r3,r0
  3a61f8:       81 61 00 00     lwz     r11,0(r1)
  3a61fc:       80 0b 00 04     lwz     r0,4(r11)
  3a6200:       7c 08 03 a6     mtlr    r0
  3a6204:       83 eb ff fc     lwz     r31,-4(r11)
  3a6208:       7d 61 5b 78     mr      r1,r11
  3a620c:       4e 80 00 20     blr
Was inline ignored at this compile ? (Probably with -O0)

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 だと 問題あり。

2006年11月16日(木) [n年日記] Last Update: "2006/12/12 23:32:58"

#1 [4.99.3] gcc-3.4.6 の方の objdump -d

00379394 <cache_lookup>:
  379394:       7c 08 02 a6     mflr    r0
  379398:       7d 80 00 26     mfcr    r12
  37939c:       94 21 ff e0     stwu    r1,-32(r1)
  3793a0:       3d 20 00 5e     lis     r9,94
  3793a4:       93 61 00 0c     stw     r27,12(r1)
  3793a8:       7c 9b 23 78     mr      r27,r4
  3793ac:       93 81 00 10     stw     r28,16(r1)
  3793b0:       7c bc 2b 78     mr      r28,r5
  3793b4:       93 c1 00 18     stw     r30,24(r1)
  3793b8:       7c 7e 1b 78     mr      r30,r3
  3793bc:       93 a1 00 14     stw     r29,20(r1)
  3793c0:       93 e1 00 1c     stw     r31,28(r1)
  3793c4:       90 01 00 24     stw     r0,36(r1)
  3793c8:       91 81 00 08     stw     r12,8(r1)
  3793cc:       81 29 da 74     lwz     r9,-9612(r9)
  3793d0:       2f 89 00 00     cmpwi   cr7,r9,0
  3793d4:       41 9e 01 60     beq-    cr7,379534 <cache_lookup+0x1a0>
  3793d8:       83 a5 00 18     lwz     r29,24(r5)
  3793dc:       2f 9d 00 1f     cmpwi   cr7,r29,31
  3793e0:       41 9d 01 6c     bgt-    cr7,37954c <cache_lookup+0x1b8>
-----
  3793e4:       3d 60 00 5e     lis     r11,94
  3793e8:       81 25 00 1c     lwz     r9,28(r5)
  3793ec:       81 4b e6 40     lwz     r10,-6592(r11)
  3793f0:       54 60 e8 fe     rlwinm  r0,r3,29,3,31
  3793f4:       7d 29 02 78     xor     r9,r9,r0
  3793f8:       3d 60 00 5e     lis     r11,94
  3793fc:       7d 29 50 38     and     r9,r9,r10
  379400:       81 4b e6 44     lwz     r10,-6588(r11)
  379404:       55 29 10 3a     rlwinm  r9,r9,2,0,29
  379408:       7f e9 50 2e     lwzx    r31,r9,r10
  37940c:       2e 1f 00 00     cmpwi   cr4,r31,0
  379410:       41 92 00 1c     beq-    cr4,37942c <cache_lookup+0x98>

  379414:       80 1f 00 20     lwz     r0,32(r31)
  379418:       7f 80 f0 00     cmpw    cr7,r0,r30
  37941c:       41 9e 00 5c     beq-    cr7,379478 <cache_lookup+0xe4>
// 
  379420:       83 ff 00 00     lwz     r31,0(r31)
  379424:       2e 1f 00 00     cmpwi   cr4,r31,0
  379428:       40 92 ff ec     bne+    cr4,379414 <cache_lookup+0x80>
  37942c:       3d 60 00 61     lis     r11,97
  379430:       39 6b dd c0     addi    r11,r11,-8768
  379434:       81 2b 00 10     lwz     r9,16(r11)
  379438:       39 29 00 01     addi    r9,r9,1
  37943c:       91 2b 00 10     stw     r9,16(r11)
  379440:       38 00 00 00     li      r0,0
  379444:       38 60 ff ff     li      r3,-1
  379448:       90 1b 00 00     stw     r0,0(r27)
  37944c:       80 01 00 24     lwz     r0,36(r1)
  379450:       81 81 00 08     lwz     r12,8(r1)
  379454:       83 61 00 0c     lwz     r27,12(r1)
  379458:       7c 08 03 a6     mtlr    r0
  37945c:       83 81 00 10     lwz     r28,16(r1)
  379460:       7d 80 81 20     mtcrf   8,r12
  379464:       83 a1 00 14     lwz     r29,20(r1)
  379468:       83 c1 00 18     lwz     r30,24(r1)
  37946c:       83 e1 00 1c     lwz     r31,28(r1)
  379470:       38 21 00 20     addi    r1,r1,32
  379474:       4e 80 00 20     blr

  379478:       88 1f 00 34     lbz     r0,52(r31)
  37947c:       38 7f 00 35     addi    r3,r31,53
  379480:       7f 80 e8 00     cmpw    cr7,r0,r29
  379484:       7c 05 03 78     mr      r5,r0
  379488:       40 9e ff 98     bne+    cr7,379420 <cache_lookup+0x8c>
  37948c:       80 9c 00 14     lwz     r4,20(r28)
  379490:       48 15 1b d1     bl      4cb060 <memcmp>
  379494:       2f 83 00 00     cmpwi   cr7,r3,0
  379498:       40 9e ff 88     bne+    cr7,379420 <cache_lookup+0x8c>
  37949c:       41 b2 ff 90     beq-    cr4,37942c <cache_lookup+0x98>
//
  3794a0:       81 7c 00 04     lwz     r11,4(r28)
  3794a4:       71 60 40 00     andi.   r0,r11,16384
  3794a8:       41 82 00 c8     beq-    379570 <cache_lookup+0x1dc>
  3794ac:       83 bf 00 2c     lwz     r29,44(r31)
  3794b0:       2f 9d 00 00     cmpwi   cr7,r29,0
  3794b4:       40 9e 00 e4     bne-    cr7,379598 <cache_lookup+0x204>
  3794b8:       80 1c 00 00     lwz     r0,0(r28)


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

Count.cgi (since 2000/03/03)