Print this page
patch as-lock-macro-simplification

@@ -887,11 +887,11 @@
         if ((p->p_flag & SSYS) || as == &kas) {
                 prunlock(pnp);
                 return (0);
         }
 
-        if (!AS_LOCK_TRYENTER(as, &as->a_lock, RW_WRITER)) {
+        if (!AS_LOCK_TRYENTER(as, RW_WRITER)) {
                 prunlock(pnp);
                 delay(1);
                 goto readmap_common;
         }
         mutex_exit(&p->p_lock);

@@ -906,11 +906,11 @@
         case PR_MAP:
                 error = prgetmap(p, 0, &iolhead);
                 break;
         }
 
-        AS_LOCK_EXIT(as, &as->a_lock);
+        AS_LOCK_EXIT(as);
         mutex_enter(&p->p_lock);
         prunlock(pnp);
 
         error = pr_iol_uiomove_and_free(&iolhead, uiop, error);
 

@@ -2003,11 +2003,11 @@
         if (PROCESS_NOT_32BIT(p)) {
                 prunlock(pnp);
                 return (EOVERFLOW);
         }
 
-        if (!AS_LOCK_TRYENTER(as, &as->a_lock, RW_WRITER)) {
+        if (!AS_LOCK_TRYENTER(as, RW_WRITER)) {
                 prunlock(pnp);
                 delay(1);
                 goto readmap32_common;
         }
         mutex_exit(&p->p_lock);

@@ -2021,11 +2021,11 @@
                 break;
         case PR_MAP:
                 error = prgetmap32(p, 0, &iolhead);
                 break;
         }
-        AS_LOCK_EXIT(as, &as->a_lock);
+        AS_LOCK_EXIT(as);
         mutex_enter(&p->p_lock);
         prunlock(pnp);
 
         error = pr_iol_uiomove_and_free(&iolhead, uiop, error);
 

@@ -2928,30 +2928,30 @@
         case PR_OBJECTDIR:
                 if ((p->p_flag & SSYS) || (as = p->p_as) == &kas)
                         vap->va_size = 2 * PRSDSIZE;
                 else {
                         mutex_exit(&p->p_lock);
-                        AS_LOCK_ENTER(as, &as->a_lock, RW_WRITER);
+                        AS_LOCK_ENTER(as, RW_WRITER);
                         if (as->a_updatedir)
                                 rebuild_objdir(as);
                         vap->va_size = (as->a_sizedir + 2) * PRSDSIZE;
-                        AS_LOCK_EXIT(as, &as->a_lock);
+                        AS_LOCK_EXIT(as);
                         mutex_enter(&p->p_lock);
                 }
                 vap->va_nlink = 2;
                 break;
         case PR_PATHDIR:
                 if ((p->p_flag & SSYS) || (as = p->p_as) == &kas)
                         vap->va_size = (P_FINFO(p)->fi_nfiles + 4) * PRSDSIZE;
                 else {
                         mutex_exit(&p->p_lock);
-                        AS_LOCK_ENTER(as, &as->a_lock, RW_WRITER);
+                        AS_LOCK_ENTER(as, RW_WRITER);
                         if (as->a_updatedir)
                                 rebuild_objdir(as);
                         vap->va_size = (as->a_sizedir + 4 +
                             P_FINFO(p)->fi_nfiles) * PRSDSIZE;
-                        AS_LOCK_EXIT(as, &as->a_lock);
+                        AS_LOCK_EXIT(as);
                         mutex_enter(&p->p_lock);
                 }
                 vap->va_nlink = 2;
                 break;
         case PR_PATH:

