summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_kern.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2014-08-08 17:12:03 +0000
committerkib <kib@FreeBSD.org>2014-08-08 17:12:03 +0000
commit094158b3f2a6f1f1c94fd8c1357192c5d7486a79 (patch)
tree0e7cb8ef3548f12ba3d175300ec28e89f06df725 /sys/vm/vm_kern.c
parent3ed5bde00cf51c1adc0152be002adec285130187 (diff)
downloadFreeBSD-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.c11
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);
OpenPOWER on IntegriCloud