Print this page
patch as-lock-macro-simplification

*** 200,214 **** /* * Locate segment containing address of interest. */ page = (caddr_t)(uintptr_t)((uintptr_t)addr & PAGEMASK); retrycnt = 0; ! AS_LOCK_ENTER(as, &as->a_lock, RW_WRITER); retry: if ((seg = as_segat(as, page)) == NULL || !page_valid(seg, page)) { ! AS_LOCK_EXIT(as, &as->a_lock); return (ENXIO); } SEGOP_GETPROT(seg, page, 0, &prot); protchanged = 0; --- 200,214 ---- /* * Locate segment containing address of interest. */ page = (caddr_t)(uintptr_t)((uintptr_t)addr & PAGEMASK); retrycnt = 0; ! AS_LOCK_ENTER(as, RW_WRITER); retry: if ((seg = as_segat(as, page)) == NULL || !page_valid(seg, page)) { ! AS_LOCK_EXIT(as); return (ENXIO); } SEGOP_GETPROT(seg, page, 0, &prot); protchanged = 0;
*** 222,232 **** retrycnt++; goto retry; } if (err != 0) { ! AS_LOCK_EXIT(as, &as->a_lock); return (ENXIO); } } /* --- 222,232 ---- retrycnt++; goto retry; } if (err != 0) { ! AS_LOCK_EXIT(as); return (ENXIO); } } /*
*** 245,255 **** rw = S_READ; if (SEGOP_FAULT(as->a_hat, seg, page, PAGESIZE, F_SOFTLOCK, rw)) { if (protchanged) (void) SEGOP_SETPROT(seg, page, PAGESIZE, prot); ! AS_LOCK_EXIT(as, &as->a_lock); return (ENXIO); } CPU_STATS_ADD_K(vm, softlock, 1); /* --- 245,255 ---- rw = S_READ; if (SEGOP_FAULT(as->a_hat, seg, page, PAGESIZE, F_SOFTLOCK, rw)) { if (protchanged) (void) SEGOP_SETPROT(seg, page, PAGESIZE, prot); ! AS_LOCK_EXIT(as); return (ENXIO); } CPU_STATS_ADD_K(vm, softlock, 1); /*
*** 306,316 **** (void) SEGOP_FAULT(as->a_hat, seg, page, PAGESIZE, F_SOFTUNLOCK, rw); if (protchanged) (void) SEGOP_SETPROT(seg, page, PAGESIZE, prot); ! AS_LOCK_EXIT(as, &as->a_lock); return (error); } int --- 306,316 ---- (void) SEGOP_FAULT(as->a_hat, seg, page, PAGESIZE, F_SOFTUNLOCK, rw); if (protchanged) (void) SEGOP_SETPROT(seg, page, PAGESIZE, prot); ! AS_LOCK_EXIT(as); return (error); } int