Print this page
patch as-lock-macro-simplification

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/os/mmapobj.c
          +++ new/usr/src/uts/common/os/mmapobj.c
↓ open down ↓ 1476 lines elided ↑ open up ↑
1477 1477                          }
1478 1478                  } else {
1479 1479                          /*
1480 1480                           * There is a mapping that exists in the range
1481 1481                           * so check to see if it was a "reservation"
1482 1482                           * from /dev/null.  The mapping is from
1483 1483                           * /dev/null if the mapping comes from
1484 1484                           * segdev and the type is neither MAP_SHARED
1485 1485                           * nor MAP_PRIVATE.
1486 1486                           */
1487      -                        AS_LOCK_ENTER(as, &as->a_lock, RW_READER);
     1487 +                        AS_LOCK_ENTER(as, RW_READER);
1488 1488                          seg = as_findseg(as, myaddr, 0);
1489 1489                          MOBJ_STAT_ADD(exec_addr_mapped);
1490 1490                          if (seg && seg->s_ops == &segdev_ops &&
1491 1491                              ((SEGOP_GETTYPE(seg, myaddr) &
1492 1492                              (MAP_SHARED | MAP_PRIVATE)) == 0) &&
1493 1493                              myaddr >= seg->s_base &&
1494 1494                              myaddr + mylen <=
1495 1495                              seg->s_base + seg->s_size) {
1496 1496                                  MOBJ_STAT_ADD(exec_addr_devnull);
1497      -                                AS_LOCK_EXIT(as, &as->a_lock);
     1497 +                                AS_LOCK_EXIT(as);
1498 1498                                  (void) as_unmap(as, myaddr, mylen);
1499 1499                                  ret = as_map(as, myaddr, mylen, segvn_create,
1500 1500                                      &crargs);
1501 1501                                  mrp[i].mr_flags |= MR_RESV;
1502 1502                                  if (ret) {
1503 1503                                          as_rangeunlock(as);
1504 1504                                          /* Need to remap what we unmapped */
1505 1505                                          mmapobj_unmap_exec(mrp, i + 1,
1506 1506                                              start_addr);
1507 1507                                          return (ret);
1508 1508                                  }
1509 1509                          } else {
1510      -                                AS_LOCK_EXIT(as, &as->a_lock);
     1510 +                                AS_LOCK_EXIT(as);
1511 1511                                  as_rangeunlock(as);
1512 1512                                  mmapobj_unmap_exec(mrp, i, start_addr);
1513 1513                                  MOBJ_STAT_ADD(exec_addr_in_use);
1514 1514                                  return (EADDRINUSE);
1515 1515                          }
1516 1516                  }
1517 1517          }
1518 1518          as_rangeunlock(as);
1519 1519          return (0);
1520 1520  }
↓ open down ↓ 929 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX