summaryrefslogtreecommitdiffstats
path: root/sys/i386
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2003-09-27 05:44:53 +0000
committeralc <alc@FreeBSD.org>2003-09-27 05:44:53 +0000
commit81b27036384e098bceeed07ae1309bcc1e31c2e4 (patch)
treed431132db444ed9e3d3f2ae9478ca4a85369b86c /sys/i386
parenta91f57834dcd12290cf7f9b1c0a50c48e7009351 (diff)
downloadFreeBSD-src-81b27036384e098bceeed07ae1309bcc1e31c2e4.zip
FreeBSD-src-81b27036384e098bceeed07ae1309bcc1e31c2e4.tar.gz
Addendum to the previous revision: If vm_page_alloc() for the page
table page fails, perform a VM_WAIT; update some comments in _pmap_allocpte().
Diffstat (limited to 'sys/i386')
-rw-r--r--sys/i386/i386/pmap.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index 3e19ba7..4031e7a 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -1178,12 +1178,17 @@ _pmap_allocpte(pmap, ptepindex)
vm_page_t m;
/*
- * Find or fabricate a new pagetable page
+ * Allocate a page table page.
*/
- m = vm_page_alloc(NULL, ptepindex,
- VM_ALLOC_WIRED | VM_ALLOC_ZERO | VM_ALLOC_NOOBJ);
- if (m == NULL)
- return (m);
+ if ((m = vm_page_alloc(NULL, ptepindex, VM_ALLOC_NOOBJ |
+ VM_ALLOC_WIRED | VM_ALLOC_ZERO)) == NULL) {
+ VM_WAIT;
+ /*
+ * Indicate the need to retry. While waiting, the page table
+ * page may have been allocated.
+ */
+ return (NULL);
+ }
if ((m->flags & PG_ZERO) == 0)
pmap_zero_page(m);
OpenPOWER on IntegriCloud