Index: sys/dev/drm2/i915/i915_gem.c =================================================================== --- sys/dev/drm2/i915/i915_gem.c +++ sys/dev/drm2/i915/i915_gem.c @@ -1475,7 +1475,7 @@ static int i915_gem_pager_fault(vm_object_t vm_obj, vm_ooffset_t offset, int prot, - vm_page_t *mres) + vm_page_t *mres, int count, int *rahead) { struct drm_gem_object *gem_obj = vm_obj->handle; struct drm_i915_gem_object *obj = to_intel_bo(gem_obj); @@ -1490,6 +1490,9 @@ #endif /* FREEBSD_WIP */ bool pinned; + if (rahead) + *rahead = 0; + vm_object_pip_add(vm_obj, 1); /* Index: sys/dev/drm2/ttm/ttm_bo_vm.c =================================================================== --- sys/dev/drm2/ttm/ttm_bo_vm.c +++ sys/dev/drm2/ttm/ttm_bo_vm.c @@ -100,7 +100,7 @@ static int ttm_bo_vm_fault(vm_object_t vm_obj, vm_ooffset_t offset, - int prot, vm_page_t *mres) + int prot, vm_page_t *mres, int count, int *rahead) { struct ttm_buffer_object *bo = vm_obj->handle; @@ -112,6 +112,9 @@ struct ttm_mem_type_manager *man = &bdev->man[bo->mem.mem_type]; + if (rahead) + *rahead = 0; + vm_object_pip_add(vm_obj, 1); if (*mres != NULL) { vm_page_lock(*mres); Index: sys/dev/netmap/netmap_freebsd.c =================================================================== --- sys/dev/netmap/netmap_freebsd.c +++ sys/dev/netmap/netmap_freebsd.c @@ -492,7 +492,7 @@ static int netmap_dev_pager_fault(vm_object_t object, vm_ooffset_t offset, - int prot, vm_page_t *mres) + int prot, vm_page_t *mres, int count, int *rahead) { struct netmap_vm_handle_t *vmh = object->handle; struct netmap_priv_d *priv = vmh->priv; @@ -502,6 +502,9 @@ vm_memattr_t memattr; vm_pindex_t pidx; + if (rahead) + *rahead = 0; + ND("object %p offset %jd prot %d mres %p", object, (intmax_t)offset, prot, mres); memattr = object->memattr; Index: sys/dev/xen/privcmd/privcmd.c =================================================================== --- sys/dev/xen/privcmd/privcmd.c +++ sys/dev/xen/privcmd/privcmd.c @@ -90,7 +90,7 @@ vm_ooffset_t foff, struct ucred *cred, u_short *color); static void privcmd_pg_dtor(void *handle); static int privcmd_pg_fault(vm_object_t object, vm_ooffset_t offset, - int prot, vm_page_t *mres); + int prot, vm_page_t *mres, int count, int *rahead); static struct cdev_pager_ops privcmd_pg_ops = { .cdev_pg_fault = privcmd_pg_fault, @@ -151,12 +151,15 @@ static int privcmd_pg_fault(vm_object_t object, vm_ooffset_t offset, - int prot, vm_page_t *mres) + int prot, vm_page_t *mres, int count, int *rahead) { struct privcmd_map *map = object->handle; vm_pindex_t pidx; vm_page_t page, oldm; + if (rahead) + *rahead = 0; + if (map->mapped != true) return (VM_PAGER_FAIL); Index: sys/vm/device_pager.c =================================================================== --- sys/vm/device_pager.c +++ sys/vm/device_pager.c @@ -90,7 +90,7 @@ vm_ooffset_t foff, struct ucred *cred, u_short *color); static void old_dev_pager_dtor(void *handle); static int old_dev_pager_fault(vm_object_t object, vm_ooffset_t offset, - int prot, vm_page_t *mres); + int prot, vm_page_t *mres, int count, int *rahead); static struct cdev_pager_ops old_dev_pager_ops = { .cdev_pg_ctor = old_dev_pager_ctor, @@ -265,8 +265,13 @@ /* Since our haspage reports zero after/before, the count is 1. */ KASSERT(count == 1, ("%s: count %d", __func__, count)); VM_OBJECT_ASSERT_WLOCKED(object); + if (object->type == OBJT_DEVICE) { + count = 1; + if (rahead) + *rahead = 0; + } error = object->un_pager.devp.ops->cdev_pg_fault(object, - IDX_TO_OFF(ma[0]->pindex), PROT_READ, &ma[0]); + IDX_TO_OFF(ma[0]->pindex), PROT_READ, ma, count, rahead); VM_OBJECT_ASSERT_WLOCKED(object); @@ -282,8 +287,6 @@ } if (rbehind) *rbehind = 0; - if (rahead) - *rahead = 0; } return (error); @@ -291,7 +294,7 @@ static int old_dev_pager_fault(vm_object_t object, vm_ooffset_t offset, int prot, - vm_page_t *mres) + vm_page_t *mres, int count, int *rahead) { vm_paddr_t paddr; vm_page_t m_paddr, page; @@ -302,6 +305,9 @@ vm_memattr_t memattr, memattr1; int ref, ret; + if (rahead) + *rahead = 0; + memattr = object->memattr; VM_OBJECT_WUNLOCK(object); Index: sys/vm/vm_pager.h =================================================================== --- sys/vm/vm_pager.h +++ sys/vm/vm_pager.h @@ -176,7 +176,7 @@ struct cdev_pager_ops { int (*cdev_pg_fault)(vm_object_t vm_obj, vm_ooffset_t offset, - int prot, vm_page_t *mres); + int prot, vm_page_t *mres, int count, int *rahead); int (*cdev_pg_ctor)(void *handle, vm_ooffset_t size, vm_prot_t prot, vm_ooffset_t foff, struct ucred *cred, u_short *color); void (*cdev_pg_dtor)(void *handle);