Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 13 Oct 2007 10:00:06 GMT
From:      "Adrian Punga" <adrian.punga@gmail.com>
To:        freebsd-net@FreeBSD.org
Subject:   Re: kern/109406: [ndis] Broadcom WLAN driver 4.100.15.5 doesn't work with Ndisgen
Message-ID:  <200710131000.l9DA061e074074@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/109406; it has been noted by GNATS.

From: "Adrian Punga" <adrian.punga@gmail.com>
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: <Broadcom 802.11b/g WLAN> 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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200710131000.l9DA061e074074>