kern/125673: FreeBSD7 panics when kldunloading firewire

Stefan Krüger stadtkind2 at gmx.net
Wed Jul 16 10:40:01 UTC 2008


>Number:         125673
>Category:       kern
>Synopsis:       FreeBSD7 panics when kldunloading firewire
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Jul 16 10:40:00 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     Stefan Krüger
>Release:        7.0-STABLE
>Organization:
>Environment:
FreeBSD localhost 7.0-STABLE FreeBSD 7.0-STABLE #37: Sun Jul  6 12:08:12 CEST 2008     root at localhost:/usr/obj/usr/src/sys/ULE_KERNCONF  i386
>Description:
I just did a
# kldunload firewire
as root and was "awarded" with a nice kernel panic:

# cat info.4
Dump header from device /dev/da0s1b
  Architecture: i386
  Architecture Version: 2
  Dump Length: 149069824B (142 MB)
  Blocksize: 512
  Dumptime: Wed Jul 16 11:11:48 2008
  Hostname: localhost
  Magic: FreeBSD Kernel Dump
  Version String: FreeBSD 7.0-STABLE #37: Sun Jul  6 12:08:12 CEST 2008
    root at localhost:/usr/obj/usr/src/sys/ULE_KERNCONF
  Panic String: page fault
  Dump Parity: 392815939
  Bounds: 4
  Dump Status: good

# kgdb /boot/kernel/kernel /var/crash/vmcore.4
Unread portion of the kernel message buffer:
firewire0: detached


Fatal trap 12: page fault while in kernel mode
cpuid = 1; apic id = 01
fault virtual address   = 0x188
fault code              = supervisor read, page not present
instruction pointer     = 0x20:0xc052dc42
stack pointer           = 0x28:0xe6447ad0
frame pointer           = 0x28:0xe6447ae8
code segment            = base 0x0, limit 0xfffff, type 0x1b
                        = DPL 0, pres 1, def32 1, gran 1
processor eflags        = interrupt enabled, resume, IOPL = 0
current process         = 2159 (kldunload)
trap number             = 12
panic: page fault
cpuid = 1
Uptime: 1h29m35s
Physical memory: 1015 MB
Dumping 142 MB: 127 111 95 79 63 47 31 15

[Reading symbols output omitted]
(kgdb) where
#0  doadump () at pcpu.h:195
#1  0xc053ade6 in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:418
#2  0xc053b0be in panic (fmt=Variable "fmt" is not available.
) at /usr/src/sys/kern/kern_shutdown.c:572
#3  0xc07659bc in trap_fatal (frame=0xe6447a90, eva=392)
    at /usr/src/sys/i386/i386/trap.c:899
#4  0xc0765c2b in trap_pfault (frame=0xe6447a90, usermode=0, eva=392)
    at /usr/src/sys/i386/i386/trap.c:812
#5  0xc0766622 in trap (frame=0xe6447a90) at /usr/src/sys/i386/i386/trap.c:490
#6  0xc074cfdb in calltrap () at /usr/src/sys/i386/i386/exception.s:139
#7  0xc052dc42 in _mtx_lock_sleep (m=0xc3c06388, tid=3295632032, opts=0,
    file=0xc0917a07 "/usr/src/sys/modules/firewire/firewire/../../../dev/firewire/firewire.c", line=576) at /usr/src/sys/kern/kern_mutex.c:339
#8  0xc052e0e2 in _mtx_lock_flags (m=0xc3c06388, opts=0,
    file=0xc0917a07 "/usr/src/sys/modules/firewire/firewire/../../../dev/firewire/firewire.c", line=576) at /usr/src/sys/kern/kern_mutex.c:186
#9  0xc090c62a in fw_drain_txq (fc=0xc3c06000)
    at /usr/src/sys/modules/firewire/firewire/../../../dev/firewire/firewire.c:576
#10 0xc090f330 in fwohci_stop (sc=0xc3c06000, dev=0xc3bdd980)
    at /usr/src/sys/modules/firewire/firewire/../../../dev/firewire/fwohci.c:1760
#11 0xc09137bb in fwohci_pci_detach (self=0xc3bdd980)
    at /usr/src/sys/modules/firewire/firewire/../../../dev/firewire/fwohci_pci.c:414
#12 0xc0560878 in device_detach (dev=0xc3bdd980) at device_if.h:212
#13 0xc0560bb1 in devclass_delete_driver (busclass=0xc3afd880,
    driver=0xc091aac0) at /usr/src/sys/kern/subr_bus.c:947
#14 0xc0560d15 in driver_module_handler (mod=0xc3ac28c0, what=1,
    arg=0xc091aaac) at /usr/src/sys/kern/subr_bus.c:3863
#15 0xc052cc57 in module_unload (mod=0xc3ac28c0, flags=0)
    at /usr/src/sys/kern/kern_module.c:244
#16 0xc05249df in linker_file_unload (file=0xc3ae0400, flags=0)
    at /usr/src/sys/kern/kern_linker.c:589
#17 0xc0525443 in kern_kldunload (td=0xc46f5aa0, fileid=5, flags=0)
    at /usr/src/sys/kern/kern_linker.c:1011
#18 0xc05254cb in kldunloadf (td=0xc46f5aa0, uap=0xe6447cfc)
    at /usr/src/sys/kern/kern_linker.c:1040
#19 0xc0765fb5 in syscall (frame=0xe6447d38)
    at /usr/src/sys/i386/i386/trap.c:1035
#20 0xc074d040 in Xint0x80_syscall () at /usr/src/sys/i386/i386/exception.s:196
#21 0x00000033 in ?? ()
Previous frame inner to this frame (corrupt stack?)


(kgdb) list *0xc052dc42 # this is the instruction pointer
0xc052dc42 is in _mtx_lock_sleep (/usr/src/sys/kern/kern_mutex.c:341).
336                      */
337                     v = m->mtx_lock;
338                     if (v != MTX_UNOWNED) {
339                             owner = (struct thread *)(v & ~MTX_FLAGMASK);
340     #ifdef ADAPTIVE_GIANT
341                             if (TD_IS_RUNNING(owner)) {
342     #else
343                             if (m != &Giant && TD_IS_RUNNING(owner)) {
344     #endif
345                                     if (LOCK_LOG_TEST(&m->lock_object, 0))

(kgdb) f 7
#7  0xc052dc42 in _mtx_lock_sleep (m=0xc3c06388, tid=3295632032, opts=0,
    file=0xc0917a07 "/usr/src/sys/modules/firewire/firewire/../../../dev/firewire/firewire.c", line=576) at /usr/src/sys/kern/kern_mutex.c:339
339                             owner = (struct thread *)(v & ~MTX_FLAGMASK);
(kgdb) print owner
$8 = (volatile struct thread *) 0x0

So owner is NULL, but
  a) I have no idea if this is the root of the panic
  b) I have no idea how to fix this

Any help is much appreciated, kernel + vmcore are available on request
>How-To-Repeat:
# kldunload firewire
>Fix:


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list