Douglas Atique wrote:
>Whereas in snv_28 it usually panicked/froze on removal, in S10 1/06 it panics
>on insertion. Here is the stack and registers (more info on attached messages
>file):
>
>[b]Dec 25 11:13:24 deepblue genunix: [ID 335743 kern.notice] BAD TRAP: type=e
>(#pf Page fault) rp=d1f97cec addr=18 occurred in module "scsa1394" due to a
>NULL pointer dereference
>Dec 25 11:13:24 deepblue unix: [ID 100000 kern.notice]
>Dec 25 11:13:24 deepblue unix: [ID 839527 kern.notice] sched:
>Dec 25 11:13:24 deepblue unix: [ID 753105 kern.notice] #pf Page fault
>Dec 25 11:13:24 deepblue unix: [ID 532287 kern.notice] Bad kernel fault at
>addr=0x18
>Dec 25 11:13:24 deepblue unix: [ID 243837 kern.notice] pid=0, pc=0xf7c5dcbf,
>sp=0xde1fdb18, eflags=0x10246
>Dec 25 11:13:24 deepblue unix: [ID 211416 kern.notice] cr0:
>8005003b<pg,wp,ne,et,ts,mp,pe> cr4: 6d8<xmme,fxsr,pge,mce,pse,de>
>Dec 25 11:13:24 deepblue unix: [ID 936844 kern.notice] cr2: 18 cr3: 6527000
>Dec 25 11:13:24 deepblue unix: [ID 537610 kern.notice] gs: d10c01b0
>fs: d10c0000 es: 160 ds: 160
>Dec 25 11:13:24 deepblue unix: [ID 537610 kern.notice] edi: de1fd9ac
>esi: 0 ebp: d1f97d48 esp: d1f97d1c
>Dec 25 11:13:24 deepblue unix: [ID 537610 kern.notice] ebx: 2a
>edx: de1fda38 ecx: 200 eax: 0
>Dec 25 11:13:24 deepblue unix: [ID 537610 kern.notice] trp: e
>err: 0 eip: f7c5dcbf cs: 158
>Dec 25 11:13:24 deepblue unix: [ID 717149 kern.notice] efl: 10246
>usp: de1fdb18 ss: de1fd9ac
>Dec 25 11:13:24 deepblue unix: [ID 100000 kern.notice]
>Dec 25 11:13:24 deepblue genunix: [ID 353471 kern.notice] d1f97c4c unix:die+a7
>(e, d1f97cec, 18, 0)
>Dec 25 11:13:24 deepblue genunix: [ID 353471 kern.notice] d1f97cd8
>unix:trap+fc8 (d1f97cec, 18, 0)
>Dec 25 11:13:24 deepblue genunix: [ID 353471 kern.notice] d1f97cec
>unix:cmntrap+83 ()
>Dec 25 11:13:24 deepblue genunix: [ID 353471 kern.notice] d1f97d48
>scsa1394:scsa1394_cmd_fill_cdb_rbc+171 (d10d8b40, de1fd9ac)
>Dec 25 11:13:24 deepblue genunix: [ID 353471 kern.notice] d1f97d60
>scsa1394:scsa1394_cmd_fill_cdb+43 (d10d8b40, de1fd9ac)
>Dec 25 11:13:24 deepblue genunix: [ID 353471 kern.notice] d1f97d84
>scsa1394:scsa1394_scsi_start+ce (de1fdb18, de1fdb14)
>Dec 25 11:13:24 deepblue genunix: [ID 353471 kern.notice] d1f97da4
>scsi:scsi_transport+29 (de1fdb14)
>Dec 25 11:13:24 deepblue genunix: [ID 353471 kern.notice] d1f97dc8
>scsi:scsi_watch_thread+208 (0, 0)[/b]
>
>
>
bash-3.00# uname -a
SunOS opglab-21-199 5.10 Generic_118844-26 i86pc i386 i86pc
bash-3.00# mdb -k
Loading modules: [ unix krtld genunix specfs dtrace ufs ip sctp usba
uhci s1394 random fctl nca lofs nfs audiosup sppp crypto ptm ipc logindmux ]
> scsa1394_cmd_fill_cdb_rbc+171::dis
scsa1394_cmd_fill_cdb_rbc+0x16e:movl -0xc(%ebp),%eax
scsa1394_cmd_fill_cdb_rbc+0x171:movl 0x18(%eax),%eax
We panic at scsa1394_cmd_fill_cdb_rbc+0x171:movl 0x18(%eax),%eax.
%eax is NULL and we're trying to access its offset 0x18. This
corresponds to On10U1 source
usr/src/uts/common/io/1394/targets/scsa1394/hba.c:line 1916 (in
scsa1394_cmd_fill_cdb_rbc())
sz = SCSA1394_CDRW_BLKSZ(bp->b_bcount, len);
To further prove this, we may check if b_bcount is at offset 0x18 of bp:
> ::offsetof struct buf b_bcount
offsetof (struct buf, b_bcount) = 0x18
After comparing the S10U1 source and the ONNV source, I found this is
bug6260568. It
has been fixed on Aug. 2, 2005:
bash-2.05b$ sccs prs scsa1394/hba.c
...
D 1.6 05/08/02 09:01:21 artem 7 6 00058/00026/02472
MRs:
COMMENTS:
6239895 scsa1394: panic seen when doing a cp -r to a mounted hard drive
6260568 scsa1394 panics kernel when attempting to access firewire disk
6271950 scsa1394 support for vold hotplug
6273456 panic seen when restarting vold on an SB2500 with a firewire disk
...
------- hba.c -------
*** 1946,1954 ****
case SCMD_WRITE_LONG:
lba = SCSA1394_LBA_10BYTE(pkt);
len = SCSA1394_LEN_10BYTE(pkt);
! sz = SCSA1394_CDRW_BLKSZ(bp->b_bcount, len); <= *Panic*
! if (SCSA1394_VALID_CDRW_BLKSZ(sz)) {
! blk_size = sz;
}
break;
case SCMD_READ_CD:
--- 1954,1965 ----
case SCMD_WRITE_LONG:
lba = SCSA1394_LBA_10BYTE(pkt);
len = SCSA1394_LEN_10BYTE(pkt);
! if ((lp->l_dtype_orig == DTYPE_RODIRECT) &&
! (bp != NULL) && (len != 0)) { <===*No panic any more*
! sz = SCSA1394_CDRW_BLKSZ(bp->b_bcount, len);
! if (SCSA1394_VALID_CDRW_BLKSZ(sz)) {
! blk_size = sz;
! }
}
break;
case SCMD_READ_CD:
So this is not a problem anymore.
I remember you have another panic on card removal.
What does it look like?
Regards,
Vincent.