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;