Print this page
patch as-lock-macro-simplification

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/os/fork.c
          +++ new/usr/src/uts/common/os/fork.c
↓ open down ↓ 223 lines elided ↑ open up ↑
 224  224          /*
 225  225           * Assign an address space to child
 226  226           */
 227  227          if (isvfork) {
 228  228                  /*
 229  229                   * Clear any watched areas and remember the
 230  230                   * watched pages for restoring in vfwait().
 231  231                   */
 232  232                  as = p->p_as;
 233  233                  if (avl_numnodes(&as->a_wpage) != 0) {
 234      -                        AS_LOCK_ENTER(as, &as->a_lock, RW_WRITER);
      234 +                        AS_LOCK_ENTER(as, RW_WRITER);
 235  235                          as_clearwatch(as);
 236  236                          p->p_wpage = as->a_wpage;
 237  237                          avl_create(&as->a_wpage, wp_compare,
 238  238                              sizeof (struct watched_page),
 239  239                              offsetof(struct watched_page, wp_link));
 240      -                        AS_LOCK_EXIT(as, &as->a_lock);
      240 +                        AS_LOCK_EXIT(as);
 241  241                  }
 242  242                  cp->p_as = as;
 243  243                  cp->p_flag |= SVFORK;
 244  244  
 245  245                  /*
 246  246                   * Use the parent's shm segment list information for
 247  247                   * the child as it uses its address space till it execs.
 248  248                   */
 249  249                  cp->p_segacct = p->p_segacct;
 250  250          } else {
↓ open down ↓ 334 lines elided ↑ open up ↑
 585  585                  ASSERT(MUTEX_NOT_HELD(&pidlock));
 586  586          }
 587  587  
 588  588          return (r.r_vals);
 589  589  
 590  590  forklwperr:
 591  591          if (isvfork) {
 592  592                  if (avl_numnodes(&p->p_wpage) != 0) {
 593  593                          /* restore watchpoints to parent */
 594  594                          as = p->p_as;
 595      -                        AS_LOCK_ENTER(as, &as->a_lock, RW_WRITER);
      595 +                        AS_LOCK_ENTER(as, RW_WRITER);
 596  596                          as->a_wpage = p->p_wpage;
 597  597                          avl_create(&p->p_wpage, wp_compare,
 598  598                              sizeof (struct watched_page),
 599  599                              offsetof(struct watched_page, wp_link));
 600  600                          as_setwatch(as);
 601      -                        AS_LOCK_EXIT(as, &as->a_lock);
      601 +                        AS_LOCK_EXIT(as);
 602  602                  }
 603  603          } else {
 604  604                  if (cp->p_segacct)
 605  605                          shmexit(cp);
 606  606                  as = cp->p_as;
 607  607                  cp->p_as = &kas;
 608  608                  as_free(as);
 609  609          }
 610  610  
 611  611          if (cp->p_lwpdir) {
↓ open down ↓ 831 lines elided ↑ open up ↑
1443 1443                  if (signalled)
1444 1444                          cv_wait(&pp->p_cv, &pp->p_lock);
1445 1445                  else
1446 1446                          signalled = !cv_wait_sig(&pp->p_cv, &pp->p_lock);
1447 1447                  mutex_exit(&pp->p_lock);
1448 1448          }
1449 1449  
1450 1450          /* restore watchpoints to parent */
1451 1451          if (pr_watch_active(pp)) {
1452 1452                  struct as *as = pp->p_as;
1453      -                AS_LOCK_ENTER(as, &as->a_lock, RW_WRITER);
     1453 +                AS_LOCK_ENTER(as, RW_WRITER);
1454 1454                  as_setwatch(as);
1455      -                AS_LOCK_EXIT(as, &as->a_lock);
     1455 +                AS_LOCK_EXIT(as);
1456 1456          }
1457 1457  
1458 1458          mutex_enter(&pp->p_lock);
1459 1459          prbarrier(pp);  /* barrier against /proc locking */
1460 1460          continuelwps(pp);
1461 1461          mutex_exit(&pp->p_lock);
1462 1462  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX