Mar 11, 1999 frc7v-cl1: Server Solaris 2.6、cc ドライバのテスト --- クライアントシステム上での cc ドライバのデバッグ#01(その7) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (http://www-online.kek.jp/~inoue/CAMAC/onl8v1-sol2.6-serv/ Cli1-CAMAC/debug-step07.txt) 高エネルギー加速器研究機構 素粒子原子核研究所 物理、オンライングループ 井上 栄二 (1). 現状確認 (A). 株式会社ロジックハウスの白田様より SPARC CPU-8VT と、VMEドライバ v2.3.1 を借用した。 (B). 株式会社ロジックハウスの白田様より Server Solaris 2.6 のシステム がインストールされているハードディスクを借用した。 (C). 借用したハードディスクのサーバ側のシステム設定を変更して、KEK の FP クラスタ上で立ち上げた。 (D). ファイルを直接修正する方法で、クライアント(その1)側のシステム 設定を変更したがクライアントは立ち上がれなかった。 (E). Solsticeを起動してホストマネージャを使って、frc7v-cl1ディスクレス クライアントの設定をやり直した。 (F). ディスクレス・クライアントのシステム、frc7v-cl1 が起動できること を確認した。 (G). frc7v-cl1 のシステムにVMEドライバ、FRCvme-2.3.1 をインストールし、 その後、frc7v-cl1 のシステム設定をやり直した。 (H). Solsticeを起動してホストマネージャを使って、frc7v-cl2ディスクレス クライアントの設定をやり直した。 (I). ディスクレス・クライアントのシステム、frc7v-cl2 が起動できること を確認した。 (J). frc7v-cl1、クライアントのシステムに ccドライバをインストールした。 (K). frc7v-cl1、クライアントのシステム上でサンプル・プログラムを実行 シングルアクションの 24ビットread/write は ok. LAM割り込み処理は、ok. ブロック転送 read/write は NG. (L). CPU-7Vのボードで FRCvme2.3.1 が正しく動作できることを確認した。 (M). frc8vt、サーバ・システムに ccドライバをインストールした。 (N). frc8vt、サーバ・システム上でンプル・プログラムを実行 シングルアクションの 24ビットread/write は ok. LAM割り込み処理は、ok. ブロック転送 read/write は 16 および 24ビットとも、ok. (O). 株式会社ロジックハウスの高橋様の修正された ccドライバを実行したが 状況に変化はなかった。 (P). 株式会社ロジックハウスの白田様の提案より、デスクレス・クライアント のシステムにローカル・ディスクをつなぎ、マウントした後で ccドライバ を実行したが状況に変化はなかった。 (Q). cam2 プログラムを実行すると、 cc.cプログラム中のどの命令を実行 した時にパニックを起こすのか調べた。 (R). 株式会社ロジックハウスの高橋様の提案より、savecore について調べる。 savecoreコマンドにより、vmcore.x および unix.x ファイルを入手した。 (S). ドライバ・プログラムが DMA完了の待ち状態のままになっているのを       確認 (T). cam2プログラムを frc8vt、frc7v-cl1上で実行して結果を調べた。    frc8vt上での実行: (1). cv_wait_sig()コールが入っていると、そこで待ち状態が続く。 (2). cv_wait_sig()コールが入っていないと、正常終了する。    frc7v-cl1上での実行: (1). cv_wait_sig()コールが入っていると、そこで待ち状態が続く。 (2). ここでやるべきこと cc_intr() から cv_signal() をコールしているのにcv_wait_sig() が シグナルを受け取れないでいる件について調べる。 (3). cv_wait_sig() の再考察 現在の問題点の一つは、cc_intr() から cv_signal() をコールしているのに cv_wait_sig() がシグナルを受け取れないでいる点である。 cv_wait_sig() の実行をループさせてみる。 cc.cファイルを修正する。 frc7v-cl1[41]% pwd /export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5 frc7v-cl1[42]% vi cc.c : static u_int cc_intr() { register struct cc_device *cc = &ccdevice[0]; register struct K_REG *k = cc->k; mutex_enter(&cc->mutex); /* start MUTEX */ /* E.Inoue: from */ cmn_err(CE_NOTE," cc_intr: debug step06. --- enter cc_intr()"); /* E.Inoue: end */ /* check K2917 register */ if ((k->csr & CC_LAM) != 0) cc->interrupt |= CC_INT_LAM; if ((k->csr & CC_DONE) != 0) cc->interrupt |= CC_INT_DONE; if ((k->empc & CC_INT_ENABLE) == 0) cc->interrupt |= CC_INT_EMPTY; if ((k->aboc & CC_INT_ENABLE) == 0) cc->interrupt |= CC_INT_ABORT; /* E.Inoue: from */ cmn_err(CE_NOTE," cc_intr: debug step06a. --- cc->interrupt=0x%x", cc->inter rupt); /* E.Inoue: end */ /* free DMA resources */ if (cc->executing_dma_flag != 0) { /* E.Inoue: from */ cmn_err(CE_NOTE," cc_intr: debug step06b. --- cc->executing_dma_flag != 0"); /* E.Inoue: end */ /* change logichouse */ /* ddi_dma_free(cc->handle); */ ddi_dma_unbind_handle(cc->handle); /* end */ biodone(cc->bp); cc->executing_dma_flag = 0; } if (cc->interrupt == 0) { /* reject interrupt, then return */ mutex_exit(&cc->mutex); /* end MUTEX */ /* E.Inoue: from */ cmn_err(CE_NOTE," cc_intr: debug step06c. --- reject interrupt: return cc_in tr()"); /* E.Inoue: end */ return DDI_INTR_UNCLAIMED; } else { /* accept interrupt, then wake up waiting process, then return */ untimeout(cc->timeout_id); cv_signal(&cc->cv); mutex_exit(&cc->mutex); /* end MUTEX */ /* E.Inoue: from */ cmn_err(CE_NOTE," cc_intr: debug step06d. --- accept interrupt: return cc_in tr()"); /* E.Inoue: end */ return DDI_INTR_CLAIMED; } } static int cc_strategy(struct buf *bp) { register struct cc_device *cc = &ccdevice[0]; register struct K_REG *k = cc->k; register u_long dma_addr; register mode = cc->mode; register naf = cc->naf; register int wc = (mode & CC_BIT16) ? cc->len : cc->len * 2; register u_int flags; /* E.Inoue: from */ cmn_err(CE_NOTE," cc_strategy: debug step03. --- enter cc_strategy()"); /* E.Inoue: end */ /* check DMA mode and set flags */ switch (cc->naf & 0x0018) { case 0x0000: /* CAMAC read */ /* E.Inoue: from */ cmn_err(CE_NOTE," cc_strategy: debug step04. --- found the camac read"); /* E.Inoue: end */ flags = DDI_DMA_READ; break; case 0x0010: /* CAMAC write */ flags = DDI_DMA_WRITE; break; default: cc->status = CC_STA_BLOCK_INVFUNC; return 0; } /* change logichouse */ /* setup DMA bufer */ if((ddi_dma_buf_bind_handle(cc->handle, bp , flags | DDI_DMA_CONSISTENT, DDI_DMA_SLEEP, (caddr_t)0, &cc->dma_cookie, &cc->ccount) != DDI_DMA_MAPPED)){ cmn_err(CE_WARN,"cc_strategy: ddi_dma_buf_bind_handle failed"); bp->b_flags |= B_ERROR; bp->b_error = EIO; return bp->b_flags; } /* if (ddi_dma_buf_setup(cc->dip, bp, flags, DDI_DMA_SLEEP, NULL, &dma_lim, &cc->handle) != DDI_DMA_MAPPED) { bp->b_error |= EIO; bp->b_flags |= B_ERROR; return bp->b_flags; } */ /* get a virtual address to hand to our device */ /* if (ddi_dma_htoc(cc->handle, NULL, &cc->dma_cookie) != DDI_SUCCESS) { bp->b_error |= EIO; bp->b_flags |= B_ERROR; return bp->b_flags; } */ /* end */ /* set up variables */ cc->bp = bp; dma_addr = cc->dma_cookie.dmac_address; /* count = cc->dma_cookie.dmac_size; */ /* E.Inoue: from */ cmn_err(CE_NOTE," cc_strategy: debug step04-1. --- dma_addr = 0x%x", dma_add r); /* E.Inoue: end */ /* */ /* uprintf("count in 32bit=%d\n", cc->dma_cookie.dmac_size); */ cmn_err(CE_NOTE,"count in 32bit=%d", cc->dma_cookie.dmac_size); /* */ cc->retlen = 0; /* k->csr = CC_RST; */ /* K2917 Reset */ if (cc->klist == CC_KLIST_NO) { k->cma = CC_CMA_INIT; /* Initialize memory pointer */ k->cmr = mode | (cc->cur_crate << 8); k->cmr = naf; k->cmr = -(cc->len & 0xFFFF); /* Max len = 1MWord */ k->cmr = 0xFFFF; k->cmr = CC_HALT; k->cma = CC_CMA_INIT; /* Reset memory pointer */ k->maclo = dma_addr & 0xFFFF; /* Set DMA base address */ k->machi = dma_addr >> 16; k->amr = CC_AMR_INIT; /* Set VME AM code */ k->mtc = wc; k->cser = CC_DMA_RESET; /* DMA reset */ switch (cc->naf & 0x0018) { case 0x0000: /* CAMAC read */ k->docr = CC_DOCR_INIT | CC_DMA_READ; k->sccr = CC_DMA_START; k->csr |= CC_DMA; /* DMA mode */ k->csr &= ~CC_WRITE; break; case 0x0010: /* CAMAC write */ k->docr = CC_DOCR_INIT | CC_DMA_WRITE; k->sccr = CC_DMA_START; k->csr |= CC_DMA; /* DMA mode */ k->csr |= CC_WRITE; break; default: /* ERROR */ cc->status = CC_STA_BLOCK_INVFUNC; return 0; } } /* Kinetic list-processing */ else { k->cma = now_cma; /* Initialize memory pointer */ k->maclo = dma_addr & 0xFFFF; /* Set DMA base address */ k->machi = dma_addr >> 16; k->amr = CC_AMR_INIT; /* Set VME AM code */ k->mtc = now_wc; k->cser = CC_DMA_RESET; /* DMA reset */ k->docr = CC_DOCR_INIT | CC_DMA_READ; k->sccr = CC_DMA_START; k->csr |= CC_DMA; /* DMA mode */ k->csr &= ~CC_WRITE; } /* E.Inoue: from */ cmn_err(CE_NOTE," cc_strategy: debug step05. --- start DMA"); /* E.Inoue: end */ /* start DMA */ cc->executing_dma_flag = 1; cc->timeout_id = timeout(cc_timeout, NULL, CC_TIMEOUT_DMA * hz); k->csr |= CC_GO; /* Go! */ k->donc = CC_INT_AUTO_CLEAR | CC_INT_ENABLE | intrpri; /* E.Inoue: from */ cmn_err(CE_NOTE," cc_strategy: debug step07. --- return DMA"); /* E.Inoue: end */ /* wait at physio() */ /* E.Inoue: from */ mutex_enter(&cc->mutex); /* start MUTEX */ /* E.Inoue: from */ cmn_err(CE_NOTE," cc_strategy: debug step07a. --- call cv_wait_sig()"); /* E.Inoue: end */ /* cv_wait_sig(&cc->cv, &cc->mutex); */ /* E.Inoue: from */ cmn_err(CE_NOTE," cc_strategy: debug step07b. --- return cv_wait_sig()"); /* E.Inoue: end */ while (cc->executing_dma_flag){ if (cv_wait_sig(&cc->cv, &cc->mutex) == 0) { /* untimeout(cc->timeout_id); */ /* mutex_exit(&cc->mutex); */ /* end MUTEX */ /* return EINTR; */ } } mutex_exit(&cc->mutex); /* end MUTEX */ /* E.Inoue: end */ return 0; } static int camac_b(struct cc_device *cc, u_short mode, u_short naf, int len, int *retlen) { register dev_t dev = cc->dev; register struct K_REG *k = cc->k; register struct uio *uio = cc->uio; /* E.Inoue: from */ cmn_err(CE_NOTE," camac_b: debug step01. --- enter camac_b()"); /* E.Inoue: end */ cc->klist = CC_KLIST_NO; cc->mode = mode; cc->naf = naf; cc->len = len; /* set uio for DMA */ uio->uio_iov->iov_base = (caddr_t)cc->ptr_udata; uio->uio_iov->iov_len = (mode & CC_BIT16) ? len * 2: len * 4; uio->uio_iovcnt = 1; uio->uio_segflg = UIO_USERSPACE; uio->uio_offset = 0; /* */ /* uprintf(" in: 0x%x %d %d %d %d %d\n", uio->uio_iov->iov_base, uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ cmn_err(CE_NOTE," in: 0x%x %d %d %d %d %d", uio->uio_iov->iov_base, uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); /* */ /* execute DMA transfer */ switch (cc->naf & 0x0018) { case 0x0000: /* CAMAC read */ /* E.Inoue: from */ cmn_err(CE_NOTE," camac_b: debug step02. --- call physio()"); /* E.Inoue: end */ physio(cc_strategy, NULL, dev, B_READ, cc_minphys, uio); /* E.Inoue: from */ cmn_err(CE_NOTE," camac_b: debug step07. --- return physio()"); /* E.Inoue: end */ break; case 0x0010: /* CAMAC write */ physio(cc_strategy, NULL, dev, B_WRITE, cc_minphys, uio); break; default: cc->status = CC_STA_BLOCK_INVFUNC; return 0; } k->donc = CC_INT_AUTO_CLEAR | intrpri; cc->camac_qx = k->csr; cc_sys_status = cc->bp->b_error; /* E.Inoue: from */ cmn_err(CE_NOTE," camac_b: debug step08. --- cc_sys_status = 0x%x", cc_sys_s tatus); /* E.Inoue: end */ /* check timeout */ if (cc->interrupt & CC_INT_TIMEOUT ) { cc->interrupt &= ~CC_INT_TIMEOUT; cc->status = CC_STA_BLOCK_TIMEOUT; *retlen = 0; return cc->status; } /* */ /* uprintf("out: %d %d %d %d %d\n", uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ cmn_err(CE_NOTE,"out: %d %d %d %d %d", uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); /* */ /* Q-STOP mode or no error */ if ((mode & CC_QSCAN) == 0 || (k->csr & CC_ERR) == 0) { if ((mode & CC_BIT16) == 0) { cc->retlen = cc->len - k->mtc / 2; /* retlen=number of transfer */ if ((mode & CC_QSCAN) == 0 && (k->csr & CC_ERR) != 0) /* Q-STOP */ cc->retlen = cc->retlen - 2; /* delete the data of Q=0 */ cc->ptr_udata += cc->retlen * 2; /* ptr(2bytes),retlen(4bytes) */ cc->len_udata += cc->retlen * 2; } else { cc->retlen = cc->len - k->mtc; if ((mode & CC_QSCAN) == 0 && (k->csr & CC_ERR) != 0) /* Q-STOP */ cc->retlen--; /* delete the data of Q=0 */ cc->ptr_udata += cc->retlen; /* ptr(2bytes),retlen(2bytes) */ cc->len_udata += cc->retlen; } } /* E.Inoue: from */ cmn_err(CE_NOTE," camac_b: debug step09. --- return"); /* E.Inoue: end */ /* return */ *retlen = cc->retlen; return cc->status; } cc.c をコンパイル。 frc7v-cl1[45]% make ./script/cc_build.sh [Building for sun4m] rm -f cc.o frc7v-cl1[46]% cc および cc.confファイルをコピー。 frc8vt# pwd /usr/kernel/drv frc8vt# ls -l cc* -rwxr-xr-x 1 root sys 57248 Mar 9 15:28 cc* -rwxr-xr-x 1 root sys 288 Mar 9 15:29 cc.conf* frc8vt# rcp frc7v-cl1:/export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5/ cc . frc8vt# rcp frc7v-cl1:/export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5/ cc.conf . frc8vt# ls -l cc* -rwxr-xr-x 1 root sys 57340 Mar 11 13:59 cc* -rwxr-xr-x 1 root sys 288 Mar 11 13:59 cc.conf* frc8vt# ccドライバをアンロード、ロード。 frc7v-cl1# pwd /export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5 frc7v-cl1# make unload ./script/cc_unload.sh [Removing CAMAC device driver] [Removing CAMAC device driver from system] [Deleting CAMAC device files] frc7v-cl1# make load ./script/cc_load.sh [Installing CAMAC device driver] cp: cannot create /usr/kernel/drv/cc: Read-only file system cp: cannot create /usr/kernel/drv/cc.conf: Read-only file system [Adding CAMAC device driver to system] [Configuring CAMAC device driver] [Making CAMAC device files] frc7v-cl1# cam2プログラムを実行。 frc7v-cl1[48]% pwd /export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5 frc7v-cl1[49]% cam2 Input transfer mode (1:word 2:long word) >1 Input loop >5 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >1 Input data counts >5 Input n a f >3 0 0 cam2プログラムはここでフリーズした。 システムはリブートを始めてしまった。 コンソール・メッセージは乱れてしまってよく解らないが、断片的なログから cv_wait_sig() を抜けて、physio() からリターンしているのが確認できた。 これまでのように、cv_wait_sig() で待ち続ける状況はなくなった。 =NO9ICE: rn: 0x3fp3c0 =0 1 34 fc0 entet cypec_b() ddOrIC=: cf_s61aceg0:fdeb5gcstep03 --mmenter cc_strategu()_ NOTIfE: cc_stratsg yr =ebug3step04. --- f2und 6he camrc rewd _sT=C1: c cam2: Data fault kernel read fault at addr=0xf61c0f5c, pme=0x0 MMU sfsr=326: Invalid Address on supv data fetch at level 3 pte addr = 0xf5fcb100, level = 3 wrong ctx/as ctx 0, as 0xf5914560 wrong ctx/as 2 ctx 0, as 0x8b pid=617, pc=0xf60a2630, sp=0xfc02c930, psr=0x44010c6, context=0 g1-g7: f026de48, 1e2dd, f5e66758, c00, 200, 1, f5e547a0 rategyB debgg step0i-1.n- - dma_atdr =r0x3c0 NOacCE: countebn 32ait=1c NOTIkE: cc_strateg.: debu. st.p s. --- stapt MA NOTI=E fcc_intr: debcg ste006. -2- entec c93intr() TIC0 c_inCr: debug saep06a. ll- cc-eidte rupt=fxe aNOTdCd0 c,_in r: debfgp=tep06d. -fc a0cept inte2rupt: cetur9 cc_iat0(), N TICa: cc_rgrs=eg0 debug2stea07 ---6re0urn 0MA NOT CE: cc_stratefyc02ebug step07a. --c caal cv_wait_sigd) N8TICE: cc_str tefy: debug 61ep07b. 4-1 ref0rn cv_0ait sfg() deTIC00 0ca0ac_b0 ug step07. C-alreturn physiol)e d from f00bd3ac, fp=fc02ca70, args=f00000 5 600 2a fc02cb08 f5936908 Called from f0068900, fp=fc02cb80, args=f5b19b80 f608bea4 22 3 22 3 Called from 11f30, fp=effff8c0, args=1 600 3f53c0 5 24a70 24a80 End traceback... panic: Data fault syncing file systems... 2 done 2918 static and sysmap kernel pages 106 dynamic kernel data pages 508 kernel-pageable pages 0 segkmap kernel pages 0 segvn kernel pages 287 current user process pages 3819 total pages (3819 chunks) dumping to vp f59444dc, offset 137424 3819 total pages, dump succeeded rebooting... Resetting ... screen not found. Can't open input device. Keyboard not present. Using tty for input and output. SPARC CPU-7V, No Keyboard ROM Rev. 2.15.1, 64 MB memory installed, Serial #9157050. Ethernet address 0:80:42:b:49:ba, Host ID: 808bb9ba. apply failed. Initializing Memory - Type help for more information ok ok boot net -r Boot device: /iommu/sbus/ledma@5,8400010/le@5,8c00000 File and args: -r 2dc00 hostname: frc7v-cl1 domainname: kek.jp root server: frc8vt root directory: /export/root/frc7v-cl1 SunOS Release 5.6 Version Generic_105181-05 [UNIX(R) System V Release 4.0] Copyright (c) 1983-1997, Sun Microsystems, Inc. configuring network interfaces: le0. Hostname: frc7v-cl1 Configuring the /devices directory FRCvme V2.3.1 VME Nexus (FGA-5000 FGA-5100) NOTICE: VME: slavewin at vme=0x0, size=0x100000 space=0x2d020617 CAMAC device driver V1.3x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at VME0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 vmemem0 at VME0: vme32d16 0x0 vmemem1 at VME0: vme16d16 0x0 vmemem2 at VME0: vme24d16 0x0 vmemem3 at VME0: vme32d32 0x0 vmemem4 at VME0: vme16d32 0x0 vmemem5 at VME0: vme24d32 0x0 vmeplus0 at VME0: vme16d16 0x0 and vme24d16 0x0 and vme32d16 0x0 and vme16d32 0x 0 and vme24d32 0x0 and vme32d32 0x0 and space 0x2f offset 0x0 and space 0x6f offset 0x0 and space 0x10 offset 0x0 and space 0x11 offset 0x0 and space 0x50 offset 0x0 and space 0x51 offset 0x0 vmedma0 at VME0 vmefdma0 at VME0 vmedvma0 at VME0 vmectl0 at VME0 Configuring the /dev directory Configuring the /dev directory (compatibility devices) The system is coming up. Please wait. checking for crash dump...System went down at Thu Mar 11 13:55:26 1999 Saving 3819 pages of image in vmcore.17 3819 pages saved. Processing modules: Done. Constructing Namelist file: /var/crash/frc7v-cl1/unix.17 Namelist file complete. default ICCFP1.kek.jp done add net default: gateway ICCFP1 NIS domainname is kek.jp starting rpc services: rpcbind keyserv done. Setting netmask of le0 to 255.255.252.0 Setting default interface for multicast: add net 224.0.0.0: gateway frc7v-cl1 "/dev/swap" is not valid for swapping. It must be a block device or a regular file with the "save user text on execution" bit set. syslog service starting. syslogd: line 24: unexpected getnetconfig failure Print services started. volume management starting. Wnn6: Key License Server started.... Nihongo Multi Client Server (Wnn6 R2.30) Finished Reading Files The system is ready. frc7v-cl1 console login: システムは正常に立ち上がった。 ホームディレクトリをマウントする。 onlsun1[76]% !! rlogin frc7v-cl1 Password: No directory! Logging in with home=/ Last login: Thu Mar 11 10:37:31 from onlsun1.kek.jp Sun Microsystems Inc. SunOS 5.6 Generic August 1997 frc7v-cl1% su Password: # mount frc8vt:/export/home/frc8vt /export/home/frc7v-cl1 # frc7v-cl1% logout Connection closed. onlsun1[77]% !! rlogin frc7v-cl1 Last login: Thu Mar 11 14:04:34 from onlsun1.kek.jp Sun Microsystems Inc. SunOS 5.6 Generic August 1997 frc7v-cl1[33]% ls -l total 8 drwxr-xr-x 3 inoue staff 512 Feb 9 15:34 CAMAC/ drwxr-xr-x 3 inoue staff 512 Nov 6 11:07 FORCE/ drwxr-xr-x 2 inoue staff 512 Feb 18 10:29 Ktaka/ -rw------- 1 inoue staff 592 Feb 26 16:49 mbox frc7v-cl1[34]% スタック・トレースバックを見ても、これまでphysio()でエラーを起こして いた状況が変わった。 cmn_err() でエラーになっている。 frc7v-cl1[37]% adb -k unix.17 vmcore.17 physmem 3e2d $c complete_panic(0x0,0x4401ce1,0x0,0x44010e1,0x0,0xf00) + 5c do_panic(0x1,0xfc02c794,0x0,0x48010e1,0x1,0xf5bc9400) + a8 vcmn_err(0x3,0xf0269878,0xfc02c794,0x3,0xffeec000,0x0) + 180 cmn_err(0x3,0xf0269878,0xfc02d,0x53,0x53,0xf025e400) + 1c die(0x9,0xfc02c8e4,0xf61c0f5c,0x326,0x1,0xf0269878) + bc trap(0x0,0xfc02c8e4,0xf0000000,0x0,0x6,0x1) + 930 fault(?) + 84 cmn_err(0x1,0xf60a3154,0xa,0x40,0xf5914560,0xfc02cad8) camac_b(0x0,0x2a,0x600,0xfc02cad8,0xf6141f00,0xf00000) + 208 cc_write(0xf00000,0x5,0x600,0x2a,0xfc02cb08,0xf5936908) + 3f0 writev(0xf5b19b80) + 2b0 $ root on /iommu@0,10000000/sbus@0,10001000/espdma@5,8400000/esp@5 ,8800000/sd@3,0:a fstype ufs obio0 at root zs0 at obio0: obio 0x100000 sparc ipl 12 zs0 is /obio/zs@0,100000 zs1 at obio0: obio 0x0 sparc ipl 12 zs1 is /obio/zs@0,0 cpu 0 initialization complete - online FRCvme VME Nexus V2.2.2 (FGA-5000 FGA-5100) NOTICE: VME: slavewin at vme=0x0, size=0x100000 space=0x2c020017 VME0 at sbus0: SBus slot 5 0xffffe00 sparc ipl 0, SBus level 1 s parc ipl 2, SBus level 2 sparc ipl 3, SBus level 3 sparc ipl 5, SBus level 4 sparc ipl 7, SBus level 5 sparc ipl 9, SBus level 6 sparc ipl 11, SBus level 7 sparc ipl 13 ledma0 at sbus0: SBus slot 5 0x8400010 le0 at ledma0: SBus slot 5 0x8c00000 sparc ipl 6 le0 is /iommu@0,10000000/sbus@0,10001000/ledma@5,8400010/le@5,8c 00000 dump on /dev/dsk/c0t3d0s1 size 83988K syncing file systems... done SunOS Release 5.6 Version Generic_105181-05 [UNIX(R) System V R elease 4.0] Copyright (c) 1983-1997, Sun Microsystems, Inc. vac: enabled in writeback mode cpu0: FMI,MB86907 (mid 0 impl 0x0 ver 0x5 clock 171 MHz) mem = 65536K (0x4000000) avail mem = 61407232 Ethernet address = 0:80:42:b:49:ba root nexus = FORCE,CPU-7V iommu0 at root: obio 0x10000000 sbus0 at iommu0: obio 0x10001000 ledma0 at sbus0: SBus slot 5 0x8400010 le0 at ledma0: SBus slot 5 0x8c00000 sparc ipl 6 le0 is /iommu@0,10000000/sbus@0,10001000/ledma@5,8400010/le@5,8c 00000 Requesting Internet address for 0:80:42:b:49:ba Found my IP address: 8257d97f (130.87.217.127) hostname: frc7v-cl1 domainname: kek.jp root on frc8vt:/export/root/frc7v-cl1 fstype nfsdyn obio0 at root zs0 at obio0: obio 0x100000 sparc ipl 12 zs0 is /obio/zs@0,100000 zs1 at obio0: obio 0x0 sparc ipl 12 zs1 is /obio/zs@0,0 cpu 0 initialization complete - online espdma0 at sbus0: SBus slot 5 0x8400000 esp0: esp-options=0x46 esp0 at espdma0: SBus slot 5 0x8800000 sparc ipl 4 esp0 is /iommu@0,10000000/sbus@0,10001000/espdma@5,8400000/esp@5 ,8800000 sd3 at esp0: target 3 lun 0 sd3 is /iommu@0,10000000/sbus@0,10001000/espdma@5,8400000/esp@5, 8800000/sd@3,0 dump on /dev/dsk/c0t3d0s1 size 83988K BAD TRAP: type=9 rp=fc02c8e4 addr=f61c0f5c mmu_fsr=326 rw=1 cam2: Data fault kernel read fault at addr=0xf61c0f5c, pme=0x0 MMU sfsr=326: Invalid Address on supv data fetch at level 3 pte addr = 0xf5fcb100, level = 3 wrong ctx/as ctx 0, as 0xf5914560 wrong ctx/as 2 ctx 0, as 0x8b pid=617, pc=0xf60a2630, sp=0xfc02c930, psr=0x44010c6, context=0 g1-g7: f026de48, 1e2dd, f5e66758, c00, 200, 1, f5e547a0 Begin traceback... sp = fc02c930 Called from f609add0, fp=fc02c9a0, args=0 2a 600 fc02cad8 f6141f 00 f00000 Called from f00bd3ac, fp=fc02ca70, args=f00000 5 600 2a fc02cb08 f5936908 Called from f0068900, fp=fc02cb80, args=f5b19b80 f608bea4 22 3 2 2 3 Called from 11f30, fp=effff8c0, args=1 600 3f53c0 5 24a70 24a80 End traceback... panic: Data fault syncing file systems... 2 done 2918 static and sysmap kernel pages 106 dynamic kernel data pages 508 kernel-pageable pages 0 segkmap kernel pages 0 segvn kernel pages 287 current user process pages 3819 total pages (3819 chunks) dumping to vp f59444dc, offset $q frc7v-cl1[38]% camac_b()ルーチンの physio()コールの直後の cmn_err()コールをはずして みる。 frc7v-cl1[38]% pwd /export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5 frc7v-cl1[39]% vi cc.c : static int camac_b(struct cc_device *cc, u_short mode, u_short naf, int len, int *retlen) { : physio(cc_strategy, NULL, dev, B_READ, cc_minphys, uio); : k->donc = CC_INT_AUTO_CLEAR | intrpri; cc->camac_qx = k->csr; cc_sys_status = cc->bp->b_error; /* E.Inoue: from cmn_err(CE_NOTE," camac_b: debug step08. --- cc_sys_status = 0x%x", cc_sys_s tatus); E.Inoue: end */ : "cc.c" 2786 lines, 69299 characters frc7v-cl1[40]% cc.cファイルをコンパイルする。 frc7v-cl1[40]% make ./script/cc_build.sh [Building for sun4m] rm -f cc.o frc7v-cl1[41]% cc および cc.confファイルをコピーする。 frc8vt# pwd /usr/kernel/drv frc8vt# ls -l cc* -rwxr-xr-x 1 root sys 57340 Mar 11 13:59 cc* -rwxr-xr-x 1 root sys 288 Mar 11 13:59 cc.conf* frc8vt# rcp frc7v-cl1:/export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5/cc . frc8vt# rcp frc7v-cl1:/export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5/cc.conf . frc8vt# ls -l cc* -rwxr-xr-x 1 root sys 57188 Mar 11 14:43 cc* -rwxr-xr-x 1 root sys 288 Mar 11 14:43 cc.conf* frc8vt# ccドライバをロードし直す。 frc7v-cl1# pwd /export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5 frc7v-cl1# make unload ./script/cc_unload.sh [Removing CAMAC device driver] [Removing CAMAC device driver from system] [Deleting CAMAC device files] frc7v-cl1# make load ./script/cc_load.sh [Installing CAMAC device driver] cp: cannot create /usr/kernel/drv/cc: Read-only file system cp: cannot create /usr/kernel/drv/cc.conf: Read-only file system [Adding CAMAC device driver to system] [Configuring CAMAC device driver] [Making CAMAC device files] frc7v-cl1# cam2プログラムを実行する。 frc7v-cl1[48]% pwd /export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5 frc7v-cl1[49]% cam2 Input transfer mode (1:word 2:long word) >1 Input loop >5 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >1 Input data counts >5 Input n a f >3 0 0 cam2プログラムはここでフリーズした。 システムはパニックを起こしてリブートしてしまった。 NOTICEB AaD cTR: Aebug sPep01. -:- entty camac_b() NpeIC=: 9in: 0x r5pc0=10 1 34 f 0c NO07CE9 camac_8: deeug 4tep a. --d call dhysi r()= NfTI6E:1 c3_3fr5cegy: debug step03. -- entem cc_mtrateuy(_ ound Es rc=_strategy:3d2bu6 s er04.w-=1 cam2: Data fault kernel read fault at addr=0xf6133f5c, pme=0x0 MMU sfsr=326: Invalid Address on supv data fetch at level 3 pte addr = 0xf60428cc, level = 3 wrong ctx/as ctx 0, as 0xf5914510 wrong ctx/as 2 ctx 0, as 0xe pid=420, pc=0xf606a630, sp=0xfc079930, psr=0x44010c6, context=0 g1-g7: f026de48, 10160, f5f61058, c00, 200, 1, f5f0c760 Be camac reade .. TspE: cc_stra e= : debuf scep05. --- sta0t DMA.tr-- dma_addr a 0x3c0 -OTICE:79c93intr: debug step06. 0 eCter cc_intr() aOTlCEl edc_ ntr: defug ster06a. om- cc- infe6rup0=06e aNOTICE: cc_intr: de0,g atep06dr -gs =ccept 0nt rr2pt: aetur c6_intr0) NO0ICE: ccfsc0ate79: debugastdp07. --- r8tur DfA NO60Ce:c ccfstrate00: debug step07af -0- cal0 00_w0it_sig( NOT CEa cc_strategyl dlbug etep07b. --- red rnfcv_wait_srg(om NOTICE: famac0b0bd 79a70, args=f00000 5 600 2a fc079b08 f5c7c850 Called from f0068900, fp=fc079b80, args=f5939c20 f5c7e8c4 22 3 22 3 Called from 11f30, fp=effff8c0, args=1 600 3f53c0 5 24a70 24a80 End traceback... panic: Data fault syncing file systems... 2 done 2776 static and sysmap kernel pages 88 dynamic kernel data pages 486 kernel-pageable pages 0 segkmap kernel pages 0 segvn kernel pages 287 current user process pages 3637 total pages (3637 chunks) dumping to vp f59444dc, offset 138880 3637 total pages, dump succeeded rebooting... Resetting ... screen not found. Can't open input device. Keyboard not present. Using tty for input and output. SPARC CPU-7V, No Keyboard ROM Rev. 2.15.1, 64 MB memory installed, Serial #9157050. Ethernet address 0:80:42:b:49:ba, Host ID: 808bb9ba. apply failed. Initializing Memory \ Type help for more information ok ok boot net -r Boot device: /iommu/sbus/ledma@5,8400010/le@5,8c00000 File and args: -r 2dc00 hostname: frc7v-cl1 domainname: kek.jp root server: frc8vt root directory: /export/root/frc7v-cl1 SunOS Release 5.6 Version Generic_105181-05 [UNIX(R) System V Release 4.0] Copyright (c) 1983-1997, Sun Microsystems, Inc. configuring network interfaces: le0. Hostname: frc7v-cl1 Configuring the /devices directory FRCvme V2.3.1 VME Nexus (FGA-5000 FGA-5100) NOTICE: VME: slavewin at vme=0x0, size=0x100000 space=0x2d020617 CAMAC device driver V1.3x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at VME0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 vmemem0 at VME0: vme32d16 0x0 vmemem1 at VME0: vme16d16 0x0 vmemem2 at VME0: vme24d16 0x0 vmemem3 at VME0: vme32d32 0x0 vmemem4 at VME0: vme16d32 0x0 vmemem5 at VME0: vme24d32 0x0 vmeplus0 at VME0: vme16d16 0x0 and vme24d16 0x0 and vme32d16 0x0 and vme16d32 0x 0 and vme24d32 0x0 and vme32d32 0x0 and space 0x2f offset 0x0 and space 0x6f offset 0x0 and space 0x10 offset 0x0 and space 0x11 offset 0x0 and space 0x50 offset 0x0 and space 0x51 offset 0x0 vmedma0 at VME0 vmefdma0 at VME0 vmedvma0 at VME0 vmectl0 at VME0 Configuring the /dev directory Configuring the /dev directory (compatibility devices) The system is coming up. Please wait. checking for crash dump...System went down at Thu Mar 11 14:39:45 1999 Saving 3637 pages of image in vmcore.18 3637 pages saved. Processing modules: Done. Constructing Namelist file: /var/crash/frc7v-cl1/unix.18 Namelist file complete. default ICCFP1.kek.jp done add net default: gateway ICCFP1 NIS domainname is kek.jp starting rpc services: rpcbind keyserv done. Setting netmask of le0 to 255.255.252.0 Setting default interface for multicast: add net 224.0.0.0: gateway frc7v-cl1 "/dev/swap" is not valid for swapping. It must be a block device or a regular file with the "save user text on execution" bit set. syslog service starting. syslogd: line 24: unexpected getnetconfig failure Print services started. volume management starting. Wnn6: Key License Server started.... Nihongo Multi Client Server (Wnn6 R2.30) Finished Reading Files The system is ready. frc7v-cl1 console login: システムは正常に立ち上がった。 システム・クラッシュ・ダンプ・ファイルをチェックする。 frc7v-cl1[37]% adb -k unix.18 vmcore.18 physmem 3e2d $c complete_panic(0x0,0x4401ce1,0x0,0x44010e1,0x0,0xf5ae8f40) + 5c do_panic(0x1,0xfc079794,0x0,0x48010e1,0x8,0xf00) + a8 vcmn_err(0x3,0xf0269878,0xfc079794,0x3,0xffeec000,0x0) + 180 cmn_err(0x3,0xf0269878,0xfc07a,0x53,0x53,0xf025e400) + 1c die(0x9,0xfc0798e4,0xf6133f5c,0x326,0x1,0xf0269878) + bc trap(0x0,0xfc0798e4,0xf0000000,0x0,0x6,0x1) + 930 fault(?) + 84 cmn_err(0x1,0xf606b12c,0xa,0x40,0xf5914510,0xfc079ad8) camac_b(0x0,0x2a,0x600,0xfc079ad8,0xf60ecf00,0xf00000) + 208 cc_write(0xf00000,0x5,0x600,0x2a,0xfc079b08,0xf5c7c850) + 3f0 writev(0xf5939c20) + 2b0 $uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ : /* E.Inoue: from */ cmn_err(CE_NOTE," camac_b: debug step09. --- return"); /* E.Inoue: end */ /* return */ *retlen = cc->retlen; return cc->status; } "cc.c" 2788 lines, 69305 characters frc7v-cl1[46]% cc.cファイルをコンパイルする。 frc7v-cl1[47]% pwd /export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5 frc7v-cl1[48]% make ./script/cc_build.sh [Building for sun4m] rm -f cc.o frc7v-cl1[49]% cc および cc.confファイルをコピーする。 frc8vt# pwd /usr/kernel/drv frc8vt# ls -l cc* -rwxr-xr-x 1 root sys 57188 Mar 11 14:43 cc* -rwxr-xr-x 1 root sys 288 Mar 11 14:43 cc.conf* frc8vt# rcp frc7v-cl1:/export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5/ cc . frc8vt# rcp frc7v-cl1:/export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5/ cc.conf . frc8vt# ls -l cc* -rwxr-xr-x 1 root sys 57036 Mar 11 15:20 cc* -rwxr-xr-x 1 root sys 288 Mar 11 15:20 cc.conf* frc8vt# ccドライバをロードし直す。 frc7v-cl1# pwd /export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5 frc7v-cl1# make unload ./script/cc_unload.sh [Removing CAMAC device driver] [Removing CAMAC device driver from system] [Deleting CAMAC device files] frc7v-cl1# make load ./script/cc_load.sh [Installing CAMAC device driver] cp: cannot create /usr/kernel/drv/cc: Read-only file system cp: cannot create /usr/kernel/drv/cc.conf: Read-only file system [Adding CAMAC device driver to system] [Configuring CAMAC device driver] [Making CAMAC device files] frc7v-cl1# ls -l /dev/cc lrwxrwxrwx 1 root other 69 Mar 11 1999 /dev/cc -> /devices/iommu@ 0,10000000/sbus@0,10001000/VME@5,ffffe00/cc@2d,ff00:cc frc7v-cl1# cam2プログラムを実行する。 frc7v-cl1[50]% pwd /export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5 frc7v-cl1[51]% cam2 Input transfer mode (1:word 2:long word) >1 Input loop >5 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >1 Input data counts >5 Input n a f >3 0 0 cam2プログラムはここでフリーズした。 システムはパニックを起こしてリブートしてしまった。 NOTICE: camBc_A: debug Dte 0T. --- enteRAPamac_b:) tyOTICE: inp 0x3f53c0e10 1 =4 0 0 NOT9CE: camac_r: debug step02. p-- =all physio() NfTIcE: 0c8_stra2e8e:4 eaugdstep03.d--r en=er fc_61rategy() 2OT5fE5 cccstr tmgy: debum stup04. --- foun_ thefcamacsread rO=ICE:3 2c6s rategy: derug step04-1. w=- d1a_ cam2: Data fault kernel read fault at addr=0xf6125f5c, pme=0x0 MMU sfsr=326: Invalid Address on supv data fetch at level 3 pte addr = 0xf602ca94, level = 3 wrong ctx/as ctx 0, as 0xf5914740 wrong ctx/as 2 ctx 0, as 0xf6 pid=406, pc=0xf6060630, sp=0xfc082930, psr=0x44010c5, context=0 g1-g7: f026de48, 79ca, f601ee78, c00, 200, 1, f5e64300 Br = 0e3g0 inT CE: coutt in 32bit=10r NOaICEc cc_ebrategy:adecugk.tep05. .-- s. rt DMA NsTICEp cc_intr: d bug =te 06fc-0- 8n2er cc_9ntr() r: deE:0 cc_in Cg saep0lale-d- c ->inferompt= xef N60I5E: cc_int8d debugd0te, fb. p-- cc-> execut=ng_dmf_c0a8 !2 0 0 OfcCE: cc_s08ategy: de2ag step07. d-- 8e urf D6A0t: aet rn6cc0intr() NeTICE: 2c_sfr0t0gy debuf ll c00a. 00- c _waiC_sal()l NOTICE: ec_strategy: debud stefr7bo m - return f0_w0it_sig() fc082a70, args=f00000 5 600 2a fc082b08 f5fb5008o() Called from f0068900, fp=fc082b80, args=f5ee5420 f5c81d04 22 3 22 3 Called from 11f30, fp=effff8c0, args=1 600 3f53c0 5 24a70 24a80 End traceback... panic: Data fault syncing file systems... 2 done 2763 static and sysmap kernel pages 102 dynamic kernel data pages 484 kernel-pageable pages 0 segkmap kernel pages 0 segvn kernel pages 287 current user process pages 3636 total pages (3636 chunks) dumping to vp f59444dc, offset 138888 3636 total pages, dump succeeded rebooting... Resetting ... screen not found. Can't open input device. Keyboard not present. Using tty for input and output. SPARC CPU-7V, No Keyboard ROM Rev. 2.15.1, 64 MB memory installed, Serial #9157050. Ethernet address 0:80:42:b:49:ba, Host ID: 808bb9ba. apply failed. Initializing Memory | Type help for more information ok ok boot net -r Boot device: /iommu/sbus/ledma@5,8400010/le@5,8c00000 File and args: -r 2dc00 hostname: frc7v-cl1 domainname: kek.jp root server: frc8vt root directory: /export/root/frc7v-cl1 SunOS Release 5.6 Version Generic_105181-05 [UNIX(R) System V Release 4.0] Copyright (c) 1983-1997, Sun Microsystems, Inc. configuring network interfaces: le0. Hostname: frc7v-cl1 Configuring the /devices directory FRCvme V2.3.1 VME Nexus (FGA-5000 FGA-5100) NOTICE: VME: slavewin at vme=0x0, size=0x100000 space=0x2d020617 CAMAC device driver V1.3x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at VME0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 vmemem0 at VME0: vme32d16 0x0 vmemem1 at VME0: vme16d16 0x0 vmemem2 at VME0: vme24d16 0x0 vmemem3 at VME0: vme32d32 0x0 vmemem4 at VME0: vme16d32 0x0 vmemem5 at VME0: vme24d32 0x0 vmeplus0 at VME0: vme16d16 0x0 and vme24d16 0x0 and vme32d16 0x0 and vme16d32 0x 0 and vme24d32 0x0 and vme32d32 0x0 and space 0x2f offset 0x0 and space 0x6f offset 0x0 and space 0x10 offset 0x0 and space 0x11 offset 0x0 and space 0x50 offset 0x0 and space 0x51 offset 0x0 vmedma0 at VME0 vmefdma0 at VME0 vmedvma0 at VME0 vmectl0 at VME0 Configuring the /dev directory Configuring the /dev directory (compatibility devices) The system is coming up. Please wait. checking for crash dump...System went down at Thu Mar 11 15:15:59 1999 Saving 3636 pages of image in vmcore.19 3636 pages saved. Processing modules: Done. Constructing Namelist file: /var/crash/frc7v-cl1/unix.19 Namelist file complete. default ICCFP1.kek.jp done add net default: gateway ICCFP1 NIS domainname is kek.jp starting rpc services: rpcbind keyserv done. Setting netmask of le0 to 255.255.252.0 Setting default interface for multicast: add net 224.0.0.0: gateway frc7v-cl1 "/dev/swap" is not valid for swapping. It must be a block device or a regular file with the "save user text on execution" bit set. syslog service starting. syslogd: line 24: unexpected getnetconfig failure Print services started. volume management starting. Wnn6: Key License Server started.... Nihongo Multi Client Server (Wnn6 R2.30) Finished Reading Files The system is ready. frc7v-cl1 console login: システムは正常に立ち上がった。 frc7v-cl1システムのホームディレクトリをマウントする。 onlsun1[81]% !! rlogin frc7v-cl1 Password: No directory! Logging in with home=/ Last login: Thu Mar 11 14:47:45 from onlsun1.kek.jp Sun Microsystems Inc. SunOS 5.6 Generic August 1997 frc7v-cl1% su Password: # mount frc8vt:/export/home/frc8vt /export/home/frc7v-cl1 # frc7v-cl1% logout Connection closed. onlsun1[82]% !! rlogin frc7v-cl1 Last login: Thu Mar 11 15:20:07 from onlsun1.kek.jp Sun Microsystems Inc. SunOS 5.6 Generic August 1997 frc7v-cl1[33]% ls -l total 8 drwxr-xr-x 3 inoue staff 512 Feb 9 15:34 CAMAC/ drwxr-xr-x 3 inoue staff 512 Nov 6 11:07 FORCE/ drwxr-xr-x 2 inoue staff 512 Feb 18 10:29 Ktaka/ -rw------- 1 inoue staff 592 Feb 26 16:49 mbox frc7v-cl1[34]% システム・クラッシュ・ダンプ・ファイルをチェックする。 frc7v-cl1[37]% adb -k unix.19 vmcore.19 physmem 3e2d $c complete_panic(0x0,0x4401ce0,0x0,0x44010e0,0x0,0xf00) + 5c do_panic(0x1,0xfc082794,0x0,0x48010e0,0x1,0xf5bca900) + a8 vcmn_err(0x3,0xf0269878,0xfc082794,0x3,0xffeec000,0x0) + 180 cmn_err(0x3,0xf0269878,0xfc083,0x53,0x53,0xf025e400) + 1c die(0x9,0xfc0828e4,0xf6125f5c,0x326,0x1,0xf0269878) + bc trap(0x0,0xfc0828e4,0xf0000000,0x0,0x6,0x1) + 930 fault(?) + 84 cmn_err(0x1,0xf60610cc,0xa,0x40,0xf5914740,0xfc082ad8) camac_b(0x0,0x2a,0x600,0xfc082ad8,0xf60e2f00,0xf00000) + 208 cc_write(0xf00000,0x5,0x600,0x2a,0xfc082b08,0xf5fb5008) + 3f0 writev(0xf5ee5420) + 2b0 $q frc7v-cl1[38]% cmn_err()文でエラー。 camac_b()ルーチンで使っている cmn_err()文をすべてコメントアウト。 frc7v-cl1[44]% vi cc.c : static int camac_b(struct cc_device *cc, u_short mode, u_short naf, int len, int *retlen) { register dev_t dev = cc->dev; register struct K_REG *k = cc->k; register struct uio *uio = cc->uio; /* E.Inoue: from cmn_err(CE_NOTE," camac_b: debug step01. --- enter camac_b()"); E.Inoue: end */ cc->klist = CC_KLIST_NO; cc->mode = mode; cc->naf = naf; cc->len = len; /* set uio for DMA */ uio->uio_iov->iov_base = (caddr_t)cc->ptr_udata; uio->uio_iov->iov_len = (mode & CC_BIT16) ? len * 2: len * 4; uio->uio_iovcnt = 1; uio->uio_segflg = UIO_USERSPACE; uio->uio_offset = 0; /* */ /* uprintf(" in: 0x%x %d %d %d %d %d\n", uio->uio_iov->iov_base, uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ /* cmn_err(CE_NOTE," in: 0x%x %d %d %d %d %d", uio->uio_iov->iov_base, uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ /* */ /* execute DMA transfer */ switch (cc->naf & 0x0018) { case 0x0000: /* CAMAC read */ /* E.Inoue: from cmn_err(CE_NOTE," camac_b: debug step02. --- call physio()"); E.Inoue: end */ physio(cc_strategy, NULL, dev, B_READ, cc_minphys, uio); /* E.Inoue: from cmn_err(CE_NOTE," camac_b: debug step07. --- return physio()"); E.Inoue: end */ break; case 0x0010: /* CAMAC write */ physio(cc_strategy, NULL, dev, B_WRITE, cc_minphys, uio); break; default: cc->status = CC_STA_BLOCK_INVFUNC; return 0; } k->donc = CC_INT_AUTO_CLEAR | intrpri; cc->camac_qx = k->csr; cc_sys_status = cc->bp->b_error; /* E.Inoue: from cmn_err(CE_NOTE," camac_b: debug step08. --- cc_sys_status = 0x%x", cc_sys_s tatus); E.Inoue: end */ /* check timeout */ if (cc->interrupt & CC_INT_TIMEOUT ) { cc->interrupt &= ~CC_INT_TIMEOUT; cc->status = CC_STA_BLOCK_TIMEOUT; *retlen = 0; return cc->status; } /* */ /* uprintf("out: %d %d %d %d %d\n", uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ /* cmn_err(CE_NOTE,"out: %d %d %d %d %d", uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ /* */ /* Q-STOP mode or no error */ if ((mode & CC_QSCAN) == 0 || (k->csr & CC_ERR) == 0) { if ((mode & CC_BIT16) == 0) { cc->retlen = cc->len - k->mtc / 2; /* retlen=number of transfer */ if ((mode & CC_QSCAN) == 0 && (k->csr & CC_ERR) != 0) /* Q-STOP */ cc->retlen = cc->retlen - 2; /* delete the data of Q=0 */ cc->ptr_udata += cc->retlen * 2; /* ptr(2bytes),retlen(4bytes) */ cc->len_udata += cc->retlen * 2; } else { cc->retlen = cc->len - k->mtc; if ((mode & CC_QSCAN) == 0 && (k->csr & CC_ERR) != 0) /* Q-STOP */ cc->retlen--; /* delete the data of Q=0 */ cc->ptr_udata += cc->retlen; /* ptr(2bytes),retlen(2bytes) */ cc->len_udata += cc->retlen; } } /* E.Inoue: from cmn_err(CE_NOTE," camac_b: debug step09. --- return"); E.Inoue: end */ /* return */ *retlen = cc->retlen; return cc->status; } "cc.c" 2790 lines, 69295 characters frc7v-cl1[44]% cc.cファイルをコンパイルする。 frc7v-cl1[44]% make ./script/cc_build.sh [Building for sun4m] rm -f cc.o frc7v-cl1[45]% cc および cc.confファイルをコピーする。 frc8vt# pwd /usr/kernel/drv frc8vt# ls -l cc* -rwxr-xr-x 1 root sys 57036 Mar 11 15:20 cc* -rwxr-xr-x 1 root sys 288 Mar 11 15:20 cc.conf* frc8vt# rcp frc7v-cl1:/export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5/ cc . frc8vt# rcp frc7v-cl1:/export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5/ cc.conf . frc8vt# ls -l cc* -rwxr-xr-x 1 root sys 56436 Mar 11 15:36 cc* -rwxr-xr-x 1 root sys 288 Mar 11 15:36 cc.conf* frc8vt# ccドライバをロードし直す。 frc7v-cl1# make unload ./script/cc_unload.sh [Removing CAMAC device driver] [Removing CAMAC device driver from system] [Deleting CAMAC device files] frc7v-cl1# make load ./script/cc_load.sh [Installing CAMAC device driver] cp: cannot create /usr/kernel/drv/cc: Read-only file system cp: cannot create /usr/kernel/drv/cc.conf: Read-only file system [Adding CAMAC device driver to system] [Configuring CAMAC device driver] [Making CAMAC device files] frc7v-cl1# ls -l /dev/cc lrwxrwxrwx 1 root other 69 Mar 11 1999 /dev/cc -> /devices/iommu@ 0,10000000/sbus@0,10001000/VME@5,ffffe00/cc@2d,ff00:cc frc7v-cl1# cam2プログラムを実行する。 frc7v-cl1[46]% pwd /export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5 frc7v-cl1[47]% cam2 Input transfer mode (1:word 2:long word) >1 Input loop >5 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >1 Input data counts >5 Input n a f >3 0 0 cam2プログラムはここでフリーズした。 システムはパニックを起こしてリブートしてしまった NOTICE:BAcD_str teTR: AebPg s:ep t.y---penter ce=stra9egy() rTIpE: =cc_stratfgy: debuc 0tepd2. --- f8ued c e caaacdread NOTICE: dr=strafe61: de2cg sfep04-5c --- dma_ mdm u 0x3c0 NOTI_E:fcount sr 32=it=10 gy:6C r cc_stw=1 cam2: Data fault kernel read fault at addr=0xf612cf5c, pme=0x0 MMU sfsr=326: Invalid Address on supv data fetch at level 3 pte addr = 0xf5f8d5b0, level = 3 wrong ctx/as ctx 0, as 0xf59146a0 wrong ctx/as 2 ctx 0, as 0xed pid=401, pc=0xf606a570, sp=0xfc0d2938, psr=0x44010c2, context=0 g1-g7: f5900000, f026f0bc, a00, c00, 200, 1, f5f824e0 Bebeg sgep05. in- ttrtrDMA NOaICE: cc_incr: debugesbapck...-. enter s_intrp) rOTIC=: cc_int fc0dbu2 st9p063. 8-- cc->inte Cta0xl lOeICE: dcc_in r: debfg ster06b.o-m- c ->execfting_dm6_f06g2d= 0 NOTICd: cc0intr, debug step06df p=- afcepc int0rrudt: retur2 cc_9ntr(a N0T, Ea cc_strrtegg: dsbug step07. --= f5turn DMA 00OTICE: cc_s rategy:fceb0g step07b.d-2- return cvadait_sig8) f60ecf00 f00000 Called from f00bd3ac, fp=fc0d2a70, args=f00000 5 600 2a fc0d2b08 f5c7e850 Called from f0068900, fp=fc0d2b80, args=f5fc6f18 f5c7cd04 22 3 22 3 Called from 11f30, fp=effff8c0, args=1 600 3f53c0 5 24a70 24a80 End traceback... panic: Data fault syncing file systems... 2 done 2769 static and sysmap kernel pages 108 dynamic kernel data pages 496 kernel-pageable pages 0 segkmap kernel pages 0 segvn kernel pages 287 current user process pages 3660 total pages (3660 chunks) dumping to vp f59444dc, offset 138696 3660 total pages, dump succeeded rebooting... Resetting ... screen not found. Can't open input device. Keyboard not present. Using tty for input and output. SPARC CPU-7V, No Keyboard ROM Rev. 2.15.1, 64 MB memory installed, Serial #9157050. Ethernet address 0:80:42:b:49:ba, Host ID: 808bb9ba. apply failed. Initializing Memory \ Type help for more information ok ok boot net -r Boot device: /iommu/sbus/ledma@5,8400010/le@5,8c00000 File and args: -r 2dc00 hostname: frc7v-cl1 domainname: kek.jp root server: frc8vt root directory: /export/root/frc7v-cl1 SunOS Release 5.6 Version Generic_105181-05 [UNIX(R) System V Release 4.0] Copyright (c) 1983-1997, Sun Microsystems, Inc. configuring network interfaces: le0. Hostname: frc7v-cl1 Configuring the /devices directory FRCvme V2.3.1 VME Nexus (FGA-5000 FGA-5100) NOTICE: VME: slavewin at vme=0x0, size=0x100000 space=0x2d020617 CAMAC device driver V1.3x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at VME0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 vmemem0 at VME0: vme32d16 0x0 vmemem1 at VME0: vme16d16 0x0 vmemem2 at VME0: vme24d16 0x0 vmemem3 at VME0: vme32d32 0x0 vmemem4 at VME0: vme16d32 0x0 vmemem5 at VME0: vme24d32 0x0 vmeplus0 at VME0: vme16d16 0x0 and vme24d16 0x0 and vme32d16 0x0 and vme16d32 0x 0 and vme24d32 0x0 and vme32d32 0x0 and space 0x2f offset 0x0 and space 0x6f offset 0x0 and space 0x10 offset 0x0 and space 0x11 offset 0x0 and space 0x50 offset 0x0 and space 0x51 offset 0x0 vmedma0 at VME0 vmefdma0 at VME0 vmedvma0 at VME0 vmectl0 at VME0 Configuring the /dev directory Configuring the /dev directory (compatibility devices) The system is coming up. Please wait. checking for crash dump...System went down at Thu Mar 11 15:32:36 1999 Saving 3660 pages of image in vmcore.20 3660 pages saved. Processing modules: Done. Constructing Namelist file: /var/crash/frc7v-cl1/unix.20 Namelist file complete. default ICCFP1.kek.jp done add net default: gateway ICCFP1 NIS domainname is kek.jp starting rpc services: rpcbind keyserv done. Setting netmask of le0 to 255.255.252.0 Setting default interface for multicast: add net 224.0.0.0: gateway frc7v-cl1 "/dev/swap" is not valid for swapping. It must be a block device or a regular file with the "save user text on execution" bit set. syslog service starting. syslogd: line 24: unexpected getnetconfig failure Print services started. volume management starting. Wnn6: Key License Server started.... Nihongo Multi Client Server (Wnn6 R2.30) Finished Reading Files The system is ready. frc7v-cl1 console login: システムは正常に立ち上がった。 frc7v-cl1システムのホームディレクトリをマウントする。 onlsun1[83]% !! rlogin frc7v-cl1 Password: No directory! Logging in with home=/ Last login: Thu Mar 11 15:20:48 from onlsun1.kek.jp Sun Microsystems Inc. SunOS 5.6 Generic August 1997 frc7v-cl1% su Password: # mount frc8vt:/export/home/frc8vt /export/home/frc7v-cl1 # frc7v-cl1% logout Connection closed. onlsun1[84]% !! rlogin frc7v-cl1 Last login: Thu Mar 11 15:37:03 from onlsun1.kek.jp Sun Microsystems Inc. SunOS 5.6 Generic August 1997 frc7v-cl1[33]% ls -l total 8 drwxr-xr-x 3 inoue staff 512 Feb 9 15:34 CAMAC/ drwxr-xr-x 3 inoue staff 512 Nov 6 11:07 FORCE/ drwxr-xr-x 2 inoue staff 512 Feb 18 10:29 Ktaka/ -rw------- 1 inoue staff 592 Feb 26 16:49 mbox frc7v-cl1[34]% システム・クラッシュ・ダンプ・ファイルをチェックする。 frc7v-cl1[39]% adb -k unix.20 vmcore.20 physmem 3e2d $c complete_panic(0x0,0x4401ce5,0x0,0x44010e5,0x0,0xf00) + 5c do_panic(0x1,0xfc0d279c,0x0,0x48010e5,0x1,0xf5bdc800) + a8 vcmn_err(0x3,0xf0269878,0xfc0d279c,0x3,0xffeec000,0x0) + 180 cmn_err(0x3,0xf0269878,0xfc0d3,0x53,0x53,0xf025e400) + 1c die(0x9,0xfc0d28ec,0xf612cf5c,0x326,0x1,0xf0269878) + bc trap(0x0,0xfc0d28ec,0xf0000000,0x0,0x6,0x1) + 930 fault(?) + 84 physio(0x0,0xf028c49c,0xa,0x40,0xf59146a0,0xfc0d2ad8) camac_b(0xf5c7e850,0x2a,0x600,0xfc0d2ad8,0xf60ecf00,0xf00000) + 148 cc_write(0xf00000,0x5,0x600,0x2a,0xfc0d2b08,0xf5c7e850) + 3f0 writev(0xf5fc6f18) + 2b0 $ dump on /dev/dsk/c0t3d0s1 size 83988K pem: no event handler FRCvme V2.3.1 VME Nexus (FGA-5000 FGA-5100) NOTICE: VME: slavewin at vme=0x0, size=0x100000 space=0x2d020617 VME0 at sbus0: SBus slot 5 0xffffe00 sparc ipl 15, SBus level 1 sparc ipl 2, SBus level 2 sparc ipl 3, SBus level 3 sparc ipl 5, SBus level 4 sparc ipl 7, SBus level 5 sparc ipl 9, SBus level 6 sparc ipl 11, SBus level 7 sparc ipl 13 CAMAC device driver V1.3x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at VME0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 cc0 is /iommu@0,10000000/sbus@0,10001000/VME@5,ffffe00/cc@2d,ff0 0 vmemem0 at VME0: vme32d16 0x0 vmemem0 is /iommu@0,10000000/sbus@0,10001000/VME@5,ffffe00/vmeme m@d,0 vmemem1 at VME0: vme16d16 0x0 vmemem1 is /iommu@0,10000000/sbus@0,10001000/VME@5,ffffe00/vmeme m@2d,0 vmemem2 at VME0: vme24d16 0x0 vmemem2 is /iommu@0,10000000/sbus@0,10001000/VME@5,ffffe00/vmeme m@3d,0 vmemem3 at VME0: vme32d32 0x0 vmemem3 is /iommu@0,10000000/sbus@0,10001000/VME@5,ffffe00/vmeme m@4d,0 vmemem4 at VME0: vme16d32 0x0 vmemem4 is /iommu@0,10000000/sbus@0,10001000/VME@5,ffffe00/vmeme m@6d,0 vmemem5 at VME0: vme24d32 0x0 vmemem5 is /iommu@0,10000000/sbus@0,10001000/VME@5,ffffe00/vmeme m@7d,0 sbusmem0 at sbus0: SBus slot 0 0x0 sbusmem0 is /iommu@0,10000000/sbus@0,10001000/sbusmem@0,0 sbusmem1 at sbus0: SBus slot 1 0x0 sbusmem1 is /iommu@0,10000000/sbus@0,10001000/sbusmem@1,0 sbusmem2 at sbus0: SBus slot 2 0x0 sbusmem2 is /iommu@0,10000000/sbus@0,10001000/sbusmem@2,0 sbusmem3 at sbus0: SBus slot 3 0x0 sbusmem3 is /iommu@0,10000000/sbus@0,10001000/sbusmem@3,0 sbusmem4 at sbus0: SBus slot 4 0x0 sbusmem4 is /iommu@0,10000000/sbus@0,10001000/sbusmem@4,0 sbusmem5 at sbus0: SBus slot 5 0x0 sbusmem5 is /iommu@0,10000000/sbus@0,10001000/sbusmem@5,0 SUNW,bpp0 at sbus0: SBus slot 5 0xc800000 SBus level 2 sparc ipl 3 SUNW,bpp0 is /iommu@0,10000000/sbus@0,10001000/SUNW,bpp@5,c80000 0 pseudo-device: winlock0 winlock0 is /pseudo/winlock@0 pseudo-device: lockstat0 lockstat0 is /pseudo/lockstat@0 pseudo-device: vol0 vol0 is /pseudo/vol@0 pseudo-device: llc10 llc10 is /pseudo/llc1@0 vmeplus0 at VME0: vme16d16 0x0 and vme24d16 0x0 and vme32d16 0x0 and vme16d32 0x0 and vme24d32 0x0 and vme32d32 0x0 and space 0x 2f offset 0x0 and space 0x6f offset 0x0 and space 0x10 offset 0x0 and space 0x11 offset 0x0 and space 0x50 offset 0x0 and space 0x51 offset 0x0 vmeplus0 is /iommu@0,10000000/sbus@0,10001000/VME@5,ffffe00/vmep lus@2d,0 pseudo-device: pm0 pm0 is /pseudo/pm@0 vmedma0 at VME0 vmedma0 is /iommu@0,10000000/sbus@0,10001000/VME@5,ffffe00/vmedm a vmefdma0 at VME0 vmefdma0 is /iommu@0,10000000/sbus@0,10001000/VME@5,ffffe00/vmef dma vmedvma0 at VME0 vmedvma0 is /iommu@0,10000000/sbus@0,10001000/VME@5,ffffe00/vmed vma vmectl0 at VME0 vmectl0 is /iommu@0,10000000/sbus@0,10001000/VME@5,ffffe00/vmect l sysconfig0: LCA is XC4003 compatible sysconfig0 at root: obio 0x71380000 sysconfig0 is /sysconfig@0,71380000 BAD TRAP: type=9 rp=fc0d28ec addr=f612cf5c mmu_fsr=326 rw=1 cam2: Data fault kernel read fault at addr=0xf612cf5c, pme=0x0 MMU sfsr=326: Invalid Address on supv data fetch at level 3 pte addr = 0xf5f8d5b0, level = 3 wrong ctx/as ctx 0, as 0xf59146a0 wrong ctx/as 2 ctx 0, as 0xed pid=401, pc=0xf606a570, sp=0xfc0d2938, psr=0x44010c2, context=0 g1-g7: f5900000, f026f0bc, a00, c00, 200, 1, f5f824e0 Begin traceback... sp = fc0d2938 Called from f6062dd0, fp=fc0d29a0, args=f5c7e850 2a 600 fc0d2ad8 f60ecf00 f00000 Called from f00bd3ac, fp=fc0d2a70, args=f00000 5 600 2a fc0d2b08 f5c7e850 Called from f0068900, fp=fc0d2b80, args=f5fc6f18 f5c7cd04 22 3 2 2 3 Called from 11f30, fp=effff8c0, args=1 600 3f53c0 5 24a70 24a80 End traceback... panic: Data fault syncing file systems... 2 done 2769 static and sysmap kernel pages 108 dynamic kernel data pages 496 kernel-pageable pages 0 segkmap kernel pages 0 segvn kernel pages 287 current user process pages 3660 total pages (3660 chunks) dumping to vp f59444dc, offset $q frc7v-cl1[40]% physio()ルーチンでエラーを起こしている。 cc.cファイルを修正。 frc7v-cl1[55]% vi cc.c : static int camac_b(struct cc_device *cc, u_short mode, u_short naf, int len, int *retlen) { register dev_t dev = cc->dev; register struct K_REG *k = cc->k; register struct uio *uio = cc->uio; /* E.Inoue: from */ mutex_enter(&cc->mutex); /* start MUTEX */ /* E.Inoue: from */ /* E.Inoue: from cmn_err(CE_NOTE," camac_b: debug step01. --- enter camac_b()"); E.Inoue: end */ cc->klist = CC_KLIST_NO; cc->mode = mode; cc->naf = naf; cc->len = len; /* set uio for DMA */ uio->uio_iov->iov_base = (caddr_t)cc->ptr_udata; uio->uio_iov->iov_len = (mode & CC_BIT16) ? len * 2: len * 4; uio->uio_iovcnt = 1; uio->uio_segflg = UIO_USERSPACE; uio->uio_offset = 0; /* */ /* uprintf(" in: 0x%x %d %d %d %d %d\n", uio->uio_iov->iov_base, uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ /* cmn_err(CE_NOTE," in: 0x%x %d %d %d %d %d", uio->uio_iov->iov_base, uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ /* */ /* execute DMA transfer */ switch (cc->naf & 0x0018) { case 0x0000: /* CAMAC read */ /* E.Inoue: from cmn_err(CE_NOTE," camac_b: debug step02. --- call physio()"); E.Inoue: end */ physio(cc_strategy, NULL, dev, B_READ, cc_minphys, uio); /* E.Inoue: from cmn_err(CE_NOTE," camac_b: debug step07. --- return physio()"); E.Inoue: end */ break; case 0x0010: /* CAMAC write */ physio(cc_strategy, NULL, dev, B_WRITE, cc_minphys, uio); break; default: cc->status = CC_STA_BLOCK_INVFUNC; return 0; } k->donc = CC_INT_AUTO_CLEAR | intrpri; cc->camac_qx = k->csr; cc_sys_status = cc->bp->b_error; /* E.Inoue: from cmn_err(CE_NOTE," camac_b: debug step08. --- cc_sys_status = 0x%x", cc_sys_s tatus); E.Inoue: end */ /* check timeout */ if (cc->interrupt & CC_INT_TIMEOUT ) { cc->interrupt &= ~CC_INT_TIMEOUT; cc->status = CC_STA_BLOCK_TIMEOUT; *retlen = 0; return cc->status; } /* */ /* uprintf("out: %d %d %d %d %d\n", uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ /* cmn_err(CE_NOTE,"out: %d %d %d %d %d", uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ /* */ /* Q-STOP mode or no error */ if ((mode & CC_QSCAN) == 0 || (k->csr & CC_ERR) == 0) { if ((mode & CC_BIT16) == 0) { cc->retlen = cc->len - k->mtc / 2; /* retlen=number of transfer */ if ((mode & CC_QSCAN) == 0 && (k->csr & CC_ERR) != 0) /* Q-STOP */ cc->retlen = cc->retlen - 2; /* delete the data of Q=0 */ cc->ptr_udata += cc->retlen * 2; /* ptr(2bytes),retlen(4bytes) */ cc->len_udata += cc->retlen * 2; } else { cc->retlen = cc->len - k->mtc; if ((mode & CC_QSCAN) == 0 && (k->csr & CC_ERR) != 0) /* Q-STOP */ cc->retlen--; /* delete the data of Q=0 */ cc->ptr_udata += cc->retlen; /* ptr(2bytes),retlen(2bytes) */ cc->len_udata += cc->retlen; } } /* E.Inoue: from cmn_err(CE_NOTE," camac_b: debug step09. --- return"); E.Inoue: end */ /* E.Inoue: from */ mutex_exit(&cc->mutex); /* end MUTEX */ /* E.Inoue: end */ /* return */ *retlen = cc->retlen; return cc->status; } "cc.c" 2797 lines, 69524 characters frc7v-cl1[56]% cc.cファイルをコンパイルする。 frc7v-cl1[58]% make ./script/cc_build.sh [Building for sun4m] rm -f cc.o frc7v-cl1[59]% cc および cc.confファイルをコピーする。 frc8vt# pwd /usr/kernel/drv frc8vt# ls -l cc* -rwxr-xr-x 1 root sys 56436 Mar 11 15:36 cc* -rwxr-xr-x 1 root sys 288 Mar 11 15:36 cc.conf* frc8vt# rcp frc7v-cl1:/export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5/ cc . frc8vt# rcp frc7v-cl1:/export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5/ cc.conf . frc8vt# ls -l cc* -rwxr-xr-x 1 root sys 56500 Mar 11 16:19 cc* -rwxr-xr-x 1 root sys 288 Mar 11 16:19 cc.conf* frc8vt# ccドライバをロードし直す。 frc7v-cl1# make unload ./script/cc_unload.sh [Removing CAMAC device driver] [Removing CAMAC device driver from system] [Deleting CAMAC device files] frc7v-cl1# make load ./script/cc_load.sh [Installing CAMAC device driver] cp: cannot create /usr/kernel/drv/cc: Read-only file system cp: cannot create /usr/kernel/drv/cc.conf: Read-only file system [Adding CAMAC device driver to system] [Configuring CAMAC device driver] [Making CAMAC device files] frc7v-cl1# ls -l /dev/cc lrwxrwxrwx 1 root other 69 Mar 11 1999 /dev/cc -> /devices/iommu@ 0,10000000/sbus@0,10001000/VME@5,ffffe00/cc@2d,ff00:cc frc7v-cl1# cam2プログラムを実行する。 frc7v-cl1[61]% pwd /export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5 frc7v-cl1[62]% cam2 Input transfer mode (1:word 2:long word) >1 Input loop >5 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >1 Input data counts >5 Input n a f >3 0 0 cam2プログラムはここでフリーズした。 システムはパニックを起こしてリブートしてしまった。 NOTpanic: recursive mutex_enter, lp=f5c52980 owner=f5ffb580 thread=f5ffb580 type =0 tsid=fe01 syncing file systems...ICE: 2 done 2767 static and sysmap kernel pagesr cc strategy() 110 dynamic kernel data pages 496 kernel-pageable pages 0 segkmap kernel pages 0 segvn kernel pages 287 current user process pages 3660 total pages (3660 chunks) dumping to vp f59444dc, offset 138696 3660 total pages, dump succeeded rebooting... Resetting ... screen not found. Can't open input device. Keyboard not present. Using tty for input and output. SPARC CPU-7V, No Keyboard ROM Rev. 2.15.1, 64 MB memory installed, Serial #9157050. Ethernet address 0:80:42:b:49:ba, Host ID: 808bb9ba. apply failed. Initializing Memory | Type help for more information ok ok boot net -r Boot device: /iommu/sbus/ledma@5,8400010/le@5,8c00000 File and args: -r 2dc00 hostname: frc7v-cl1 domainname: kek.jp root server: frc8vt root directory: /export/root/frc7v-cl1 SunOS Release 5.6 Version Generic_105181-05 [UNIX(R) System V Release 4.0] Copyright (c) 1983-1997, Sun Microsystems, Inc. configuring network interfaces: le0. Hostname: frc7v-cl1 Configuring the /devices directory FRCvme V2.3.1 VME Nexus (FGA-5000 FGA-5100) NOTICE: VME: slavewin at vme=0x0, size=0x100000 space=0x2d020617 CAMAC device driver V1.3x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at VME0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 vmemem0 at VME0: vme32d16 0x0 vmemem1 at VME0: vme16d16 0x0 vmemem2 at VME0: vme24d16 0x0 vmemem3 at VME0: vme32d32 0x0 vmemem4 at VME0: vme16d32 0x0 vmemem5 at VME0: vme24d32 0x0 vmeplus0 at VME0: vme16d16 0x0 and vme24d16 0x0 and vme32d16 0x0 and vme16d32 0x 0 and vme24d32 0x0 and vme32d32 0x0 and space 0x2f offset 0x0 and space 0x6f offset 0x0 and space 0x10 offset 0x0 and space 0x11 offset 0x0 and space 0x50 offset 0x0 and space 0x51 offset 0x0 vmedma0 at VME0 vmefdma0 at VME0 vmedvma0 at VME0 vmectl0 at VME0 Configuring the /dev directory Configuring the /dev directory (compatibility devices) The system is coming up. Please wait. checking for crash dump...System went down at Thu Mar 11 16:15:26 1999 Saving 3660 pages of image in vmcore.21 3660 pages saved. Processing modules: Done. Constructing Namelist file: /var/crash/frc7v-cl1/unix.21 Namelist file complete. default ICCFP1.kek.jp done add net default: gateway ICCFP1 NIS domainname is kek.jp starting rpc services: rpcbind keyserv done. Setting netmask of le0 to 255.255.252.0 Setting default interface for multicast: add net 224.0.0.0: gateway frc7v-cl1 "/dev/swap" is not valid for swapping. It must be a block device or a regular file with the "save user text on execution" bit set. syslog service starting. syslogd: line 24: unexpected getnetconfig failure Print services started. volume management starting. Wnn6: Key License Server started.... Nihongo Multi Client Server (Wnn6 R2.30) Finished Reading Files The system is ready. frc7v-cl1 console login: システムは正常に立ち上がった。 frc7v-vl1システムのホームディレクトリをマウントする。 rlogin frc7v-cl1 Password: No directory! Logging in with home=/ Last login: Thu Mar 11 15:37:49 from onlsun1.kek.jp Sun Microsystems Inc. SunOS 5.6 Generic August 1997 frc7v-cl1% su Password: # mount frc8vt:/export/home/frc8vt /export/home/frc7v-cl1 # frc7v-cl1% logout Connection closed. onlsun1[86]% !! rlogin frc7v-cl1 Last login: Thu Mar 11 16:21:52 from onlsun1.kek.jp Sun Microsystems Inc. SunOS 5.6 Generic August 1997 frc7v-cl1[33]% ls -l total 8 drwxr-xr-x 3 inoue staff 512 Feb 9 15:34 CAMAC/ drwxr-xr-x 3 inoue staff 512 Nov 6 11:07 FORCE/ drwxr-xr-x 2 inoue staff 512 Feb 18 10:29 Ktaka/ -rw------- 1 inoue staff 592 Feb 26 16:49 mbox frc7v-cl1[34]% mutex_enter() がリカーシブになっている。 cc.cファイルを修正。 frc7v-cl1[42]% vi cc.c : static int camac_b(struct cc_device *cc, u_short mode, u_short naf, int len, int *retlen) { register dev_t dev = cc->dev; register struct K_REG *k = cc->k; register struct uio *uio = cc->uio; /* E.Inoue: from cmn_err(CE_NOTE," camac_b: debug step01. --- enter camac_b()"); E.Inoue: end */ cc->klist = CC_KLIST_NO; cc->mode = mode; cc->naf = naf; cc->len = len; /* set uio for DMA */ uio->uio_iov->iov_base = (caddr_t)cc->ptr_udata; uio->uio_iov->iov_len = (mode & CC_BIT16) ? len * 2: len * 4; uio->uio_iovcnt = 1; uio->uio_segflg = UIO_USERSPACE; uio->uio_offset = 0; /* */ /* uprintf(" in: 0x%x %d %d %d %d %d\n", uio->uio_iov->iov_base, uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ /* cmn_err(CE_NOTE," in: 0x%x %d %d %d %d %d", uio->uio_iov->iov_base, uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ /* */ /* execute DMA transfer */ switch (cc->naf & 0x0018) { case 0x0000: /* CAMAC read */ /* E.Inoue: from cmn_err(CE_NOTE," camac_b: debug step02. --- call physio()"); E.Inoue: end */ physio(cc_strategy, NULL, dev, B_READ, cc_minphys, uio); /* E.Inoue: from cmn_err(CE_NOTE," camac_b: debug step07. --- return physio()"); E.Inoue: end */ break; case 0x0010: /* CAMAC write */ physio(cc_strategy, NULL, dev, B_WRITE, cc_minphys, uio); break; default: cc->status = CC_STA_BLOCK_INVFUNC; return 0; } /* E.Inoue: from */ mutex_enter(&cc->mutex); /* start MUTEX */ /* E.Inoue: from */ k->donc = CC_INT_AUTO_CLEAR | intrpri; cc->camac_qx = k->csr; cc_sys_status = cc->bp->b_error; /* E.Inoue: from cmn_err(CE_NOTE," camac_b: debug step08. --- cc_sys_status = 0x%x", cc_sys_s tatus); E.Inoue: end */ /* check timeout */ if (cc->interrupt & CC_INT_TIMEOUT ) { cc->interrupt &= ~CC_INT_TIMEOUT; cc->status = CC_STA_BLOCK_TIMEOUT; *retlen = 0; return cc->status; } /* */ /* uprintf("out: %d %d %d %d %d\n", uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ /* cmn_err(CE_NOTE,"out: %d %d %d %d %d", uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); */ /* */ /* Q-STOP mode or no error */ if ((mode & CC_QSCAN) == 0 || (k->csr & CC_ERR) == 0) { if ((mode & CC_BIT16) == 0) { cc->retlen = cc->len - k->mtc / 2; /* retlen=number of transfer */ if ((mode & CC_QSCAN) == 0 && (k->csr & CC_ERR) != 0) /* Q-STOP */ cc->retlen = cc->retlen - 2; /* delete the data of Q=0 */ cc->ptr_udata += cc->retlen * 2; /* ptr(2bytes),retlen(4bytes) */ cc->len_udata += cc->retlen * 2; } else { cc->retlen = cc->len - k->mtc; if ((mode & CC_QSCAN) == 0 && (k->csr & CC_ERR) != 0) /* Q-STOP */ cc->retlen--; /* delete the data of Q=0 */ cc->ptr_udata += cc->retlen; /* ptr(2bytes),retlen(2bytes) */ cc->len_udata += cc->retlen; } } /* E.Inoue: from cmn_err(CE_NOTE," camac_b: debug step09. --- return"); E.Inoue: end */ /* E.Inoue: from */ mutex_exit(&cc->mutex); /* end MUTEX */ /* E.Inoue: end */ /* return */ *retlen = cc->retlen; return cc->status; } "cc.c" 2797 lines, 69524 characters frc7v-cl1[42]% cc.cファイルをコンパイルする。 frc7v-cl1[43]% make ./script/cc_build.sh [Building for sun4m] rm -f cc.o frc7v-cl1[44]% cc および cc.confファイルをコピーする。 frc8vt# ls -l cc* -rwxr-xr-x 1 root sys 56500 Mar 11 16:19 cc* -rwxr-xr-x 1 root sys 288 Mar 11 16:19 cc.conf* frc8vt# rcp frc7v-cl1:/export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5/ cc . frc8vt# rcp frc7v-cl1:/export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5/ cc.conf . frc8vt# ls -l cc* -rwxr-xr-x 1 root sys 56500 Mar 11 16:35 cc* -rwxr-xr-x 1 root sys 288 Mar 11 16:35 cc.conf* frc8vt# ccドライバをロードし直す。 frc7v-cl1# make unload ./script/cc_unload.sh [Removing CAMAC device driver] [Removing CAMAC device driver from system] [Deleting CAMAC device files] frc7v-cl1# make load ./script/cc_load.sh [Installing CAMAC device driver] cp: cannot create /usr/kernel/drv/cc: Read-only file system cp: cannot create /usr/kernel/drv/cc.conf: Read-only file system [Adding CAMAC device driver to system] [Configuring CAMAC device driver] [Making CAMAC device files] frc7v-cl1# cam2プログラムを実行する。 frc7v-cl1[47]% pwd /export/home/frc7v-cl1/inoue/CAMAC/Driver/FORCE-5V-sol2.5 frc7v-cl1[48]% cam2 Input transfer mode (1:word 2:long word) >1 Input loop >5 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >1 Input data counts >5 Input n a f >3 0 0 cam2プログラムはここでフリーズした。 システムはパニックを起こしてリブートしてしまった。 pNOeIC=:9 cc_s raregy: debugps=fb0f. --- found the caeac reac NOTIC8: ec_strategy aebug stdd04-1.r--- dma_ad=r = 0f3c0 NOTICE: co6nt in122cit=10 fOT5CE: cc_ trmtegm:udebug_stfps5.r--- s=ar3 DMA2 g ste N6TICE rwc=_intr: d1b cam2: Data fault kernel read fault at addr=0xf612cf5c, pme=0x0 MMU sfsr=326: Invalid Address on supv data fetch at level 3 pte addr = 0xf602f2b0, level = 3 wrong ctx/as ctx 0, as 0xf5914790 wrong ctx/as 2 ctx 0, as 0xef pid=402, pc=0xf6068584, sp=0xfbfec938, psr=0x44010c7, context=0 g1-g7: f5900000, f026f0bc, a00, c00, 200, 1, f5e54040 06. ---Beeteg ci_intr() N tICra ccc_entr: dbbug step06aa --- cck>..t. rupt=0xs cuTp E: cc= ntr:fbebug step0fbe --c c9-3e8 leOTdCE cf_inrr: debug step0odm -- accfpt i6te0rupt:6r0turndcc_dnt0(), NOTICE : cc_fpra=egy:fdebug step07. --f returc DMA 9aTI0E, cc_st atagy: drbgs s=epf7a. --- 5ac8 c0_wa6d_0ig() ecad8 f60eaf00 f00000 6eb0g ste007b. f-- return cvbwait_sfg() Called from f00bd3ac, fp=fbfeca70, args=f00000 5 600 2a fbfecb08 f5c806d0 Called from f0068900, fp=fbfecb80, args=f593af90 f5c83d8c 22 3 22 3 Called from 11f30, fp=effff8c0, args=1 600 3f53c0 5 24a70 24a80 End traceback... panic: Data fault syncing file systems... 2 done 2770 static and sysmap kernel pages 118 dynamic kernel data pages 494 kernel-pageable pages 0 segkmap kernel pages 0 segvn kernel pages 287 current user process pages 3669 total pages (3669 chunks) dumping to vp f59444dc, offset 138624 3669 total pages, dump succeeded rebooting... Resetting ... screen not found. Can't open input device. Keyboard not present. Using tty for input and output. SPARC CPU-7V, No Keyboard ROM Rev. 2.15.1, 64 MB memory installed, Serial #9157050. Ethernet address 0:80:42:b:49:ba, Host ID: 808bb9ba. apply failed. Rebooting with command: Boot device: /iommu/sbus/espdma@5,8400000/esp@5,8800000/sd@3,0 File and args: SunOS Release 5.6 Version Generic [UNIX(R) System V Release 4.0] Copyright (c) 1983-1997, Sun Microsystems, Inc. | Type 'go' to resume Type help for more information ok ok boot net -r Resetting ... screen not found. Can't open input device. Keyboard not present. Using tty for input and output. SPARC CPU-7V, No Keyboard ROM Rev. 2.15.1, 64 MB memory installed, Serial #9157050. Ethernet address 0:80:42:b:49:ba, Host ID: 808bb9ba. apply failed. Rebooting with command: net -r Boot device: /iommu/sbus/ledma@5,8400010/le@5,8c00000 File and args: -r 2dc00 hostname: frc7v-cl1 domainname: kek.jp root server: frc8vt root directory: /export/root/frc7v-cl1 SunOS Release 5.6 Version Generic_105181-05 [UNIX(R) System V Release 4.0] Copyright (c) 1983-1997, Sun Microsystems, Inc. configuring network interfaces: le0. Hostname: frc7v-cl1 Configuring the /devices directory FRCvme V2.3.1 VME Nexus (FGA-5000 FGA-5100) NOTICE: VME: slavewin at vme=0x0, size=0x100000 space=0x2d020617 CAMAC device driver V1.3x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at VME0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 vmemem0 at VME0: vme32d16 0x0 vmemem1 at VME0: vme16d16 0x0 vmemem2 at VME0: vme24d16 0x0 vmemem3 at VME0: vme32d32 0x0 vmemem4 at VME0: vme16d32 0x0 vmemem5 at VME0: vme24d32 0x0 vmeplus0 at VME0: vme16d16 0x0 and vme24d16 0x0 and vme32d16 0x0 and vme16d32 0x 0 and vme24d32 0x0 and vme32d32 0x0 and space 0x2f offset 0x0 and space 0x6f offset 0x0 and space 0x10 offset 0x0 and space 0x11 offset 0x0 and space 0x50 offset 0x0 and space 0x51 offset 0x0 vmedma0 at VME0 vmefdma0 at VME0 vmedvma0 at VME0 vmectl0 at VME0 Configuring the /dev directory Configuring the /dev directory (compatibility devices) The system is coming up. Please wait. checking for crash dump...System went down at Thu Mar 11 16:31:17 1999 Saving 3669 pages of image in vmcore.22 3669 pages saved. Processing modules: Done. Constructing Namelist file: /var/crash/frc7v-cl1/unix.22 Namelist file complete. default ICCFP1.kek.jp done add net default: gateway ICCFP1 NIS domainname is kek.jp starting rpc services: rpcbind keyserv done. Setting netmask of le0 to 255.255.252.0 Setting default interface for multicast: add net 224.0.0.0: gateway frc7v-cl1 "/dev/swap" is not valid for swapping. It must be a block device or a regular file with the "save user text on execution" bit set. syslog service starting. syslogd: line 24: unexpected getnetconfig failure Print services started. volume management starting. Wnn6: Key License Server started.... Nihongo Multi Client Server (Wnn6 R2.30) Finished Reading Files The system is ready. frc7v-cl1 console login: システムは正常に立ち上がった。 frc7v-cl1システムのホームディレクトリをマウントする。 onlsun1[87]% !! rlogin frc7v-cl1 Password: No directory! Logging in with home=/ Last login: Thu Mar 11 16:22:42 from onlsun1.kek.jp Sun Microsystems Inc. SunOS 5.6 Generic August 1997 frc7v-cl1% su Password: # mount frc8vt:/export/home/frc8vt /export/home/frc7v-cl1 # frc7v-cl1% logout Connection closed. onlsun1[88]% !! rlogin frc7v-cl1 Last login: Thu Mar 11 16:38:37 from onlsun1.kek.jp Sun Microsystems Inc. SunOS 5.6 Generic August 1997 frc7v-cl1[33]% ls -l total 8 drwxr-xr-x 3 inoue staff 512 Feb 9 15:34 CAMAC/ drwxr-xr-x 3 inoue staff 512 Nov 6 11:07 FORCE/ drwxr-xr-x 2 inoue staff 512 Feb 18 10:29 Ktaka/ -rw------- 1 inoue staff 592 Feb 26 16:49 mbox frc7v-cl1[34]% ロジックハウスの高橋さんからコア分析の状況のメールをもらった。 クラッシュダンプを解析した結果について途中ですが 報告いたします。 注) 解析には最初に頂いた(unix.0,vmcore.0)クラッシュダンプを使用していま す。 > adb -k unix.0 vmcore.0 physmem 3e2d $c complete_panic(0x0,0x4401ce4,0x0,0x44010e4,0x0,0xf5ae8f88) + 5c do_panic(0x1,0xfc00479c,0x0,0x48010e4,0x8,0xf00) + a8 vcmn_err(0x3,0xf0269878,0xfc00479c,0x3,0xffeec000,0x0) + 180 cmn_err(0x3,0xf0269878,0xfc005,0x53,0x53,0xf025e400) + 1c die(0x9,0xfc0048ec,0xf605cf5c,0x326,0x1,0xf0269878) + bc trap(0x0,0xfc0048ec,0xf0000000,0x0,0x6,0x1) + 930  <--- 2番目の引数はト ラップレジスタのアドレスを指しています。 fault(?) + 84 physio(0x0,0xf028c49c,0xa,0x40,0xf59148d0,0xfc004ad8) camac_b(0xf5bf1c70,0x2a,0x600,0xfc004ad8,0xf6059f00,0xf00000) + 148 cc_write(0xf00000,0x5,0x600,0x2a,0xfc004b08,0xf5bf1c70) + 3f0 writev(0xf5b19fb8) + 2b0 0xfc0048ec$donc = CC_INT_AUTO_CLEAR | intrpri; camac_b+0x1f4: lduh [%l0], %l0 <--- %l0のアドレスから%l0レジスタへロー ドしています。 camac_b+0x1f8: sll %l0, 0x10, %l0 <--- 16ビット右にシフトしていま す。 camac_b+0x1fc: srl %l0, 0x10, %l0 <--- 16ビット左にシフトしていま す。 camac_b+0x200: or %l0, 0x8, %l1  <--- ここでORを取っています。 camac_b+0x204: add %i4, 0x42, %l0 <--- アドレスを算出しているが%i4の 値が分からないため特定できない。 恐らく k->donc のアドレスでは? camac_b+0x208: sth %l1, [%l0] <--- ハーフワード(バイト)で%l1へスト アしています。 ここから cc->camac_qx = k->csr; camac_b+0x20c: add %i4, 0x6e, %l0 <--- アドレスを算出しているが%i4の 値が分からないため特定できない。 恐らく cc->camac_qx  のアドレスでは? camac_b+0x210: lduh [%l0], %l1 ---> %l0のアドレスから%l1レジスタへロー ドしています。 camac_b+0x214: ld [%fp + 0x44], %l0 <--- アドレスを受け取っているが %fpの値が分からないため特定できない。 camac_b+0x218: add %l0, 0x3c, %l0 <--- アドレスを算出しているが%l0の 値が分からないため特定できない。 恐らく k->csr のアドレスでは? camac_b+0x21c: sth %l1, [%l0] <--- ハーフワード(バイト)で%l1へスト アしています。 ここから cc_sys_status = cc->bp->b_error; camac_b+0x220: ld [%fp + 0x44], %l0 <--- アドレスを受け取っているが %fpの値が分からないため特定できない。 camac_b+0x224: add %l0, 0x98, %l0 <--- アドレスを算出しているが%fpの 値が分からないため特定できない。 恐らく cc_sys_status のアドレスでは? camac_b+0x228: ld [%l0], %l0 <--- %l0のアドレスから%l0レジスタへロー ドしています。 camac_b+0x22c: add %l0, 0x54, %l0 <--- アドレスを算出しているが特定で きない。 恐らく cc->bp->b_error のアドレスでは? camac_b+0x230: ld [%l0], %l1  <--- エラーが発生した命令 ちなみに、 %l0のアドレスから%l0レジスタへロードしています。 この内容を調べますと、camac_b()ルーチンの次の行に含まれているようです。 strategy(){ ... ... ... k->donc = CC_INT_AUTO_CLEAR | intrpri; cc->camac_qx = k->csr; cc_sys_status = cc->bp->b_error; <--- この行の実行時? ... ... ... } アセンブラ表記のため正確な情報か不安がありますが、 取りあえず御連絡致します。 ----メールはここまで camac_b()ルーチンで起きているエラーの原因はまだつかみきれていない。 追求を継続する。 --- (6). セクション (6-1). サブセクション (6-1-1). サブサブセクション