Date: Mon, 4 Oct 2010 16:49:40 +0000 (UTC) From: Alan Cox <alc@FreeBSD.org> To: cvs-src-old@freebsd.org Subject: cvs commit: src/sys/vm vm_map.c Message-ID: <201010041650.o94Go5tE079734@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
alc 2010-10-04 16:49:40 UTC
FreeBSD src repository
Modified files:
sys/vm vm_map.c
Log:
SVN rev 213408 on 2010-10-04 16:49:40Z by alc
If vm_map_find() is asked to allocate a superpage-aligned region of virtual
addresses that is greater than a superpage in size but not a multiple of
the superpage size, then vm_map_find() is not always expanding the kernel
pmap to support the last few small pages being allocated. These failures
are not commonplace, so this was first noticed by someone porting FreeBSD
to a new architecture. Previously, we grew the kernel page table in
vm_map_findspace() when we found the first available virtual address.
This works most of the time because we always grow the kernel pmap or page
table by an amount that is a multiple of the superpage size. Now, instead,
we defer the call to pmap_growkernel() until we are committed to a range
of virtual addresses in vm_map_insert(). In general, there is another
reason to prefer calling pmap_growkernel() in vm_map_insert(). It makes
it possible for someone to do the equivalent of an mmap(MAP_FIXED) on the
kernel map.
Reported by: Svatopluk Kraus
Reviewed by: kib@
MFC after: 3 weeks
Revision Changes Path
1.434 +8 -14 src/sys/vm/vm_map.c
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201010041650.o94Go5tE079734>
