Date: Sun, 21 Jul 2002 16:38:28 -0700 From: Mark Peek <mp@FreeBSD.org> To: freebsd-current@freebsd.org Cc: Alan Cox <alc@FreeBSD.org>, julian@freebsd.org Subject: Panic in -current when using i386_set_ioperm() Message-ID: <p05111a0ab960f2187817@[10.1.1.73]>
next in thread | raw e-mail | index | archive | help
There is a reproducible panic in -current after using
i386_set_ioperm(). The extended pcb is attempted to be freed in
cpu_thread_exit() using kmem_free(). Via private mail, Alan Cox
explained it to me as such:
"The problem runs deeper than Giant not being held: cpu_thread_exit()
really can't call kmem_free(). At the point of the call, a spin lock
is held. Acquiring the kernel_map lock can cause you to sleep. Thus,
the code could sleep with a spin lock held."
The program and the panic trace is below. I figured I would post this
to -current to get some more people thinking about the right fix.
Mark
-------
#include <stdio.h>
#include <stdlib.h>
#include <machine/sysarch.h>
int
main()
{
int bt_ctrl = 0xe4;
if (i386_set_ioperm(bt_ctrl, 3, 1) != 0) {
perror("i386_set_ioperm");
exit(1);
}
}
panic: mutex Giant not owned at /usr/src/sys/vm/vm_map.c:364
Debugger("panic")
Stopped at Debugger+0x45: xchgl %ebx,in_Debugger.0
db> trace
Debugger(c03e1c1c) at Debugger+0x45
panic(c03e0de8,c03e0f52,c03ff0f8,16c,c0832000) at panic+0x7c
_mtx_assert(c043f000,1,c03ff0f8,16c) at _mtx_assert+0xa8
_vm_map_lock(c0832000,c03ff0f8,842) at _vm_map_lock+0x23
vm_map_remove(c0832000,ed506000,ed509000,e8ce7c84,c038d055) at
vm_map_remove+0x1f
kmem_free(c0832000,ed506000,3000,c62bbb40,e8ce7ca0) at kmem_free+0x25
cpu_thread_exit(c62bbb40) at cpu_thread_exit+0x35
thread_exit(c62bbb40,c6a18000,e8ce7cd4,c024d4af,c043f000) at thread_exit+0x8a
exit1(c62bbb40,1038a800,c043f000,0,c03debce) at exit1+0xb67
sys_exit(c62bbb40,e8ce7d14,1,16,296) at sys_exit+0x27
syscall(bfbf002f,bfbf002f,bfbf002f,0,ffffffff) at syscall+0x23c
syscall_with_err_pushed() at syscall_with_err_pushed+0x1b
--- syscall (1, FreeBSD ELF32, sys_exit), eip = 0x280a1d13, esp =
0xbfbffb7c, ebp = 0xbfbffba8 ---
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?p05111a0ab960f2187817>
