From owner-freebsd-net@FreeBSD.ORG Sat Oct 13 10:00:06 2007 Return-Path: Delivered-To: freebsd-net@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8754F16A473 for ; Sat, 13 Oct 2007 10:00:06 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 7B3A313C457 for ; Sat, 13 Oct 2007 10:00:06 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.1/8.14.1) with ESMTP id l9DA06Sh074082 for ; Sat, 13 Oct 2007 10:00:06 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.1/8.14.1/Submit) id l9DA061e074074; Sat, 13 Oct 2007 10:00:06 GMT (envelope-from gnats) Date: Sat, 13 Oct 2007 10:00:06 GMT Message-Id: <200710131000.l9DA061e074074@freefall.freebsd.org> To: freebsd-net@FreeBSD.org From: "Adrian Punga" Cc: Subject: Re: kern/109406: [ndis] Broadcom WLAN driver 4.100.15.5 doesn't work with Ndisgen X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Adrian Punga List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Oct 2007 10:00:06 -0000 The following reply was made to PR kern/109406; it has been noted by GNATS. From: "Adrian Punga" To: bug-followup@freebsd.org, darkvincentdude@yahoo.com Cc: Subject: Re: kern/109406: [ndis] Broadcom WLAN driver 4.100.15.5 doesn't work with Ndisgen Date: Sat, 13 Oct 2007 12:51:15 +0300 OK kgdb gave me the following from the core dump: kgdb: kvm_nlist(_stopped_cpus): kgdb: kvm_nlist(_stoppcbs): [GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so: Undefined symbol "ps_pglobal_lookup"] GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-marcel-freebsd". Unread portion of the kernel message buffer: ndis0: mem 0xf4000000-0xf4003fff irq 17 at device 0.0 on pci16 ndis0: NDIS API version: 5.1 Fatal trap 12: page fault while in kernel mode fault virtual address = 0x0 fault code = supervisor read, page not present instruction pointer = 0x20:0xc444712f stack pointer = 0x28:0xd4038c64 frame pointer = 0x28:0xd4038c78 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 = 11 (swi4: clock sio) trap number = 12 panic: page fault Uptime: 5m12s Dumping 503 MB (2 chunks) chunk 0: 1MB (159 pages) ... ok chunk 1: 503MB (128720 pages) 487 471 455 439 423 407 391 375 359 343 327 311 295 279 263 247 231 215 199 183 167 151 135 119 103 87 71 55 39 23 7 #0 doadump () at pcpu.h:165 165 __asm __volatile("movl %%fs:0,%0" : "=r" (td)); The last line belongs to __curthread which is aliased by a define as curthread and used in a lot of places in the ndis and if_ndis modules: [root@pcbsd /usr/src]# grep -R -e "curthread" * | grep ndis sys/compat/ndis/kern_ndis.c: tsleep(curthread->td_proc, PWAIT, "ndwait", hz); sys/compat/ndis/kern_windrv.c: t = &my_tids[curthread->td_oncpu]; sys/compat/ndis/kern_windrv.c: t->tid_cpu = curthread->td_oncpu; sys/compat/ndis/kern_windrv.c: if (t->tid_cpu != curthread->td_oncpu) sys/compat/ndis/kern_windrv.c: t = curthread; sys/compat/ndis/kern_windrv.c: t = curthread; sys/compat/ndis/subr_hal.c: if (mtx_owned(&disp_lock[curthread->td_oncpu])) sys/compat/ndis/subr_hal.c: mtx_lock(&disp_lock[curthread->td_oncpu]); sys/compat/ndis/subr_hal.c: mtx_unlock(&disp_lock[curthread->td_oncpu]); sys/compat/ndis/subr_ndis.c: struct thread *td = curthread; sys/compat/ndis/subr_ndis.c: struct thread *td = curthread; sys/compat/ndis/subr_ndis.c: struct thread *td = curthread; sys/compat/ndis/subr_ntoskrnl.c: struct thread *td = curthread; sys/compat/ndis/subr_ntoskrnl.c: ntoskrnl_satisfy_wait(obj, curthread); sys/compat/ndis/subr_ntoskrnl.c: struct thread *td = curthread; sys/compat/ndis/subr_ntoskrnl.c: kq->kq_td = curthread; sys/compat/ndis/subr_ntoskrnl.c: if (kmutex->km_ownerthread != curthread) { sys/compat/ndis/subr_ntoskrnl.c: if (nr->no_obj != curthread->td_proc) sys/compat/ndis/subr_ntoskrnl.c: kq->kq_td = curthread; sys/compat/ndis/subr_ntoskrnl.c: sched_bind(curthread, kq->kq_cpu); sys/compat/ndis/subr_ntoskrnl.c: sched_prio(curthread, PRI_MIN_KERN); sys/compat/ndis/subr_ntoskrnl.c: curthread->td_base_pri = PRI_MIN_KERN; sys/compat/ndis/subr_ntoskrnl.c: kq += curthread->td_oncpu; sys/compat/ndis/subr_ntoskrnl.c: return((uint32_t)curthread->td_oncpu); sys/dev/if_ndis/if_ndis.c: if ((error = suser(curthread))) sys/dev/if_ndis/if_ndis.c: if ((error = suser(curthread))) sys/dev/if_ndis/if_ndis.c: if ((error = suser(curthread))) sys/dev/if_ndis/if_ndis.c: error = suser(curthread); sys/dev/if_ndis/if_ndis.c: error = suser(curthread); I can't figure out where the call was made from as kgdb didn't gave me the full call stack. Anybody, any ideas? Adrian Punga