SMP hard lock with libpthread (thread X holds Y but isn't blocked
on a lock)
othermark
atkin901 at yahoo.com
Mon May 16 08:35:19 PDT 2005
I have an application that uses shared memory/threads and is linked with
libpthread, running on May 10 -current. Every time I run it, after a few
minutes *poof* hard lock on a SMP box. All debug options are enabled in
the kernel, but it won't break to debugger. Here's what appears on the
console, and addr2line output follows:
kernel trap 12 with interrupts disabled
Fatal trap 12: page fault while in kernel mode
cpuid = 0; apic id = 01
fault virtual address = 0x4
fault code = supervisor read, page not present
instruction pointer = 0x20:0xc06b5dd9
stack pointer = 0x28:0xe76eeb4c
frame pointer = 0x28:0xe76eeb74
code segment = base 0x0, limit 0xfffff, type 0x1b
= DPL 0, pres 1, def32 1, gran 1
processor eflags = resume, IOPL = 0
current process = 640 (tgen)
# addr2line -e kernel.debug 0xc06b5dd9
/usr/src/sys/kern/subr_turnstile.c:226
# ls -l /boot/kernel
total 13920
-r-xr-xr-x 1 root wheel 7102901 May 10 17:15 kernel
215 #ifndef SMP
216 /*
217 * For UP, we check to see if td is curthread (this shou
217 ldn't
218 * ever happen however as it would mean we are in a dead
218 lock.)
219 */
220 KASSERT(td != curthread, ("Deadlock detected"));
221 #endif
222
223 /*
224 * If we aren't blocked on a lock, we should be.
225 */
226 KASSERT(TD_ON_LOCK(td), (
227 "thread %d(%s):%d holds %s but isn't blocked on a lo
227 ck\n",
228 td->td_tid, td->td_proc->p_comm, td->td_state,
229 ts->ts_lockobj->lo_name));
--
othermark
atkin901 at nospam dot yahoo dot com
(!wired)?(coffee++):(wired);
More information about the freebsd-current
mailing list