cvs commit: src/sys/kern imgact_elf.c src/sys/vm vm_extern.h vm_glue.c

Pawel Jakub Dawidek pjd at FreeBSD.org
Sat Dec 17 19:22:01 PST 2005


On Fri, Dec 16, 2005 at 06:34:14PM +0000, Alan Cox wrote:
+> alc         2005-12-16 18:34:14 UTC
+> 
+>   FreeBSD src repository
+> 
+>   Modified files:
+>     sys/kern             imgact_elf.c 
+>     sys/vm               vm_extern.h vm_glue.c 
+>   Log:
+>   Use sf_buf_alloc() instead of vm_map_find() on exec_map to create the
+>   ephemeral mappings that are used as the source for three copy
+>   operations from kernel space to user space.  There are two reasons for
+>   making this change: (1) Under heavy load exec_map can fill up causing
+>   vm_map_find() to fail.  When it fails, the nascent process is aborted
+>   (SIGABRT).  Whereas, this reimplementation using sf_buf_alloc()
+>   sleeps.  (2) Although it is possible to sleep on vm_map_find()'s
+>   failure until address space becomes available (see kmem_alloc_wait()),
+>   using sf_buf_alloc() is faster.  Furthermore, the reimplementation
+>   uses a CPU private mapping, avoiding a TLB shootdown on
+>   multiprocessors.

I got panic on boot with this change (maybe because I've DEBUG_VFS_LOCKS
compiled into the kernel):

Trying to mount root from ufs:/dev/ad0s1a
KDB: stack backtrace:
vfs_badlock() at vfs_badlock+0x95
assert_vop_locked() at assert_vop_locked+0x77
VOP_GETPAGES_APV() at VOP_GETPAGES_APV+0x8a
vnode_pager_getpages() at vnode_pager_getpages+0x92
vm_imgact_map_page() at vm_imgact_map_page+0x84
elf64_load_section() at elf64_load_section+0xe9
exec_elf64_imgact() at exec_elf64_imgact+0x336
kern_execve() at kern_execve+0x457
execve() at execve+0x5d
start_init() at start_init+0x249
fork_exit() at fork_exit+0xbb
fork_trampoline() at fork_trampoline+0xe
--- trap 0, rip = 0, rsp = 0xffffffffb280dd40, rbp = 0 ---
VOP_GETPAGES: 0xffffff0009848200 is not locked but should be
KDB: enter: lock violation
[thread pid 1 tid 100004 ]
Stopped at      kdb_enter+0x2f: nop     

-- 
Pawel Jakub Dawidek                       http://www.wheel.pl
pjd at FreeBSD.org                           http://www.FreeBSD.org
FreeBSD committer                         Am I Evil? Yes, I Am!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/cvs-src/attachments/20051218/86c6aebb/attachment.bin


More information about the cvs-src mailing list