Print this page
patch as-lock-macro-simplification

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/io/mem.c
          +++ new/usr/src/uts/common/io/mem.c
↓ open down ↓ 280 lines elided ↑ open up ↑
 281  281          mutex_exit(&mm_lock);
 282  282          return (error);
 283  283  }
 284  284  
 285  285  static int
 286  286  mmpagelock(struct as *as, caddr_t va)
 287  287  {
 288  288          struct seg *seg;
 289  289          int i;
 290  290  
 291      -        AS_LOCK_ENTER(as, &as->a_lock, RW_READER);
      291 +        AS_LOCK_ENTER(as, RW_READER);
 292  292          seg = as_segat(as, va);
 293  293          i = (seg != NULL)? SEGOP_CAPABLE(seg, S_CAPABILITY_NOMINFLT) : 0;
 294      -        AS_LOCK_EXIT(as, &as->a_lock);
      294 +        AS_LOCK_EXIT(as);
 295  295  
 296  296          return (i);
 297  297  }
 298  298  
 299  299  #ifdef  __sparc
 300  300  
 301  301  #define NEED_LOCK_KVADDR(kva)   mmpagelock(&kas, kva)
 302  302  
 303  303  #else   /* __i386, __amd64 */
 304  304  
↓ open down ↓ 184 lines elided ↑ open up ↑
 489  489                  }
 490  490                  mutex_exit(&pidlock);
 491  491                  if (p == NULL)
 492  492                          return (EIO);
 493  493                  p = sprlock(pid);
 494  494                  if (p == NULL)
 495  495                          return (EIO);
 496  496                  as = p->p_as;
 497  497                  if (as == mem_vtop.m_as) {
 498  498                          mutex_exit(&p->p_lock);
 499      -                        AS_LOCK_ENTER(as, &as->a_lock, RW_READER);
      499 +                        AS_LOCK_ENTER(as, RW_READER);
 500  500                          for (seg = AS_SEGFIRST(as); seg != NULL;
 501  501                              seg = AS_SEGNEXT(as, seg))
 502  502                                  if ((uintptr_t)mem_vtop.m_va -
 503  503                                      (uintptr_t)seg->s_base < seg->s_size)
 504  504                                          break;
 505  505                          if (seg != NULL)
 506  506                                  pfn = hat_getpfnum(as->a_hat, mem_vtop.m_va);
 507      -                        AS_LOCK_EXIT(as, &as->a_lock);
      507 +                        AS_LOCK_EXIT(as);
 508  508                          mutex_enter(&p->p_lock);
 509  509                  }
 510  510                  sprunlock(p);
 511  511          }
 512  512          mem_vtop.m_pfn = pfn;
 513  513          if (pfn == PFN_INVALID)
 514  514                  return (EIO);
 515  515  
 516  516          if (get_udatamodel() == DATAMODEL_NATIVE) {
 517  517                  if (copyout(&mem_vtop, (void *)data, sizeof (mem_vtop_t)))
↓ open down ↓ 537 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX