Print this page
patch as-lock-macro-simplification

*** 8368,8378 **** * locked) to be allowed for LONGTERM. */ if (flags & DDI_UMEMLOCK_LONGTERM) { extern struct seg_ops segspt_shmops; extern struct seg_ops segdev_ops; ! AS_LOCK_ENTER(as, &as->a_lock, RW_READER); for (seg = as_segat(as, addr); ; seg = AS_SEGNEXT(as, seg)) { if (seg == NULL || seg->s_base > addr + len) break; if (seg->s_ops == &segdev_ops) continue; --- 8368,8378 ---- * locked) to be allowed for LONGTERM. */ if (flags & DDI_UMEMLOCK_LONGTERM) { extern struct seg_ops segspt_shmops; extern struct seg_ops segdev_ops; ! AS_LOCK_ENTER(as, RW_READER); for (seg = as_segat(as, addr); ; seg = AS_SEGNEXT(as, seg)) { if (seg == NULL || seg->s_base > addr + len) break; if (seg->s_ops == &segdev_ops) continue;
*** 8381,8398 **** ((SEGOP_GETVP(seg, addr, &vp) == 0 && vp != NULL && vp->v_type == VREG) && (SEGOP_GETTYPE(seg, addr) & MAP_SHARED))) { as_pageunlock(as, p->pparray, addr, len, p->s_flags); ! AS_LOCK_EXIT(as, &as->a_lock); umem_decr_devlockmem(p); kmem_free(p, sizeof (struct ddi_umem_cookie)); *cookie = (ddi_umem_cookie_t)NULL; return (EFAULT); } } ! AS_LOCK_EXIT(as, &as->a_lock); } /* Initialize the fields in the ddi_umem_cookie */ p->cvaddr = addr; --- 8381,8398 ---- ((SEGOP_GETVP(seg, addr, &vp) == 0 && vp != NULL && vp->v_type == VREG) && (SEGOP_GETTYPE(seg, addr) & MAP_SHARED))) { as_pageunlock(as, p->pparray, addr, len, p->s_flags); ! AS_LOCK_EXIT(as); umem_decr_devlockmem(p); kmem_free(p, sizeof (struct ddi_umem_cookie)); *cookie = (ddi_umem_cookie_t)NULL; return (EFAULT); } } ! AS_LOCK_EXIT(as); } /* Initialize the fields in the ddi_umem_cookie */ p->cvaddr = addr;