diff options
author | alc <alc@FreeBSD.org> | 2003-09-27 05:44:53 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2003-09-27 05:44:53 +0000 |
commit | 81b27036384e098bceeed07ae1309bcc1e31c2e4 (patch) | |
tree | d431132db444ed9e3d3f2ae9478ca4a85369b86c /sys/i386 | |
parent | a91f57834dcd12290cf7f9b1c0a50c48e7009351 (diff) | |
download | FreeBSD-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.c | 15 |
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); |