Date: Sat, 5 Oct 2002 15:55:04 +0200 From: Stefan Farfeleder <e0026813@stud3.tuwien.ac.at> To: John Baldwin <jhb@FreeBSD.org> Cc: Juli Mallett <jmallett@FreeBSD.org>, current@FreeBSD.org Subject: Re: Junior Kernel Hacker page updated... Message-ID: <20021005135504.GA254@frog.fafoe> In-Reply-To: <XFMail.20021004163317.jhb@FreeBSD.org> References: <20021004132203.A78223@FreeBSD.org> <XFMail.20021004163317.jhb@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Oct 04, 2002 at 04:33:17PM -0400, John Baldwin wrote: I wrote: > >> Fatal trap 12: page fault while in kernel mode > >> cpuid = 0; lapic.id = 00000000 > >> fault virtual address = 0x8 > >> fault code = supervisor read, page not present > >> instruction pointer = 0x8:0xc01a1212 > >> stack pointer = 0x10:0xe5226c14 > >> frame pointer = 0x10:0xe5226ca0 > >> 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 = 56525 (make) > >> > >> kernel: type 12 trap, code = 0 > >> > >> Stopped at kqueue_scan+0x242: cmpl $0,0x8(%ebx) > >> db> trace > >> kqueue_scan(c6472bf4,4,bfbfebc0,0,c70ecea0) at kqueue_scan+0x242 > >> kevent(c70ecea0,e5226d10,c0351d80,418,6) at kevent+0x1e1 > >> syscall(2f,2f,2f,818d780,818d960) at syscall+0x2be > >> %%% > Even better, pop up gdb on kernel.debug and do > 'l *kqueue_scan+0x242' to look at the offending line of code. > addr2line can also be useful here similarly. (kgdb) l *kqueue_scan+0x242 0xc01a1212 is in kqueue_scan (/freebsd/current/src/sys/kern/kern_event.c:716). 711 } 712 713 TAILQ_INSERT_TAIL(&kq->kq_head, &marker, kn_tqe); 714 while (count) { 715 kn = TAILQ_FIRST(&kq->kq_head); translates to: mov (%edi),%ebx 716 TAILQ_REMOVE(&kq->kq_head, kn, kn_tqe); translates to: cmpl $0x0,0x8(%ebx) This line causes the page fault because %ebx is 0. je fe3 <kqueue_scan+0x253> mov 0x8(%ebx),%edx [...] 717 if (kn == &marker) { 718 splx(s); 719 if (count == maxevents) 720 goto retry; I've added this after line 715: 716 if (kn == NULL) { 717 Debugger("TAILQ_FIRST returns NULL"); 718 } and after 4 freezes, I really came into ddb in line 717. However, when trying to produce a dump, this occured: db> panic panic: from debugger cpuid = 1; lapic.id = 01000000 boot() called on cpu#1 syncing disks... panic: bremfree: bp 0xd2a42990 not locked boot() called on cpu#1 Uptime: 10m13s pfs_vncache_unload(): 1 entries remaining Dumping 1023 MB ata0: resetting devices ata0: mask=03 ostat0=50 ostat2=00 ad0: ATAPI 00 00 ata0-slave: ATAPI 00 00 ata0: mask=03 stat0=50 stat1=00 ad0: ATA 01 a5 ata0: devices=01 and I had to reboot without a dump :-( Regards, Stefan Farfeleder 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?20021005135504.GA254>