Index: uvm_glue.c
===================================================================
RCS file: /cvsroot/src/sys/uvm/uvm_glue.c,v
retrieving revision 1.164
diff -u -r1.164 uvm_glue.c
--- uvm_glue.c 22 Aug 2018 12:07:43 -0000 1.164
+++ uvm_glue.c 4 Nov 2018 13:31:09 -0000
@@ -246,7 +246,7 @@
if (USPACE == PAGE_SIZE && USPACE_ALIGN == 0) {
struct vm_page *pg;
vaddr_t va;
-
+again:
#if defined(PMAP_ALLOC_POOLPAGE)
pg = PMAP_ALLOC_POOLPAGE(
((flags & PR_WAITOK) == 0 ? UVM_KMF_NOWAIT : 0));
@@ -257,8 +257,14 @@
if (pg == NULL)
return NULL;
va = PMAP_MAP_POOLPAGE(VM_PAGE_TO_PHYS(pg));
- if (va == 0)
+ if (va == 0) {
uvm_pagefree(pg);
+ if ((flags & PR_WAITOK) != 0) {
+ uvm_wait("uplpg");
+ goto again;
+ }
+ }
+
return (void *)va;
}
#endif