Reproducible FreeBSD 6.0-BETA2 panic - probably ATA-ng related
Gavin Atkinson
gavin.atkinson at ury.york.ac.uk
Tue Aug 23 12:35:59 GMT 2005
On Sun, 21 Aug 2005, Fabian Keil wrote:
> I own a Plextor PlexWriter Premium, the drive has a buggy firmware
> which crashes if you try to burn multi session in SAO mode.
> On FreeBSD 6.0-BETA2 a panic is caused:
[snip the CD ROM drive detaching...]
> Fatal trap 12: page fault while in kernel mode
> cpuid = 0; apic id = 00
> fault virtual address = 0x3b0
> fault code = supervisor read, page not present
> instruction pointer = 0x20:0xc046f132
> stack pointer = 0x28:0xd44b0cc8
> frame pointer = 0x28:0xd44b0cd8
> 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 = 2 (g_event)
> panic: from debugger
> cpuid = 0
>
> (kgdb) where
[...]
> #11 0xc063992a in calltrap () at /usr/src/sys/i386/i386/exception.s:139
> ...
> #25 0xc046f132 in acd_geom_detach (arg=0xc1b89100, flag=0) at /usr/src/sys/dev/ata/atapi-cd.c:199
> #26 0xc04bf9ef in one_event () at /usr/src/sys/geom/geom_event.c:198
> #27 0xc04bfa79 in g_run_events () at /usr/src/sys/geom/geom_event.c:218
> #28 0xc04c10dd in g_event_procbody () at /usr/src/sys/geom/geom_kern.c:141
> #29 0xc04e1098 in fork_exit (callout=0xc04c1070 <g_event_procbody>, arg=0x0, frame=0xd44b0d38)
> at /usr/src/sys/kern/kern_fork.c:789
> #30 0xc063998c in fork_trampoline () at /usr/src/sys/i386/i386/exception.s:208
>
> vmcore, dmesg output and kernel.debug can be downloaded at:
> <http://www.fabiankeil.de/tmp/kernel.debug+vmcore+dmesg.tar> (20MB)
It's a known issue. I see exactly this same panic 80% of the time on my
laptop on resume from ACPI suspend. I believe it was introduced during
the newbus-ification of ATA-mk3. On the call to acd_geom_detach,
acd_softc is already null.
(kgdb) f 23
#23 0xc04dd936 in acd_geom_detach (arg=0xc16dd680, flag=0)
at /usr/src/sys/dev/ata/atapi-cd.c:199
199 g_wither_geom(cdp->gp, ENXIO);
(kgdb) list
194 acd_geom_detach(void *arg, int flag)
195 {
196 struct acd_softc *cdp = device_get_ivars(arg);
197
198 /* signal geom so we dont get any further requests */
199 g_wither_geom(cdp->gp, ENXIO);
200
201 /* fail requests on the queue and any thats "in flight" for this device */
202 ata_fail_requests(arg);
203
(kgdb) p cdp
$5 = (struct acd_softc *) 0x0
Gavin
More information about the freebsd-current
mailing list