Lines Matching full:object

67 static void dev_pager_free_page(vm_object_t object, vm_page_t m);
68 static int dev_pager_populate(vm_object_t object, vm_pindex_t pidx,
99 static int old_dev_pager_fault(vm_object_t object, vm_ooffset_t offset,
119 vm_object_t object; in cdev_pager_lookup() local
123 object = vm_pager_object_lookup(&dev_pager_object_list, handle); in cdev_pager_lookup()
124 if (object != NULL && object->un_pager.devp.dev == NULL) { in cdev_pager_lookup()
125 msleep(&object->un_pager.devp.dev, &dev_pager_mtx, in cdev_pager_lookup()
127 vm_object_deallocate(object); in cdev_pager_lookup()
131 return (object); in cdev_pager_lookup()
139 vm_object_t object; in cdev_pager_allocate() local
172 object = vm_pager_object_lookup(&dev_pager_object_list, handle); in cdev_pager_allocate()
173 if (object == NULL) { in cdev_pager_allocate()
177 * Allocate object and associate it with the pager. Initialize in cdev_pager_allocate()
178 * the object's pg_color based upon the physical address of the in cdev_pager_allocate()
184 object = vm_pager_object_lookup(&dev_pager_object_list, handle); in cdev_pager_allocate()
185 if (object != NULL) { in cdev_pager_allocate()
189 if (object->un_pager.devp.dev == NULL) { in cdev_pager_allocate()
190 msleep(&object->un_pager.devp.dev, in cdev_pager_allocate()
192 vm_object_deallocate(object); in cdev_pager_allocate()
197 * We raced with other thread while allocating object. in cdev_pager_allocate()
199 if (pindex > object->size) in cdev_pager_allocate()
200 object->size = pindex; in cdev_pager_allocate()
201 KASSERT(object->type == tp, in cdev_pager_allocate()
203 object, tp)); in cdev_pager_allocate()
204 KASSERT(object->un_pager.devp.ops == ops, in cdev_pager_allocate()
205 ("Inconsistent devops %p %p", object, ops)); in cdev_pager_allocate()
209 object = object1; in cdev_pager_allocate()
211 object->handle = handle; in cdev_pager_allocate()
212 object->un_pager.devp.ops = ops; in cdev_pager_allocate()
213 TAILQ_INIT(&object->un_pager.devp.devp_pglist); in cdev_pager_allocate()
214 TAILQ_INSERT_TAIL(&dev_pager_object_list, object, in cdev_pager_allocate()
218 vm_object_set_flag(object, OBJ_POPULATE); in cdev_pager_allocate()
222 TAILQ_REMOVE(&dev_pager_object_list, object, in cdev_pager_allocate()
224 wakeup(&object->un_pager.devp.dev); in cdev_pager_allocate()
226 object->type = OBJT_DEAD; in cdev_pager_allocate()
227 vm_object_deallocate(object); in cdev_pager_allocate()
228 object = NULL; in cdev_pager_allocate()
232 object->flags |= OBJ_COLORED; in cdev_pager_allocate()
233 object->pg_color = color; in cdev_pager_allocate()
234 object->un_pager.devp.dev = handle; in cdev_pager_allocate()
235 wakeup(&object->un_pager.devp.dev); in cdev_pager_allocate()
240 if (object->un_pager.devp.dev == NULL) { in cdev_pager_allocate()
241 msleep(&object->un_pager.devp.dev, in cdev_pager_allocate()
243 vm_object_deallocate(object); in cdev_pager_allocate()
246 if (pindex > object->size) in cdev_pager_allocate()
247 object->size = pindex; in cdev_pager_allocate()
248 KASSERT(object->type == tp, in cdev_pager_allocate()
249 ("Inconsistent device pager type %p %d", object, tp)); in cdev_pager_allocate()
252 return (object); in cdev_pager_allocate()
265 cdev_pager_free_page(vm_object_t object, vm_page_t m) in cdev_pager_free_page() argument
268 VM_OBJECT_ASSERT_WLOCKED(object); in cdev_pager_free_page()
269 if (object->type == OBJT_MGTDEVICE) { in cdev_pager_free_page()
273 } else if (object->type == OBJT_DEVICE) in cdev_pager_free_page()
274 dev_pager_free_page(object, m); in cdev_pager_free_page()
278 dev_pager_free_page(vm_object_t object, vm_page_t m) in dev_pager_free_page() argument
281 VM_OBJECT_ASSERT_WLOCKED(object); in dev_pager_free_page()
282 KASSERT((object->type == OBJT_DEVICE && in dev_pager_free_page()
284 ("Managed device or page obj %p m %p", object, m)); in dev_pager_free_page()
285 TAILQ_REMOVE(&object->un_pager.devp.devp_pglist, m, plinks.q); in dev_pager_free_page()
290 dev_pager_dealloc(vm_object_t object) in dev_pager_dealloc() argument
294 VM_OBJECT_WUNLOCK(object); in dev_pager_dealloc()
295 object->un_pager.devp.ops->cdev_pg_dtor(object->un_pager.devp.dev); in dev_pager_dealloc()
298 TAILQ_REMOVE(&dev_pager_object_list, object, pager_object_list); in dev_pager_dealloc()
300 VM_OBJECT_WLOCK(object); in dev_pager_dealloc()
302 if (object->type == OBJT_DEVICE) { in dev_pager_dealloc()
306 while ((m = TAILQ_FIRST(&object->un_pager.devp.devp_pglist)) in dev_pager_dealloc()
311 dev_pager_free_page(object, m); in dev_pager_dealloc()
314 object->handle = NULL; in dev_pager_dealloc()
315 object->type = OBJT_DEAD; in dev_pager_dealloc()
319 dev_pager_getpages(vm_object_t object, vm_page_t *ma, int count, int *rbehind, in dev_pager_getpages() argument
326 if (object->un_pager.devp.ops->cdev_pg_fault == NULL) in dev_pager_getpages()
328 VM_OBJECT_WLOCK(object); in dev_pager_getpages()
329 error = object->un_pager.devp.ops->cdev_pg_fault(object, in dev_pager_getpages()
332 VM_OBJECT_ASSERT_WLOCKED(object); in dev_pager_getpages()
335 KASSERT((object->type == OBJT_DEVICE && in dev_pager_getpages()
337 (object->type == OBJT_MGTDEVICE && in dev_pager_getpages()
339 ("Wrong page type %p %p", ma[0], object)); in dev_pager_getpages()
340 if (object->type == OBJT_DEVICE) { in dev_pager_getpages()
341 TAILQ_INSERT_TAIL(&object->un_pager.devp.devp_pglist, in dev_pager_getpages()
349 VM_OBJECT_WUNLOCK(object); in dev_pager_getpages()
355 dev_pager_populate(vm_object_t object, vm_pindex_t pidx, int fault_type, in dev_pager_populate() argument
359 VM_OBJECT_ASSERT_WLOCKED(object); in dev_pager_populate()
360 if (object->un_pager.devp.ops->cdev_pg_populate == NULL) in dev_pager_populate()
362 return (object->un_pager.devp.ops->cdev_pg_populate(object, pidx, in dev_pager_populate()
367 old_dev_pager_fault(vm_object_t object, vm_ooffset_t offset, int prot, in old_dev_pager_fault() argument
379 memattr = object->memattr; in old_dev_pager_fault()
381 VM_OBJECT_WUNLOCK(object); in old_dev_pager_fault()
383 dev = object->handle; in old_dev_pager_fault()
386 VM_OBJECT_WLOCK(object); in old_dev_pager_fault()
398 VM_OBJECT_WLOCK(object); in old_dev_pager_fault()
423 VM_OBJECT_WLOCK(object); in old_dev_pager_fault()
431 VM_OBJECT_WLOCK(object); in old_dev_pager_fault()
432 vm_page_replace(page, object, (*mres)->pindex, *mres); in old_dev_pager_fault()
440 dev_pager_putpages(vm_object_t object, vm_page_t *m, int count, int flags, in dev_pager_putpages() argument
448 dev_pager_haspage(vm_object_t object, vm_pindex_t pindex, int *before, in dev_pager_haspage() argument