summaryrefslogtreecommitdiffstats
path: root/sys/vm/device_pager.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/vm/device_pager.c')
-rw-r--r--sys/vm/device_pager.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/vm/device_pager.c b/sys/vm/device_pager.c
index 809c32c..30aaac0 100644
--- a/sys/vm/device_pager.c
+++ b/sys/vm/device_pager.c
@@ -54,6 +54,8 @@ __FBSDID("$FreeBSD$");
#include <vm/vm_phys.h>
#include <vm/uma.h>
+#include <machine/cpu.h>
+
static void dev_pager_init(void);
static vm_object_t dev_pager_alloc(void *, vm_ooffset_t, vm_prot_t,
vm_ooffset_t, struct ucred *);
@@ -299,7 +301,7 @@ old_dev_pager_fault(vm_object_t object, vm_ooffset_t offset, int prot,
struct file *fpop;
struct thread *td;
vm_memattr_t memattr;
- int ref, ret;
+ int i, ref, ret;
pidx = OFF_TO_IDX(offset);
memattr = object->memattr;
@@ -351,7 +353,10 @@ old_dev_pager_fault(vm_object_t object, vm_ooffset_t offset, int prot,
vm_page_free(*mres);
vm_page_unlock(*mres);
*mres = page;
- vm_page_insert(page, object, pidx);
+ while (vm_page_insert(page, object, pidx) != 0) {
+ for (i = 0; i < 10000000; i++)
+ cpu_spinwait();
+ }
}
page->valid = VM_PAGE_BITS_ALL;
return (VM_PAGER_OK);
OpenPOWER on IntegriCloud