Date: Fri, 2 Nov 2001 08:31:28 -0600 (CST) From: mark tinguely <tinguely@web.cs.ndsu.nodak.edu> To: freebsd-current@FreeBSD.ORG, haro@h4.dion.ne.jp Cc: imp@FreeBSD.ORG Subject: Re: Panic with PCCARD Message-ID: <200111021431.fA2EVSA65309@web.cs.ndsu.nodak.edu> In-Reply-To: <20011102010512I.haro@h4.dion.ne.jp>
next in thread | previous in thread | raw e-mail | index | archive | help
> I'm having panic for the last few days, if I have PCCARD inserted.
> If no card is inside, system boots up fine.
>
> Here's the panic message, I've written down.
>
> Fatal trap 12: page fault while in kernel mode
> fault virtual address = 0x3c
> fault code = supervisor write, page not present
> instruction pointer = 0x8:0xc01ecea5
> stack pointer = 0x10:0xc8ca3b00
> frame pointer = 0x10:0xc8ca3b00
> 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 = 201 (pccardd)
> kernel: type 12 trap, code=0
> Stopped at device_set_flags+0x9: movl %eax,0x3c (%edx)
> db> Context switches not allowed in debugger
> db> t
> device_set_flags(0,0,c139a080,c1411e00,0) at device_set_flags+0x9
> allocate_driver(c139c600,c1497400,c8ca8ba4,c13a9800,c87a0804) at allocate_driver+0xd9
> crdioctl(c13a9800,c0ac5006,c1497400,3,c87a0804) at crdioctl+0x337
> spec_ioctl(c8ca8b4,c8ca8c34,c02222cf,c8ca8ba4,c1496d80) at spec_ioctl+0x26
> spec_vnoperate(c8ca8ba4,c1496d80,ac,c1497400,c03521a0) at spec_vnoperate+0x15
> vn_ioctl(c1496d80,c0ac5006,c1497400,c87a0804,c87a090c) at vn_ioctl+0x10f
> ioctl(c87a0804,c8ca8d20,8073140,8073100,0) at ioctl+0x20c
> syscall(2f,2f,2f,0,8073100) at syscall+0x24c
> syscall_with_err_pushed() at syscall_with_err_pushed+0x1b
> --- syscall(54, FreeBSD ELF, ioctl), eip = 0x8054cd0, esp = 0xbfbff93c, ebp = 0xbfbffa48 ---
the panic appears to be a side affect that allocate_driver() in
sys/pccard/pccard.c does not check the success/failure of device_add_child().
The patch that would fix that is:
--- pccard.c.orig Fri Sep 14 03:43:15 2001
+++ pccard.c Fri Nov 2 08:21:48 2001
@@ -236,6 +236,8 @@
bcopy(desc->misc, devi->misc, sizeof(desc->misc));
resource_list_init(&devi->resources);
child = device_add_child(pccarddev, devi->name, desc->unit);
+ if (child == NULL)
+ return (EIO); /* XXX */
device_set_flags(child, desc->flags);
device_set_ivars(child, devi);
if (bootverbose) {
The real question is, why is device_add_child failing? The best answer
is that the device class is not being found in make_device()
sys/kern/subr_bus.c. I would suggest you print the string in variable
"name", I think it is corrupt.
--mark tinguely.
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200111021431.fA2EVSA65309>
