Print this page
patch as-lock-macro-simplification

*** 1482,1502 **** * from /dev/null. The mapping is from * /dev/null if the mapping comes from * segdev and the type is neither MAP_SHARED * nor MAP_PRIVATE. */ ! AS_LOCK_ENTER(as, &as->a_lock, RW_READER); seg = as_findseg(as, myaddr, 0); MOBJ_STAT_ADD(exec_addr_mapped); if (seg && seg->s_ops == &segdev_ops && ((SEGOP_GETTYPE(seg, myaddr) & (MAP_SHARED | MAP_PRIVATE)) == 0) && myaddr >= seg->s_base && myaddr + mylen <= seg->s_base + seg->s_size) { MOBJ_STAT_ADD(exec_addr_devnull); ! AS_LOCK_EXIT(as, &as->a_lock); (void) as_unmap(as, myaddr, mylen); ret = as_map(as, myaddr, mylen, segvn_create, &crargs); mrp[i].mr_flags |= MR_RESV; if (ret) { --- 1482,1502 ---- * from /dev/null. The mapping is from * /dev/null if the mapping comes from * segdev and the type is neither MAP_SHARED * nor MAP_PRIVATE. */ ! AS_LOCK_ENTER(as, RW_READER); seg = as_findseg(as, myaddr, 0); MOBJ_STAT_ADD(exec_addr_mapped); if (seg && seg->s_ops == &segdev_ops && ((SEGOP_GETTYPE(seg, myaddr) & (MAP_SHARED | MAP_PRIVATE)) == 0) && myaddr >= seg->s_base && myaddr + mylen <= seg->s_base + seg->s_size) { MOBJ_STAT_ADD(exec_addr_devnull); ! AS_LOCK_EXIT(as); (void) as_unmap(as, myaddr, mylen); ret = as_map(as, myaddr, mylen, segvn_create, &crargs); mrp[i].mr_flags |= MR_RESV; if (ret) {
*** 1505,1515 **** mmapobj_unmap_exec(mrp, i + 1, start_addr); return (ret); } } else { ! AS_LOCK_EXIT(as, &as->a_lock); as_rangeunlock(as); mmapobj_unmap_exec(mrp, i, start_addr); MOBJ_STAT_ADD(exec_addr_in_use); return (EADDRINUSE); } --- 1505,1515 ---- mmapobj_unmap_exec(mrp, i + 1, start_addr); return (ret); } } else { ! AS_LOCK_EXIT(as); as_rangeunlock(as); mmapobj_unmap_exec(mrp, i, start_addr); MOBJ_STAT_ADD(exec_addr_in_use); return (EADDRINUSE); }