Lines Matching refs:uobj
79 #define UBC_HASH(uobj, offset) \
80 (((((u_long)(uobj)) >> 8) + (((u_long)(offset)) >> PAGE_SHIFT)) & \
95 struct uvm_object * uobj; /* mapped object */
96 voff_t offset; /* offset into uobj */
110 struct uvm_object uobj; /* glue for uvm_map() */
181 uvm_obj_init(&ubc_object.uobj, &ubc_pager, true, UVM_OBJ_KERN);
215 ubc_nwins << ubc_winshift, &ubc_object.uobj, 0, (vsize_t)va,
311 struct uvm_object *uobj;
327 uvmfault_unlockall(ufi, NULL, &ubc_object.uobj);
366 uobj = umap->uobj;
379 rw_enter(uobj->vmobjlock, RW_WRITER);
383 UVMHIST_LOG(ubchist, "getpages uobj %#jx offset %#jx npages %jd",
384 (uintptr_t)uobj, umap->offset + slot_offset, npages, 0);
386 error = (*uobj->pgops->pgo_get)(uobj, umap->offset + slot_offset, pgs,
424 rw_enter(uobj->vmobjlock, RW_WRITER);
435 KASSERT(uobj->vmobjlock == pg->uobject->vmobjlock);
443 rw_exit(uobj->vmobjlock);
445 rw_enter(uobj->vmobjlock, RW_WRITER);
450 rw_exit(uobj->vmobjlock);
460 ubc_find_mapping(struct uvm_object *uobj, voff_t offset)
464 LIST_FOREACH(umap, &ubc_object.hash[UBC_HASH(uobj, offset)], hash) {
465 if (umap->uobj == uobj && umap->offset == offset) {
482 ubc_alloc(struct uvm_object *uobj, voff_t offset, vsize_t *lenp, int advice,
490 UVMHIST_CALLARGS(ubchist, "uobj %#jx offset %#jx len %#jx",
491 (uintptr_t)uobj, offset, *lenp, 0);
499 rw_enter(ubc_object.uobj.vmobjlock, RW_WRITER);
503 * Lock order: UBC object -> ubc_map::uobj.
505 umap = ubc_find_mapping(uobj, umap_offset);
512 rw_exit(ubc_object.uobj.vmobjlock);
514 rw_enter(ubc_object.uobj.vmobjlock, RW_WRITER);
519 oobj = umap->uobj;
543 umap->uobj = uobj;
545 LIST_INSERT_HEAD(&ubc_object.hash[UBC_HASH(uobj, umap_offset)],
547 LIST_INSERT_HEAD(&uobj->uo_ubc, umap, list);
559 "ubc_alloc: concurrent writes to uobj %p", uobj);
561 "ubc_alloc: concurrent writes to uobj %p", uobj);
568 rw_exit(ubc_object.uobj.vmobjlock);
585 rw_enter(uobj->vmobjlock, RW_WRITER);
592 error = (*uobj->pgops->pgo_get)(uobj
605 KASSERT(pg->uobject == uobj);
607 rw_enter(uobj->vmobjlock, RW_WRITER);
615 rw_exit(uobj->vmobjlock);
619 rw_exit(uobj->vmobjlock);
646 struct uvm_object *uobj;
654 uobj = umap->uobj;
655 KASSERT(uobj != NULL);
668 rw_enter(uobj->vmobjlock, RW_WRITER);
693 rw_exit(uobj->vmobjlock);
699 rw_enter(ubc_object.uobj.vmobjlock, RW_WRITER);
710 rw_enter(uobj->vmobjlock, RW_WRITER);
714 rw_exit(uobj->vmobjlock);
719 umap->uobj = NULL;
732 rw_exit(ubc_object.uobj.vmobjlock);
740 ubc_uiomove(struct uvm_object *uobj, struct uio *uio, vsize_t todo, int advice,
767 return ubc_uiomove_direct(uobj, uio, todo, advice, flags);
778 win = ubc_alloc(uobj, off, &bytelen, advice, flags, pgs,
807 ubc_zerorange(struct uvm_object *uobj, off_t off, size_t len, int flags)
814 ubc_zerorange_direct(uobj, off, len, flags);
828 win = ubc_alloc(uobj, off, &bytelen, UVM_ADV_NORMAL, UBC_WRITE,
845 ubc_alloc_direct(struct uvm_object *uobj, voff_t offset, vsize_t *lenp,
858 KASSERT(!UVM_OBJ_NEEDS_WRITEFAULT(uobj));
881 rw_enter(uobj->vmobjlock, RW_WRITER);
882 error = (*uobj->pgops->pgo_get)(uobj, trunc_page(offset), pgs,
893 rw_enter(uobj->vmobjlock, RW_WRITER);
900 KASSERT(pg->uobject->vmobjlock == uobj->vmobjlock);
907 rw_exit(uobj->vmobjlock);
925 rw_exit(uobj->vmobjlock);
931 ubc_direct_release(struct uvm_object *uobj,
934 rw_enter(uobj->vmobjlock, RW_WRITER);
961 rw_exit(uobj->vmobjlock);
980 ubc_uiomove_direct(struct uvm_object *uobj, struct uio *uio, vsize_t todo, int advice,
997 error = ubc_alloc_direct(uobj, off, &bytelen, advice, flags,
1039 ubc_direct_release(uobj, flags, pgs, npages);
1050 ubc_zerorange_direct(struct uvm_object *uobj, off_t off, size_t todo, int flags)
1061 error = ubc_alloc_direct(uobj, off, &bytelen, UVM_ADV_NORMAL,
1071 ubc_direct_release(uobj, flags, pgs, npages);
1085 ubc_purge(struct uvm_object *uobj)
1090 KASSERT(uobj->uo_npages == 0);
1096 if (__predict_true(LIST_EMPTY(&uobj->uo_ubc))) {
1099 rw_enter(ubc_object.uobj.vmobjlock, RW_WRITER);
1100 while ((umap = LIST_FIRST(&uobj->uo_ubc)) != NULL) {
1109 umap->uobj = NULL;
1111 rw_exit(ubc_object.uobj.vmobjlock);
1129 rw_enter(ubc_object.uobj.vmobjlock, RW_READER);
1133 rw_exit(ubc_object.uobj.vmobjlock);