Date: Fri, 24 Mar 2000 17:00:54 +0900 (JST) From: "Daniel C. Sobral" <dcs@newsguy.com> To: hackers@freebsd.org Cc: sos@freebsd.org Subject: ATA problems with changer code Message-ID: <200003240801.RAA00373@daniel.sobral>
next in thread | raw e-mail | index | archive | help
With the latest ata, I get instant panic whenever I call /stand/sysinstall. It seems acdopen() is trying to read the contents of cdp->changer_info, but that pointer is NULL. (kgdb) bt #0 boot (howto=260) at /home/src/sys/kern/kern_shutdown.c:304 #1 0xc0151fc9 in panic (fmt=0xc0214e94 "from debugger") at /home/src/sys/kern/kern_shutdown.c:554 #2 0xc0128ddd in db_panic (addr=-1071797232, have_addr=0, count=-1, modif=0xc6914bd8 "") at /home/src/sys/ddb/db_command.c:433 #3 0xc0128d7c in db_command (last_cmdp=0xc024225c, cmd_table=0xc02420bc, aux_cmd_tablep=0xc0276850) at /home/src/sys/ddb/db_command.c:333 #4 0xc0128e42 in db_command_loop () at /home/src/sys/ddb/db_command.c:455 #5 0xc012af9b in db_trap (type=12, code=0) at /home/src/sys/ddb/db_trap.c:71 #6 0xc01ef5eb in kdb_trap (type=12, code=0, regs=0xc6914d3c) at /home/src/sys/i386/i386/db_interface.c:158 #7 0xc01fc41c in trap_fatal (frame=0xc6914d3c, eva=0) at /home/src/sys/i386/i386/trap.c:919 #8 0xc01fc105 in trap_pfault (frame=0xc6914d3c, usermode=0, eva=0) at /home/src/sys/i386/i386/trap.c:817 #9 0xc01fbcd3 in trap (frame={tf_fs = 16, tf_es = 16, tf_ds = 16, tf_edi = 1, tf_esi = -1063859328, tf_ebp = -963555960, tf_isp = -963555992, tf_ebx = -1063852032, tf_edx = 1, tf_ecx = 64, tf_eax = 0, tf_trapno = 12, tf_err = 0, tf_eip = -1071797232, tf_cs = 8, tf_eflags = 66118, tf_esp = -956099232, tf_ss = -948398080}) at /home/src/sys/i386/i386/trap.c:423 #10 0xc01dac10 in acdopen (dev=0xc096cb80, flags=1, fmt=8192, p=0xc7031560) at /home/src/sys/dev/ata/atapi-cd.c:497 #11 0xc018b2ce in spec_open (ap=0xc6914e04) at /home/src/sys/miscfs/specfs/spec_vnops.c:191 #12 0xc018b1d5 in spec_vnoperate (ap=0xc6914e04) at /home/src/sys/miscfs/specfs/spec_vnops.c:117 #13 0xc01c4ee9 in ufs_vnoperatespec (ap=0xc6914e04) at /home/src/sys/ufs/ufs/ufs_vnops.c:2301 #14 0xc0185da0 in vn_open (ndp=0xc6914ed0, fmode=1, cmode=228) at vnode_if.h:189 #15 0xc0181d3d in open (p=0xc7031560, uap=0xc6914f80) at /home/src/sys/kern/vfs_syscalls.c:994 #16 0xc01fc666 in syscall (frame={tf_fs = 47, tf_es = 47, tf_ds = 47, tf_edi = -1077940188, tf_esi = 0, tf_ebp = -1077943580, tf_isp = -963555372, tf_ebx = -1077938884, tf_edx = 135059519, tf_ecx = 0, tf_eax = 5, tf_trapno = 7, tf_err = 2, tf_eip = 134872180, tf_cs = 31, tf_eflags = 659, tf_esp = -1077943720, tf_ss = 47}) at /home/src/sys/i386/i386/trap.c:1073 #17 0xc01efee6 in Xint0x80_syscall () #18 0x804aea8 in ?? () #19 0x805705f in ?? () #20 0x80480f5 in ?? () (kgdb) up 10 #10 0xc01dac10 in acdopen (dev=0xc096cb80, flags=1, fmt=8192, p=0xc7031560) at /home/src/sys/dev/ata/atapi-cd.c:497 497 if (cdp->slot != cdp->changer_info->current_slot) { (kgdb) list acdopen 484 static int 485 acdopen(dev_t dev, int32_t flags, int32_t fmt, struct proc *p) 486 { 487 struct acd_softc *cdp = dev->si_drv1; 488 489 if (!cdp) 490 return ENXIO; 491 492 if (flags & FWRITE) { 493 if (count_dev(dev) > 1) 494 return EBUSY; 495 } 496 if (count_dev(dev) == 1) { 497 if (cdp->slot != cdp->changer_info->current_slot) { 498 acd_select_slot(cdp); 499 tsleep(&cdp->changer_info, PRIBIO, "acdopn", 0); 500 } (kgdb) p dev->si_drv1 $4 = (void *) 0xc096e800 (kgdb) p cdp $5 = (struct acd_softc *) 0x0 (???? -- this doesn't seem to be the problem, though) (kgdb) print *(struct acd_softc*)dev->si_drv1 $6 = {atp = 0xc067c1e0, lun = 0, flags = 0, buf_queue = {queue = { tqh_first = 0x0, tqh_last = 0xc096e80c}, last_pblkno = 0, insert_point = 0x0, switch_point = 0x0}, toc = {hdr = {len = 0, starting_track = 0 '\000', ending_track = 0 '\000'}, tab = {{0, control = 0, addr_type = 0, track = 0 '\000', 0, addr = {msf = { unused = 0 '\000', minute = 0 '\000', second = 0 '\000', frame = 0 '\000'}, lba = 0, addr = "\000\000\000"}} <repeats 100 times>}}, info = {volsize = 0, blksize = 0}, au = {data_length = 0, medium_type = 0 '\000', dev_spec = 0 '\000', unused = "\000", blk_desc_len = 0, page_code = 0 '\000', param_len = 0 '\000', flags = 0 '\000', reserved3 = 0 '\000', reserved4 = 0 '\000', reserved5 = 0 '\000', lb_per_sec = 0, port = {{channels = 0 '\000', volume = 0 '\000'}, { channels = 0 '\000', volume = 0 '\000'}, {channels = 0 '\000', volume = 0 '\000'}, {channels = 0 '\000', volume = 0 '\000'}}}, cap = { data_length = 6656, medium_type = 3 '\003', dev_spec = 0 '\000', unused = "\000", blk_desc_len = 0, page_code = 42 '*', param_len = 18 '\022', read_cdr = 1 '\001', read_cdrw = 1 '\001', read_packet = 0 '\000', read_dvdrom = 0 '\000', read_dvdr = 0 '\000', read_dvdram = 0 '\000', reserved2_67 = 0 '\000', write_cdr = 0 '\000', write_cdrw = 0 '\000', test_write = 0 '\000', reserved3_3 = 0 '\000', write_dvdr = 0 '\000', write_dvdram = 0 '\000', reserved3_67 = 0 '\000', audio_play = 1 '\001', composite = 0 '\000', dport1 = 0 '\000', dport2 = 0 '\000', mode2_form1 = 1 '\001', mode2_form2 = 1 '\001', multisession = 1 '\001', 0 '\000', cd_da = 1 '\001', cd_da_stream = 1 '\001', rw = 1 '\001', rw_corr = 0 '\000', c2 = 1 '\001', isrc = 1 '\001', upc = 1 '\001', 0 '\000', lock = 1 '\001', locked = 0 '\000', prevent = 0 '\000', eject = 1 '\001', 0 '\000', mech = 1 '\001', sep_vol = 1 '\001', sep_mute = 1 '\001', 0 '\000', max_read_speed = 3528, max_vol_levels = 255, buf_size = 128, cur_read_speed = 3528, reserved3 = 0 '\000', bckf = 0 '\000', rch = 0 '\000', lsbf = 0 '\000', dlen = 0 '\000', 0 '\000', max_write_speed = 0, cur_write_speed = 0}, aumask = {data_length = 0, medium_type = 0 '\000', dev_spec = 0 '\000', unused = "\000", blk_desc_len = 0, page_code = 0 '\000', param_len = 0 '\000', flags = 0 '\000', reserved3 = 0 '\000', reserved4 = 0 '\000', reserved5 = 0 '\000', lb_per_sec = 0, port = {{channels = 0 '\000', volume = 0 '\000'}, {channels = 0 '\000', volume = 0 '\000'}, { channels = 0 '\000', volume = 0 '\000'}, {channels = 0 '\000', volume = 0 '\000'}}}, subchan = {void0 = 0 '\000', audio_status = 0 '\000', data_length = 0, data_format = 0 '\000', control = 0 '\000', track = 0 '\000', indx = 0 '\000', abslba = 0, rellba = 0}, changer_info = 0x0, driver = 0x0, slot = -1, timestamp = 0, block_size = 2048, disklabel = {d_magic = 0, d_type = 0, d_subtype = 0, d_typename = '\000' <repeats 15 times>, d_un = { un_d_packname = '\000' <repeats 15 times>, un_b = {un_d_boot0 = 0x0, un_d_boot1 = 0x0}}, d_secsize = 0, d_nsectors = 0, d_ntracks = 0, d_ncylinders = 0, d_secpercyl = 0, d_secperunit = 0, d_sparespertrack = 0, d_sparespercyl = 0, d_acylinders = 0, d_rpm = 0, d_interleave = 0, d_trackskew = 0, d_cylskew = 0, d_headswitch = 0, d_trkseek = 0, d_flags = 0, d_drivedata = {0, 0, 0, 0, 0}, d_spare = {0, 0, 0, 0, 0}, d_magic2 = 0, d_checksum = 0, d_npartitions = 0, d_bbsize = 0, d_sbsize = 0, d_partitions = {{p_size = 0, p_offset = 0, p_fsize = 0, p_fstype = 0 '\000', p_frag = 0 '\000', __partition_u1 = {cpg = 0, sgs = 0}}, {p_size = 0, p_offset = 0, p_fsize = 0, p_fstype = 0 '\000', p_frag = 0 '\000', __partition_u1 = {cpg = 0, sgs = 0}}, {p_size = 0, p_offset = 0, p_fsize = 0, p_fstype = 0 '\000', p_frag = 0 '\000', __partition_u1 = {cpg = 0, sgs = 0}}, {p_size = 0, p_offset = 0, p_fsize = 0, p_fstype = 0 '\000', p_frag = 0 '\000', __partition_u1 = {cpg = 0, sgs = 0}}, {p_size = 0, p_offset = 0, p_fsize = 0, p_fstype = 0 '\000', p_frag = 0 '\000', __partition_u1 = {cpg = 0, sgs = 0}}, {p_size = 0, p_offset = 0, p_fsize = 0, p_fstype = 0 '\000', p_frag = 0 '\000', __partition_u1 = {cpg = 0, sgs = 0}}, {p_size = 0, p_offset = 0, p_fsize = 0, p_fstype = 0 '\000', p_frag = 0 '\000', __partition_u1 = {cpg = 0, sgs = 0}}, {p_size = 0, p_offset = 0, p_fsize = 0, p_fstype = 0 '\000', p_frag = 0 '\000', __partition_u1 = {cpg = 0, sgs = 0}}}}, stats = 0xc095ab00, dev1 = 0xc096cc00, dev2 = 0xc096cb80} (kgdb) disassemble acdopen Dump of assembler code for function acdopen: 0xc01dabbc <acdopen>: pushl %ebp 0xc01dabbd <acdopen+1>: movl %esp,%ebp 0xc01dabbf <acdopen+3>: pushl %edi 0xc01dabc0 <acdopen+4>: pushl %esi 0xc01dabc1 <acdopen+5>: pushl %ebx 0xc01dabc2 <acdopen+6>: movl 0x8(%ebp),%esi 0xc01dabc5 <acdopen+9>: movl 0xc(%ebp),%edi 0xc01dabc8 <acdopen+12>: movl 0x24(%esi),%ebx 0xc01dabcb <acdopen+15>: testl %ebx,%ebx 0xc01dabcd <acdopen+17>: jne 0xc01dabdc <acdopen+32> 0xc01dabcf <acdopen+19>: movl $0x6,%eax 0xc01dabd4 <acdopen+24>: jmp 0xc01dac6e <acdopen+178> 0xc01dabd9 <acdopen+29>: leal 0x0(%esi),%esi 0xc01dabdc <acdopen+32>: testl $0x2,%edi 0xc01dabe2 <acdopen+38>: je 0xc01dabfc <acdopen+64> 0xc01dabe4 <acdopen+40>: pushl %esi 0xc01dabe5 <acdopen+41>: call 0xc017fc00 <count_dev> 0xc01dabea <acdopen+46>: addl $0x4,%esp 0xc01dabed <acdopen+49>: cmpl $0x1,%eax 0xc01dabf0 <acdopen+52>: jle 0xc01dabfc <acdopen+64> 0xc01dabf2 <acdopen+54>: movl $0x10,%eax 0xc01dabf7 <acdopen+59>: jmp 0xc01dac6e <acdopen+178> 0xc01dabf9 <acdopen+61>: leal 0x0(%esi),%esi 0xc01dabfc <acdopen+64>: pushl %esi 0xc01dabfd <acdopen+65>: call 0xc017fc00 <count_dev> 0xc01dac02 <acdopen+70>: addl $0x4,%esp 0xc01dac05 <acdopen+73>: cmpl $0x1,%eax 0xc01dac08 <acdopen+76>: jne 0xc01dac66 <acdopen+170> 0xc01dac0a <acdopen+78>: movl 0x3ac(%ebx),%eax 0xc01dac10 <acdopen+84>: movb (%eax),%al 0xc01dac12 <acdopen+86>: andb $0x1f,%al 0xc01dac14 <acdopen+88>: movzbl %al,%eax 0xc01dac17 <acdopen+91>: cmpl %eax,0x3b4(%ebx) 0xc01dac1d <acdopen+97>: je 0xc01dac3d <acdopen+129> 0xc01dac1f <acdopen+99>: pushl %ebx 0xc01dac20 <acdopen+100>: call 0xc01dc500 <acd_select_slot> 0xc01dac25 <acdopen+105>: pushl $0x0 0xc01dac27 <acdopen+107>: pushl $0xc022fee8 0xc01dac2c <acdopen+112>: pushl $0x10 0xc01dac2e <acdopen+114>: leal 0x3ac(%ebx),%eax 0xc01dac34 <acdopen+120>: pushl %eax 0xc01dac35 <acdopen+121>: call 0xc0154888 <tsleep> 0xc01dac3a <acdopen+126>: addl $0x14,%esp 0xc01dac3d <acdopen+129>: pushl $0x1 0xc01dac3f <acdopen+131>: pushl %ebx 0xc01dac40 <acdopen+132>: call 0xc01dcdf4 <acd_prevent_allow> 0xc01dac45 <acdopen+137>: orb $0x1,0x8(%ebx) 0xc01dac49 <acdopen+141>: addl $0x8,%esp 0xc01dac4c <acdopen+144>: testl $0x6,%edi 0xc01dac52 <acdopen+150>: jne 0xc01dac5c <acdopen+160> 0xc01dac54 <acdopen+152>: pushl %ebx 0xc01dac55 <acdopen+153>: call 0xc01dc108 <acd_read_toc> 0xc01dac5a <acdopen+158>: jmp 0xc01dac63 <acdopen+167> 0xc01dac5c <acdopen+160>: pushl (%ebx) 0xc01dac5e <acdopen+162>: call 0xc01d983c <atapi_test_ready> 0xc01dac63 <acdopen+167>: addl $0x4,%esp 0xc01dac66 <acdopen+170>: pushl %ebx 0xc01dac67 <acdopen+171>: call 0xc01dc254 <acd_construct_label> 0xc01dac6c <acdopen+176>: xorl %eax,%eax 0xc01dac6e <acdopen+178>: leal 0xfffffff4(%ebp),%esp 0xc01dac71 <acdopen+181>: popl %ebx 0xc01dac72 <acdopen+182>: popl %esi 0xc01dac73 <acdopen+183>: popl %edi 0xc01dac74 <acdopen+184>: leave 0xc01dac75 <acdopen+185>: ret End of assembler dump. -- Daniel C. Sobral (8-DCS) dcs@newsguy.com dcs@freebsd.org capo@there.is.no.bsdconspiracy.net [He] took me into his library and showed me his books, of which he had a complete set. -- Ring Lardner To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200003240801.RAA00373>