@@ -3013,20 +3013,20 @@
         case PR_XMAP:
                 if ((p->p_flag & SSYS) || (as = p->p_as) == &kas)
                         vap->va_size = 0;
                 else {
                         mutex_exit(&p->p_lock);
-                        AS_LOCK_ENTER(as, &as->a_lock, RW_WRITER);
+                        AS_LOCK_ENTER(as, RW_WRITER);
                         if (type == PR_MAP)
                                 vap->va_mtime = as->a_updatetime;
                         if (type == PR_XMAP)
                                 vap->va_size = prnsegs(as, 0) *
                                     PR_OBJSIZE(prxmap32_t, prxmap_t);
                         else
                                 vap->va_size = prnsegs(as, type == PR_RMAP) *
                                     PR_OBJSIZE(prmap32_t, prmap_t);
-                        AS_LOCK_EXIT(as, &as->a_lock);
+                        AS_LOCK_EXIT(as);
                         mutex_enter(&p->p_lock);
                 }
                 break;
         case PR_CRED:
                 mutex_enter(&p->p_crlock);

@@ -3071,34 +3071,34 @@
                          * We can drop p->p_lock before grabbing the
                          * address space lock because p->p_as will not
                          * change while the process is marked P_PR_LOCK.
                          */
                         mutex_exit(&p->p_lock);
-                        AS_LOCK_ENTER(as, &as->a_lock, RW_WRITER);
+                        AS_LOCK_ENTER(as, RW_WRITER);
 #ifdef _LP64
                         vap->va_size = iam32bit?
                             prpdsize32(as) : prpdsize(as);
 #else
                         vap->va_size = prpdsize(as);
 #endif
-                        AS_LOCK_EXIT(as, &as->a_lock);
+                        AS_LOCK_EXIT(as);
                         mutex_enter(&p->p_lock);
                 }
                 break;
         case PR_OPAGEDATA:
                 if ((p->p_flag & SSYS) || (as = p->p_as) == &kas)
                         vap->va_size = 0;
                 else {
                         mutex_exit(&p->p_lock);
-                        AS_LOCK_ENTER(as, &as->a_lock, RW_WRITER);
+                        AS_LOCK_ENTER(as, RW_WRITER);
 #ifdef _LP64
                         vap->va_size = iam32bit?
                             oprpdsize32(as) : oprpdsize(as);
 #else
                         vap->va_size = oprpdsize(as);
 #endif
-                        AS_LOCK_EXIT(as, &as->a_lock);
+                        AS_LOCK_EXIT(as);
                         mutex_enter(&p->p_lock);
                 }
                 break;
         case PR_WATCH:
                 vap->va_size = avl_numnodes(&p->p_warea) *

@@ -3691,11 +3691,11 @@
          * in order to avoid a deadlock with the clock thread.
          * The process will not disappear and its address space
          * will not change because it is marked P_PR_LOCK.
          */
         mutex_exit(&p->p_lock);
