Lines Matching defs:ufi
94 * - init the "IN" params in the ufi structure
216 uvmfault_amapcopy(struct uvm_faultinfo *ufi)
224 if (uvmfault_lookup(ufi, true) == false)
231 if (UVM_ET_ISNEEDSCOPY(ufi->entry))
232 amap_copy(ufi->map, ufi->entry, AMAP_COPY_NOWAIT,
233 ufi->orig_rvaddr, ufi->orig_rvaddr + 1);
239 if (UVM_ET_ISNEEDSCOPY(ufi->entry)) {
240 uvmfault_unlockmaps(ufi, true);
249 uvmfault_unlockmaps(ufi, true);
271 uvmfault_anonget(struct uvm_faultinfo *ufi, struct vm_amap *amap,
339 uvmfault_unlockall(ufi, amap, NULL);
345 uvmfault_unlockall(ufi, NULL, NULL);
362 ufi != NULL ? ufi->orig_rvaddr : 0,
363 anon, ufi != NULL ? UVM_FLAG_COLORMATCH : 0);
366 uvmfault_unlockall(ufi, amap, NULL);
377 uvmfault_unlockall(ufi, amap, NULL);
404 locked = uvmfault_relock(ufi);
450 uvmfault_unlockall(ufi, NULL, NULL);
466 uvmfault_unlockall(ufi, NULL, NULL);
513 if (ufi != NULL && amap_lookup(&ufi->entry->aref,
514 ufi->orig_rvaddr - ufi->entry->start) != anon) {
516 uvmfault_unlockall(ufi, amap, NULL);
546 uvmfault_promote(struct uvm_faultinfo *ufi,
552 struct vm_amap *amap = ufi->entry->aref.ar_amap;
602 pg = uvm_pagealloc(NULL, ufi->orig_rvaddr, anon,
622 uvmfault_unlockall(ufi, amap, uobj);
645 pmap_remove(vm_map_pmap(ufi->orig_map), ufi->orig_rvaddr,
646 ufi->orig_rvaddr + PAGE_SIZE);
647 pmap_update(vm_map_pmap(ufi->orig_map));
652 amap_add(&ufi->entry->aref, ufi->orig_rvaddr - ufi->entry->start, anon,
677 uvmfault_update_stats(struct uvm_faultinfo *ufi)
684 map = ufi->orig_map;
836 struct uvm_faultinfo ufi;
889 * init the IN parameters in the ufi
892 ufi.orig_map = orig_map;
893 ufi.orig_rvaddr = trunc_page(vaddr);
894 ufi.orig_size = PAGE_SIZE; /* can't get any smaller than this */
901 error = uvm_fault_check(&ufi, &flt, &anons, maxprot);
905 error = uvm_fault_upper_lookup(&ufi, &flt, anons, pages);
910 error = uvm_fault_upper(&ufi, &flt, anons);
913 ufi.entry->object.uvm_obj;
921 error = uobj->pgops->pgo_fault(&ufi,
946 error = uvm_fault_lower(&ufi, &flt, pages);
978 struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
991 if (uvmfault_lookup(ufi, false) == false) {
992 UVMHIST_LOG(maphist, "<- no mapping @ %#jx", ufi->orig_rvaddr,
999 if ((ufi->map->flags & VM_MAP_PAGEABLE) == 0) {
1001 printf("ufi->map = %p\n", ufi->map);
1002 printf("ufi->orig_map = %p\n", ufi->orig_map);
1003 printf("ufi->orig_rvaddr = %#lx\n", (u_long) ufi->orig_rvaddr);
1004 panic("uvm_fault: (ufi->map->flags & VM_MAP_PAGEABLE) == 0");
1013 ufi->entry->max_protection : ufi->entry->protection;
1017 ufi->entry->protection, flt->access_type, 0, 0);
1018 uvmfault_unlockmaps(ufi, false);
1025 * be more strict than ufi->entry->protection. "wired" means either
1029 flt->enter_prot = ufi->entry->protection;
1030 if (VM_MAPENT_ISWIRED(ufi->entry)) {
1058 if (UVM_ET_ISNEEDSCOPY(ufi->entry)) {
1059 if (flt->cow_now || (ufi->entry->object.uvm_obj == NULL)) {
1064 uvmfault_unlockmaps(ufi, false);
1065 uvmfault_amapcopy(ufi);
1084 amap = ufi->entry->aref.ar_amap; /* upper layer */
1085 uobj = ufi->entry->object.uvm_obj; /* lower layer */
1093 uvmfault_unlockmaps(ufi, false);
1119 KASSERT(uvmadvice[ufi->entry->advice].advice ==
1120 ufi->entry->advice);
1121 nback = MIN(uvmadvice[ufi->entry->advice].nback,
1122 (ufi->orig_rvaddr - ufi->entry->start) >> PAGE_SHIFT);
1123 flt->startva = ufi->orig_rvaddr - (nback << PAGE_SHIFT);
1128 nforw = MIN(uvmadvice[ufi->entry->advice].nforw,
1129 ((ufi->entry->end - ufi->orig_rvaddr) >>
1140 flt->startva = ufi->orig_rvaddr;
1146 const voff_t eoff = flt->startva - ufi->entry->start;
1152 (uintptr_t)ufi->entry, (uintptr_t)amap, (uintptr_t)uobj, 0);
1176 amap_lookups(&ufi->entry->aref, eoff, *ranons, flt->npages);
1197 if (ufi->entry->advice == MADV_SEQUENTIAL && nback != 0) {
1214 uoff = ufi->entry->offset + eoff;
1231 KASSERT(flt->startva <= ufi->orig_rvaddr);
1232 KASSERT(ufi->orig_rvaddr + ufi->orig_size <=
1242 uvm_fault_upper_upgrade(struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
1266 uvmfault_unlockall(ufi, amap, uobj);
1289 struct uvm_faultinfo *ufi, const struct uvm_faultctx *flt,
1292 struct vm_amap *amap = ufi->entry->aref.ar_amap;
1342 !pmap_extract(ufi->orig_map->pmap, currva, NULL)) {
1343 uvm_fault_upper_neighbor(ufi, flt, currva,
1349 pmap_update(ufi->orig_map->pmap);
1357 (ufi->entry->object.uvm_obj && shadowed != false),0,0);
1370 struct uvm_faultinfo *ufi, const struct uvm_faultctx *flt,
1395 (uintptr_t)ufi->orig_map->pmap, currva, (uintptr_t)pg, 0);
1404 (void) pmap_enter(ufi->orig_map->pmap, currva,
1422 struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
1425 struct vm_amap * const amap = ufi->entry->aref.ar_amap;
1456 error = uvmfault_anonget(ufi, amap, anon);
1470 error = uvm_fault_upper_upgrade(ufi, flt, amap, NULL);
1498 error = uvm_fault_upper_loan(ufi, flt, anon, &uobj);
1518 error = uvm_fault_upper_promote(ufi, flt, uobj, anon);
1520 error = uvm_fault_upper_direct(ufi, flt, uobj, anon);
1534 struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
1537 struct vm_amap * const amap = ufi->entry->aref.ar_amap;
1567 error = uvm_fault_upper_upgrade(ufi, flt, amap, NULL);
1575 uvmfault_unlockall(ufi, amap, *ruobj);
1598 struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
1601 struct vm_amap * const amap = ufi->entry->aref.ar_amap;
1610 error = uvm_fault_upper_upgrade(ufi, flt, amap, NULL);
1618 error = uvmfault_promote(ufi, oanon, PGO_DONTCARE, &anon,
1643 return uvm_fault_upper_enter(ufi, flt, uobj, anon, pg, oanon);
1652 struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
1664 return uvm_fault_upper_enter(ufi, flt, uobj, anon, pg, oanon);
1673 struct uvm_faultinfo *ufi, const struct uvm_faultctx *flt,
1677 struct pmap *pmap = ufi->orig_map->pmap;
1678 vaddr_t va = ufi->orig_rvaddr;
1679 struct vm_amap * const amap = ufi->entry->aref.ar_amap;
1736 uvmfault_unlockall(ufi, amap, uobj);
1748 uvm_fault_upper_done(ufi, flt, anon, pg);
1755 uvmfault_unlockall(ufi, amap, uobj);
1765 struct uvm_faultinfo *ufi, const struct uvm_faultctx *flt,
1807 uvm_fault_lower_upgrade(struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
1832 uvmfault_unlockall(ufi, amap, uobj);
1857 struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
1860 struct vm_amap *amap __diagused = ufi->entry->aref.ar_amap;
1861 struct uvm_object *uobj = ufi->entry->object.uvm_obj;
1878 uvm_fault_lower_lookup(ufi, flt, pages);
1914 flt->promote = flt->cow_now && UVM_ET_ISCOPYONWRITE(ufi->entry);
1932 error = uvm_fault_lower_io(ufi, flt, &uobj, &uobjpage);
1962 error = uvm_fault_lower_direct(ufi, flt, uobj, uobjpage);
1964 error = uvm_fault_lower_promote(ufi, flt, uobj, uobjpage);
1979 struct uvm_faultinfo *ufi, const struct uvm_faultctx *flt,
1982 struct uvm_object *uobj = ufi->entry->object.uvm_obj;
1997 ufi->entry->offset + flt->startva - ufi->entry->start,
1999 flt->access_type & MASK(ufi->entry), ufi->entry->advice,
2039 } else if (!pmap_extract(ufi->orig_map->pmap, currva, NULL)) {
2040 uvm_fault_lower_neighbor(ufi, flt, currva, curpg);
2045 pmap_update(ufi->orig_map->pmap);
2055 struct uvm_faultinfo *ufi, const struct uvm_faultctx *flt,
2080 (uintptr_t)ufi->orig_map->pmap, currva, (uintptr_t)pg, 0);
2099 flt->enter_prot & MASK(ufi->entry);
2102 (void) pmap_enter(ufi->orig_map->pmap, currva,
2117 struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
2120 struct vm_amap * const amap = ufi->entry->aref.ar_amap;
2132 uoff = (ufi->orig_rvaddr - ufi->entry->start) + ufi->entry->offset;
2133 access_type = flt->access_type & MASK(ufi->entry);
2134 advice = ufi->entry->advice;
2140 error = uvm_fault_lower_upgrade(ufi, flt, amap, uobj, NULL);
2144 uvmfault_unlockall(ufi, amap, NULL);
2189 locked = uvmfault_relock(ufi);
2214 (locked && amap && amap_lookup(&ufi->entry->aref,
2215 ufi->orig_rvaddr - ufi->entry->start))) {
2217 uvmfault_unlockall(ufi, amap, NULL);
2269 struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
2285 if (UVM_ET_ISCOPYONWRITE(ufi->entry) ||
2298 uvm_fault_lower_direct_loan(ufi, flt, uobj, &pg, &uobjpage);
2302 return uvm_fault_lower_enter(ufi, flt, uobj, NULL, pg);
2314 struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
2318 struct vm_amap * const amap = ufi->entry->aref.ar_amap;
2334 error = uvm_fault_lower_upgrade(ufi, flt, amap, uobj, uobjpage);
2343 uvmfault_unlockall(ufi, amap, uobj);
2378 struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
2381 struct vm_amap * const amap = ufi->entry->aref.ar_amap;
2390 error = uvm_fault_upper_upgrade(ufi, flt, amap, uobj);
2402 error = uvmfault_promote(ufi, NULL, uobjpage, &anon, &flt->anon_spare);
2449 return uvm_fault_lower_enter(ufi, flt, uobj, anon, pg);
2459 struct uvm_faultinfo *ufi, const struct uvm_faultctx *flt,
2463 struct vm_amap * const amap = ufi->entry->aref.ar_amap;
2500 (uintptr_t)ufi->orig_map->pmap, ufi->orig_rvaddr,
2506 UVM_ET_ISCOPYONWRITE(ufi->entry), ufi->entry, ufi->orig_map,
2507 (void *)ufi->orig_rvaddr, pg);
2509 if (pmap_enter(ufi->orig_map->pmap, ufi->orig_rvaddr,
2535 uvmfault_unlockall(ufi, amap, uobj);
2548 uvm_fault_lower_done(ufi, flt, uobj, pg);
2549 pmap_update(ufi->orig_map->pmap);
2550 uvmfault_unlockall(ufi, amap, uobj);
2562 struct uvm_faultinfo *ufi, const struct uvm_faultctx *flt,