diff options
author | kib <kib@FreeBSD.org> | 2014-08-08 17:12:03 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2014-08-08 17:12:03 +0000 |
commit | 094158b3f2a6f1f1c94fd8c1357192c5d7486a79 (patch) | |
tree | 0e7cb8ef3548f12ba3d175300ec28e89f06df725 /sys/vm/vm_kern.c | |
parent | 3ed5bde00cf51c1adc0152be002adec285130187 (diff) | |
download | FreeBSD-src-094158b3f2a6f1f1c94fd8c1357192c5d7486a79.zip FreeBSD-src-094158b3f2a6f1f1c94fd8c1357192c5d7486a79.tar.gz |
Change pmap_enter(9) interface to take flags parameter and superpage
mapping size (currently unused). The flags includes the fault access
bits, wired flag as PMAP_ENTER_WIRED, and a new flag
PMAP_ENTER_NOSLEEP to indicate that pmap should not sleep.
For powerpc aim both 32 and 64 bit, fix implementation to ensure that
the requested mapping is created when PMAP_ENTER_NOSLEEP is not
specified, in particular, wait for the available memory required to
proceed.
In collaboration with: alc
Tested by: nwhitehorn (ppc aim32 and booke)
Sponsored by: The FreeBSD Foundation and EMC / Isilon Storage Division
MFC after: 2 weeks
Diffstat (limited to 'sys/vm/vm_kern.c')
-rw-r--r-- | sys/vm/vm_kern.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/vm/vm_kern.c b/sys/vm/vm_kern.c index 37c0a27..5aa15e8 100644 --- a/sys/vm/vm_kern.c +++ b/sys/vm/vm_kern.c @@ -202,8 +202,8 @@ retry: if ((flags & M_ZERO) && (m->flags & PG_ZERO) == 0) pmap_zero_page(m); m->valid = VM_PAGE_BITS_ALL; - pmap_enter(kernel_pmap, addr + i, VM_PROT_ALL, m, VM_PROT_ALL, - TRUE); + pmap_enter(kernel_pmap, addr + i, m, VM_PROT_ALL, + VM_PROT_ALL | PMAP_ENTER_WIRED, 0); } VM_OBJECT_WUNLOCK(object); return (addr); @@ -255,7 +255,8 @@ retry: if ((flags & M_ZERO) && (m->flags & PG_ZERO) == 0) pmap_zero_page(m); m->valid = VM_PAGE_BITS_ALL; - pmap_enter(kernel_pmap, tmp, VM_PROT_ALL, m, VM_PROT_ALL, true); + pmap_enter(kernel_pmap, tmp, m, VM_PROT_ALL, + VM_PROT_ALL | PMAP_ENTER_WIRED, 0); tmp += PAGE_SIZE; } VM_OBJECT_WUNLOCK(object); @@ -378,8 +379,8 @@ retry: KASSERT((m->oflags & VPO_UNMANAGED) != 0, ("kmem_malloc: page %p is managed", m)); m->valid = VM_PAGE_BITS_ALL; - pmap_enter(kernel_pmap, addr + i, VM_PROT_ALL, m, VM_PROT_ALL, - TRUE); + pmap_enter(kernel_pmap, addr + i, m, VM_PROT_ALL, + VM_PROT_ALL | PMAP_ENTER_WIRED, 0); } VM_OBJECT_WUNLOCK(object); |