Print this page
patch as-lock-macro-simplification
*** 167,184 ****
/*
* Find the segment we want to mess with, then add
* the mfn range to the segment.
*/
! AS_LOCK_ENTER(as, &as->a_lock, RW_READER);
if ((seg = as_findseg(as, addr, 0)) == NULL ||
addr + mmu_ptob(mme->npages) > seg->s_base + seg->s_size)
error = EINVAL;
else
error = segmf_add_mfns(seg, addr,
mme->mfn, mme->npages, mmc->dom);
! AS_LOCK_EXIT(as, &as->a_lock);
if (error != 0)
break;
}
--- 167,184 ----
/*
* Find the segment we want to mess with, then add
* the mfn range to the segment.
*/
! AS_LOCK_ENTER(as, RW_READER);
if ((seg = as_findseg(as, addr, 0)) == NULL ||
addr + mmu_ptob(mme->npages) > seg->s_base + seg->s_size)
error = EINVAL;
else
error = segmf_add_mfns(seg, addr,
mme->mfn, mme->npages, mmc->dom);
! AS_LOCK_EXIT(as);
if (error != 0)
break;
}
*** 217,227 ****
DTRACE_XPV3(mmapbatch__start, domid_t, mmb->dom, int, mmb->num,
caddr_t, mmb->addr);
addr = (caddr_t)mmb->addr;
! AS_LOCK_ENTER(as, &as->a_lock, RW_READER);
if ((seg = as_findseg(as, addr, 0)) == NULL ||
addr + ptob(mmb->num) > seg->s_base + seg->s_size) {
error = EINVAL;
goto done;
}
--- 217,227 ----
DTRACE_XPV3(mmapbatch__start, domid_t, mmb->dom, int, mmb->num,
caddr_t, mmb->addr);
addr = (caddr_t)mmb->addr;
! AS_LOCK_ENTER(as, RW_READER);
if ((seg = as_findseg(as, addr, 0)) == NULL ||
addr + ptob(mmb->num) > seg->s_base + seg->s_size) {
error = EINVAL;
goto done;
}
*** 258,268 ****
break;
}
}
done:
! AS_LOCK_EXIT(as, &as->a_lock);
DTRACE_XPV3(mmapbatch__end, int, error, struct seg *, seg, caddr_t,
mmb->addr);
return (error);
--- 258,268 ----
break;
}
}
done:
! AS_LOCK_EXIT(as);
DTRACE_XPV3(mmapbatch__end, int, error, struct seg *, seg, caddr_t,
mmb->addr);
return (error);