-        AS_LOCK_ENTER(as, &as->a_lock, RW_READER);
+        AS_LOCK_ENTER(as, RW_READER);
         if ((seg = AS_SEGFIRST(as)) == NULL) {
                 vp = NULL;
                 goto out;
         }
         if (strcmp(comp, "a.out") == 0) {

@@ -3724,11 +3724,11 @@
         vp = NULL;
 out:
         if (vp != NULL) {
                 VN_HOLD(vp);
         }
-        AS_LOCK_EXIT(as, &as->a_lock);
+        AS_LOCK_EXIT(as);
         mutex_enter(&p->p_lock);
         prunlock(dpnp);
 
         if (vp == NULL)
                 prfreenode(pnp);

@@ -4148,11 +4148,11 @@
                                 vp = p->p_exec;
                                 VN_HOLD(vp);
                                 type = NAME_OBJECT;
                         }
                 } else {
-                        AS_LOCK_ENTER(as, &as->a_lock, RW_READER);
+                        AS_LOCK_ENTER(as, RW_READER);
                         if ((seg = AS_SEGFIRST(as)) != NULL) {
                                 do {
                                         /*
                                          * Manufacture a filename for the
                                          * "object" directory.

@@ -4182,11 +4182,11 @@
                         } else {
                                 VN_HOLD(vp);
                                 type = NAME_OBJECT;
                         }
 
-                        AS_LOCK_EXIT(as, &as->a_lock);
+                        AS_LOCK_EXIT(as);
                 }
         }
 
 
         switch (type) {

@@ -4836,11 +4836,11 @@
         ulong_t nalloc;
         ulong_t nentries;
         int i, j;
         ulong_t nold, nnew;
 
-        ASSERT(AS_WRITE_HELD(as, &as->a_lock));
+        ASSERT(AS_WRITE_HELD(as));
 
         if (as->a_updatedir == 0 && as->a_objectdir != NULL)
                 return;
         as->a_updatedir = 0;
 

@@ -4941,11 +4941,11 @@
  * The only caller is below, in pr_readdir_objectdir().
  */
 static vnode_t *
 obj_entry(struct as *as, int slot)
 {
-        ASSERT(AS_LOCK_HELD(as, &as->a_lock));
+        ASSERT(AS_LOCK_HELD(as));
         if (as->a_objectdir == NULL)
                 return (NULL);
         ASSERT(slot < as->a_sizedir);
         return (as->a_objectdir[slot]);
 }

@@ -5005,11 +5005,11 @@
                  * Set the correct size of the directory just
                  * in case the process has changed it's address
                  * space via mmap/munmap calls.
                  */
                 if (as != NULL) {
-                        AS_LOCK_ENTER(as, &as->a_lock, RW_WRITER);
+                        AS_LOCK_ENTER(as, RW_WRITER);
                         if (as->a_updatedir)
                                 rebuild_objdir(as);
                         objdirsize = as->a_sizedir;
                 }
 

@@ -5023,11 +5023,11 @@
                         vattr.va_mask = AT_FSID | AT_NODEID;
                         n++;
                 }
 
                 if (as != NULL)
-                        AS_LOCK_EXIT(as, &as->a_lock);
+                        AS_LOCK_EXIT(as);
 
                 /*
                  * Stop when all objects have been reported.
                  */
                 if (n >= objdirsize) {

@@ -5297,15 +5297,15 @@
 
         if ((p->p_flag & SSYS) || (as = p->p_as) == &kas) {
                 as = NULL;
                 objdirsize = 0;
         } else {
-                AS_LOCK_ENTER(as, &as->a_lock, RW_WRITER);
+                AS_LOCK_ENTER(as, RW_WRITER);
                 if (as->a_updatedir)
                         rebuild_objdir(as);
                 objdirsize = as->a_sizedir;
-                AS_LOCK_EXIT(as, &as->a_lock);
+                AS_LOCK_EXIT(as);
                 as = NULL;
         }
 
         mutex_enter(&fip->fi_lock);
         if ((p->p_flag & SSYS) || p->p_as == &kas)

@@ -5361,11 +5361,11 @@
                          * The process will not disappear and its address space
                          * will not change because it is marked P_PR_LOCK.
                          */
                         if (as == NULL) {
                                 as = p->p_as;
-                                AS_LOCK_ENTER(as, &as->a_lock, RW_WRITER);
+                                AS_LOCK_ENTER(as, RW_WRITER);
                         }
 
                         if (as->a_updatedir) {
                                 rebuild_objdir(as);
                                 objdirsize = as->a_sizedir;

@@ -5399,15 +5399,15 @@
                 }
                 /*
                  * Drop the address space lock to do the uiomove().
                  */
                 if (as != NULL)
-                        AS_LOCK_EXIT(as, &as->a_lock);
+                        AS_LOCK_EXIT(as);
 
                 error = uiomove((caddr_t)dirent, reclen, UIO_READ, uiop);
                 if (as != NULL)
-                        AS_LOCK_ENTER(as, &as->a_lock, RW_WRITER);
+                        AS_LOCK_ENTER(as, RW_WRITER);
 
                 if (error)
                         break;
         }
 

@@ -5415,11 +5415,11 @@
                 *eofp = (uiop->uio_offset >= (fddirsize + 2) * PRSDSIZE);
 
         if (fip != NULL)
                 mutex_exit(&fip->fi_lock);
         if (as != NULL)
-                AS_LOCK_EXIT(as, &as->a_lock);
+                AS_LOCK_EXIT(as);
         mutex_enter(&p->p_lock);
         prunlock(pnp);
         return (error);
 }