Print this page
patch as-lock-macro-simplification

@@ -549,11 +549,11 @@
         size_t pgsz;
         lgrp_mem_policy_t mpolicy = LGRP_MEM_POLICY_DEFAULT;
         int use_rgn = 0;
         int trok = 0;
 
-        ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as));
 
         if (a->type != MAP_PRIVATE && a->type != MAP_SHARED) {
                 panic("segvn_create type");
                 /*NOTREACHED*/
         }

@@ -1020,11 +1020,11 @@
         struct vpage *vpage2 = svd2->vpage, *nvpage = NULL;
         size_t size, nvpsize;
         pgcnt_t npages1, npages2;
 
         ASSERT(seg1->s_as && seg2->s_as && seg1->s_as == seg2->s_as);
-        ASSERT(AS_WRITE_HELD(seg1->s_as, &seg1->s_as->a_lock));
+        ASSERT(AS_WRITE_HELD(seg1->s_as));
         ASSERT(seg1->s_ops == seg2->s_ops);
 
         if (HAT_IS_REGION_COOKIE_VALID(svd1->rcookie) ||
             HAT_IS_REGION_COOKIE_VALID(svd2->rcookie)) {
                 return (-1);

@@ -1265,11 +1265,11 @@
 
         /*
          * We don't need any segment level locks for "segvn" data
          * since the address space is "write" locked.
          */
-        ASSERT(seg1->s_as && AS_WRITE_HELD(seg1->s_as, &seg1->s_as->a_lock));
+        ASSERT(seg1->s_as && AS_WRITE_HELD(seg1->s_as));
 
         if (HAT_IS_REGION_COOKIE_VALID(svd1->rcookie)) {
                 return (-1);
         }
 

@@ -1386,11 +1386,11 @@
 
         /*
          * We don't need any segment level locks for "segvn" data
          * since the address space is "write" locked.
          */
-        ASSERT(seg2->s_as && AS_WRITE_HELD(seg2->s_as, &seg2->s_as->a_lock));
+        ASSERT(seg2->s_as && AS_WRITE_HELD(seg2->s_as));
 
         if (HAT_IS_REGION_COOKIE_VALID(svd2->rcookie)) {
                 return (-1);
         }
 

@@ -1573,11 +1573,11 @@
         pgcnt_t npages = seg_pages(seg);
         int error = 0;
         size_t len;
         struct anon_map *amp;
 
-        ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as));
         ASSERT(newseg->s_as->a_proc->p_parent == curproc);
 
         /*
          * If segment has anon reserved, reserve more for the new seg.
          * For a MAP_NORESERVE segment swresv will be a count of all the

@@ -1870,11 +1870,11 @@
 
         /*
          * We don't need any segment level locks for "segvn" data
          * since the address space is "write" locked.
          */
-        ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as));
 
         /*
          * Fail the unmap if pages are SOFTLOCKed through this mapping.
          * softlockcnt is protected from change by the as write lock.
          */

@@ -2420,11 +2420,11 @@
 
         /*
          * We don't need any segment level locks for "segvn" data
          * since the address space is "write" locked.
          */
-        ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as));
         ASSERT(svd->tr_state == SEGVN_TR_OFF);
 
         ASSERT(svd->rcookie == HAT_INVALID_REGION_COOKIE);
 
         /*

@@ -2570,11 +2570,11 @@
         u_offset_t offset;
         ulong_t anon_index;
         struct anon_map *amp;
         struct anon *ap = NULL;
 
-        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
         ASSERT(SEGVN_LOCK_HELD(seg->s_as, &svd->lock));
 
         if ((amp = svd->amp) != NULL)
                 anon_index = svd->anon_index + seg_page(seg, addr);
 

@@ -4959,20 +4959,20 @@
         caddr_t lpgaddr, lpgeaddr;
         size_t pgsz;
         anon_sync_obj_t cookie;
         int brkcow = BREAK_COW_SHARE(rw, type, svd->type);
 
-        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
         ASSERT(svd->amp == NULL || svd->rcookie == HAT_INVALID_REGION_COOKIE);
 
         /*
          * First handle the easy stuff
          */
         if (type == F_SOFTUNLOCK) {
                 if (rw == S_READ_NOCOW) {
                         rw = S_READ;
-                        ASSERT(AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock));
+                        ASSERT(AS_WRITE_HELD(seg->s_as));
                 }
                 SEGVN_LOCK_ENTER(seg->s_as, &svd->lock, RW_READER);
                 pgsz = (seg->s_szc == 0) ? PAGESIZE :
                     page_get_pagesize(seg->s_szc);
                 VM_STAT_COND_ADD(pgsz > PAGESIZE, segvnvmstats.fltanpages[16]);

@@ -5113,11 +5113,11 @@
                         if (lpgeaddr - lpgaddr > pgsz) {
                                 demote = 1;
                         }
                 }
 
-                ASSERT(demote || AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock));
+                ASSERT(demote || AS_WRITE_HELD(seg->s_as));
 
                 if (demote) {
                         SEGVN_LOCK_EXIT(seg->s_as, &svd->lock);
                         SEGVN_LOCK_ENTER(seg->s_as, &svd->lock, RW_WRITER);
                         if (seg->s_szc != 0) {

@@ -5167,11 +5167,11 @@
          * only needed for the code above. After
          * that we treat it as S_READ.
          */
         if (rw == S_READ_NOCOW) {
                 ASSERT(type == F_SOFTLOCK);
-                ASSERT(AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock));
+                ASSERT(AS_WRITE_HELD(seg->s_as));
                 rw = S_READ;
         }
 
         amp = svd->amp;
 

@@ -5638,11 +5638,11 @@
         struct segvn_data *svd = (struct segvn_data *)seg->s_data;
         int err;
         struct anon_map *amp;
         vnode_t *vp;
 
-        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
 
         SEGVN_LOCK_ENTER(seg->s_as, &svd->lock, RW_READER);
         if ((amp = svd->amp) != NULL) {
                 struct anon *ap;
 

@@ -5695,11 +5695,11 @@
         size_t pgsz;
         pgcnt_t pgcnt;
         anon_sync_obj_t cookie;
         int unload_done = 0;
 
-        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
 
         if ((svd->maxprot & prot) != prot)
                 return (EACCES);                        /* violated maxprot */
 
         SEGVN_LOCK_ENTER(seg->s_as, &svd->lock, RW_WRITER);

@@ -5772,11 +5772,11 @@
                         /*
                          * If we are holding the as lock as a reader then
                          * we need to return IE_RETRY and let the as
                          * layer drop and re-acquire the lock as a writer.
                          */
-                        if (AS_READ_HELD(seg->s_as, &seg->s_as->a_lock))
+                        if (AS_READ_HELD(seg->s_as))
                                 return (IE_RETRY);
                         VM_STAT_ADD(segvnvmstats.demoterange[1]);
                         if (svd->type == MAP_PRIVATE || svd->vp != NULL) {
                                 err = segvn_demote_range(seg, addr, len,
                                     SDR_END, 0);

@@ -6098,11 +6098,11 @@
         size_t pgsz = page_get_pagesize(szc);
         pgcnt_t pgcnt = page_get_pagecnt(szc);
         int err;
         u_offset_t off = svd->offset + (uintptr_t)(addr - seg->s_base);
 
-        ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as));
         ASSERT(addr >= seg->s_base && eaddr <= seg->s_base + seg->s_size);
 
         if (seg->s_szc == szc || segvn_lpg_disable != 0) {
                 return (0);
         }

@@ -6386,11 +6386,11 @@
         page_t *anon_pl[1 + 1], *pp;
         struct anon *ap, *oldap;
         uint_t prot = svd->prot, vpprot;
         int pageflag = 0;
 
-        ASSERT(AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock) ||
+        ASSERT(AS_WRITE_HELD(seg->s_as) ||
             SEGVN_WRITE_HELD(seg->s_as, &svd->lock));
         ASSERT(svd->softlockcnt == 0);
 
         if (vp == NULL && amp == NULL) {
                 ASSERT(svd->rcookie == HAT_INVALID_REGION_COOKIE);

@@ -6598,11 +6598,11 @@
         struct segvn_data *svd = (struct segvn_data *)seg->s_data;
         struct seg *nseg;
         size_t nsize;
         struct segvn_data *nsvd;
 
-        ASSERT(AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(AS_WRITE_HELD(seg->s_as));
         ASSERT(svd->tr_state == SEGVN_TR_OFF);
 
         ASSERT(addr >= seg->s_base);
         ASSERT(addr <= seg->s_base + seg->s_size);
         ASSERT(svd->rcookie == HAT_INVALID_REGION_COOKIE);

@@ -6753,11 +6753,11 @@
         struct segvn_data *svd = (struct segvn_data *)seg->s_data;
         int err;
         uint_t szc = seg->s_szc;
         uint_t tszcvec;
 
-        ASSERT(AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(AS_WRITE_HELD(seg->s_as));
         ASSERT(svd->tr_state == SEGVN_TR_OFF);
         ASSERT(szc != 0);
         pgsz = page_get_pagesize(szc);
         ASSERT(seg->s_base != addr || seg->s_size != len);
         ASSERT(addr >= seg->s_base && eaddr <= seg->s_base + seg->s_size);

@@ -6882,11 +6882,11 @@
 segvn_checkprot(struct seg *seg, caddr_t addr, size_t len, uint_t prot)
 {
         struct segvn_data *svd = (struct segvn_data *)seg->s_data;
         struct vpage *vp, *evp;
 
-        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
 
         SEGVN_LOCK_ENTER(seg->s_as, &svd->lock, RW_READER);
         /*
          * If segment protection can be used, simply check against them.
          */

@@ -6916,11 +6916,11 @@
 segvn_getprot(struct seg *seg, caddr_t addr, size_t len, uint_t *protv)
 {
         struct segvn_data *svd = (struct segvn_data *)seg->s_data;
         size_t pgno = seg_page(seg, addr + len) - seg_page(seg, addr) + 1;
 
-        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
 
         if (pgno != 0) {
                 SEGVN_LOCK_ENTER(seg->s_as, &svd->lock, RW_READER);
                 if (svd->pageprot == 0) {
                         do {

@@ -6942,22 +6942,22 @@
 static u_offset_t
 segvn_getoffset(struct seg *seg, caddr_t addr)
 {
         struct segvn_data *svd = (struct segvn_data *)seg->s_data;
 
-        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
 
         return (svd->offset + (uintptr_t)(addr - seg->s_base));
 }
 
 /*ARGSUSED*/
 static int
 segvn_gettype(struct seg *seg, caddr_t addr)
 {
         struct segvn_data *svd = (struct segvn_data *)seg->s_data;
 
-        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
 
         return (svd->type | (svd->flags & (MAP_NORESERVE | MAP_TEXT |
             MAP_INITDATA)));
 }
 

@@ -6965,11 +6965,11 @@
 static int
 segvn_getvp(struct seg *seg, caddr_t addr, struct vnode **vpp)
 {
         struct segvn_data *svd = (struct segvn_data *)seg->s_data;
 
-        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
 
         *vpp = svd->vp;
         return (0);
 }
 

@@ -6992,12 +6992,12 @@
         size_t page;
         struct vnode *vp1, *vp2;
         u_offset_t off1, off2;
         struct anon_map *amp;
 
-        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
-        ASSERT(AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock) ||
+        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
+        ASSERT(AS_WRITE_HELD(seg->s_as) ||
             SEGVN_LOCK_HELD(seg->s_as, &svd->lock));
 
         if (addr + delta < seg->s_base ||
             addr + delta >= (seg->s_base + seg->s_size))
                 return (-1);            /* exceeded segment bounds */

@@ -7098,11 +7098,11 @@
         pgcnt_t pgcnt = 0;
         pgcnt_t npages;
         pgcnt_t page;
         ulong_t anon_index;
 
-        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
 
         SEGVN_LOCK_ENTER(seg->s_as, &svd->lock, RW_READER);
         /*
          * Find pages unmapped by our caller and force them
          * out to the virtual swap device.

@@ -7277,11 +7277,11 @@
         ulong_t anon_index;
         struct anon_map *amp;
         struct anon *ap;
         anon_sync_obj_t cookie;
 
-        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
 
         SEGVN_LOCK_ENTER(seg->s_as, &svd->lock, RW_READER);
 
         if (svd->softlockcnt > 0) {
                 /*

@@ -7499,11 +7499,11 @@
         struct anon_map *amp;           /* XXX - for locknest */
         struct anon *ap;
         uint_t attr;
         anon_sync_obj_t cookie;
 
-        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
 
         SEGVN_LOCK_ENTER(seg->s_as, &svd->lock, RW_READER);
         if (svd->amp == NULL && svd->vp == NULL) {
                 SEGVN_LOCK_EXIT(seg->s_as, &svd->lock);
                 bzero(vec, btopr(len));

@@ -7675,11 +7675,11 @@
 
         /*
          * Hold write lock on address space because may split or concatenate
          * segments
          */
-        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
 
         /*
          * If this is a shm, use shm's project and zone, else use
          * project and zone of calling process
          */

@@ -8091,11 +8091,11 @@
         struct seg *next;
         lgrp_mem_policy_t policy;
         struct seg *prev;
         struct vnode *vp;
 
-        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
 
         /*
          * In case of MADV_FREE, we won't be modifying any segment private
          * data structures; so, we only need to grab READER's lock
          */

@@ -8219,12 +8219,11 @@
                                 /*
                                  * For private memory, need writers lock on
                                  * address space because the segment may be
                                  * split or concatenated when changing policy
                                  */
-                                if (AS_READ_HELD(seg->s_as,
-                                    &seg->s_as->a_lock)) {
+                                if (AS_READ_HELD(seg->s_as)) {
                                         SEGVN_LOCK_EXIT(seg->s_as, &svd->lock);
                                         return (IE_RETRY);
                                 }
 
                                 already_set = lgrp_privm_policy_set(policy,

@@ -8370,11 +8369,11 @@
                          * For private memory, need writers lock on
                          * address space because the segment may be
                          * split or concatenated when changing policy
                          */
                         if (svd->type == MAP_PRIVATE &&
-                            AS_READ_HELD(seg->s_as, &seg->s_as->a_lock)) {
+                            AS_READ_HELD(seg->s_as)) {
                                 SEGVN_LOCK_EXIT(seg->s_as, &svd->lock);
                                 return (IE_RETRY);
                         }
 
                         /*

@@ -8556,11 +8555,11 @@
         struct segvn_data *svd = (struct segvn_data *)seg->s_data;
         struct vpage *bvpp, *evpp;
         size_t page;
         int ret = 0;
 
-        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
 
         /* Can't support something we don't know about */
         if (behav != SEGP_INH_ZERO)
                 return (ENOTSUP);
 

@@ -8825,11 +8824,11 @@
 #endif
 
         TRACE_2(TR_FAC_PHYSIO, TR_PHYSIO_SEGVN_START,
             "segvn_pagelock: start seg %p addr %p", seg, addr);
 
-        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
         ASSERT(type == L_PAGELOCK || type == L_PAGEUNLOCK);
 
         SEGVN_LOCK_ENTER(seg->s_as, &svd->lock, RW_READER);
 
         /*

@@ -9447,11 +9446,11 @@
         npages = np = btop(len);
         ASSERT(npages);
 
         ASSERT(svd->vp == NULL && svd->amp != NULL);
         ASSERT(svd->softlockcnt >= npages);
-        ASSERT(async || AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(async || AS_LOCK_HELD(seg->s_as));
 
         pl = pplist;
 
         ASSERT(pl[np] == NOPCACHE_SHWLIST || pl[np] == PCACHE_SHWLIST);
         ASSERT(!async || pl[np] == PCACHE_SHWLIST);

@@ -9725,11 +9724,11 @@
         lgrp_id_t               lgrp_id;
         lgrp_id_t               olid;
         int                     first;
         struct anon_map         *amp;
 
-        ASSERT(AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
+        ASSERT(AS_LOCK_HELD(seg->s_as));
         ASSERT(SEGVN_WRITE_HELD(seg->s_as, &svd->lock));
         ASSERT(p != NULL);
         ASSERT(svd->tr_state == SEGVN_TR_INIT);
         ASSERT(!HAT_IS_REGION_COOKIE_VALID(svd->rcookie));
         ASSERT(svd->flags & MAP_TEXT);

@@ -10006,12 +10005,12 @@
         svntr_t                 *svntrp;
         svntr_t                 **prv_svntrp;
         lgrp_id_t               lgrp_id = svd->tr_policy_info.mem_lgrpid;
         lgrp_id_t               i;
 
-        ASSERT(AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
-        ASSERT(AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock) ||
+        ASSERT(AS_LOCK_HELD(seg->s_as));
+        ASSERT(AS_WRITE_HELD(seg->s_as) ||
             SEGVN_WRITE_HELD(seg->s_as, &svd->lock));
         ASSERT(svd->tr_state == SEGVN_TR_ON);
         ASSERT(!HAT_IS_REGION_COOKIE_VALID(svd->rcookie));
         ASSERT(svd->amp != NULL);
         ASSERT(svd->amp->refcnt >= 1);

@@ -10232,19 +10231,19 @@
 
         /*
          * Use tryenter locking since we are locking as/seg and svntr hash
          * lock in reverse from syncrounous thread order.
          */
-        if (!AS_LOCK_TRYENTER(as, &as->a_lock, RW_READER)) {
+        if (!AS_LOCK_TRYENTER(as, RW_READER)) {
                 SEGVN_TR_ADDSTAT(nolock);
                 if (segvn_lgrp_trthr_migrs_snpsht) {
                         segvn_lgrp_trthr_migrs_snpsht = 0;
                 }
                 return;
         }
         if (!SEGVN_LOCK_TRYENTER(seg->s_as, &svd->lock, RW_WRITER)) {
-                AS_LOCK_EXIT(as, &as->a_lock);
+                AS_LOCK_EXIT(as);
                 SEGVN_TR_ADDSTAT(nolock);
                 if (segvn_lgrp_trthr_migrs_snpsht) {
                         segvn_lgrp_trthr_migrs_snpsht = 0;
                 }
                 return;

@@ -10252,26 +10251,26 @@
         size = seg->s_size;
         if (svntrp->tr_amp[lgrp_id] == NULL) {
                 size_t trmem = atomic_add_long_nv(&segvn_textrepl_bytes, size);
                 if (trmem > segvn_textrepl_max_bytes) {
                         SEGVN_LOCK_EXIT(seg->s_as, &svd->lock);
-                        AS_LOCK_EXIT(as, &as->a_lock);
+                        AS_LOCK_EXIT(as);
                         atomic_add_long(&segvn_textrepl_bytes, -size);
                         SEGVN_TR_ADDSTAT(normem);
                         return;
                 }
                 if (anon_try_resv_zone(size, NULL) == 0) {
                         SEGVN_LOCK_EXIT(seg->s_as, &svd->lock);
-                        AS_LOCK_EXIT(as, &as->a_lock);
+                        AS_LOCK_EXIT(as);
                         atomic_add_long(&segvn_textrepl_bytes, -size);
                         SEGVN_TR_ADDSTAT(noanon);
                         return;
                 }
                 amp = anonmap_alloc(size, size, KM_NOSLEEP);
                 if (amp == NULL) {
                         SEGVN_LOCK_EXIT(seg->s_as, &svd->lock);
-                        AS_LOCK_EXIT(as, &as->a_lock);
+                        AS_LOCK_EXIT(as);
                         atomic_add_long(&segvn_textrepl_bytes, -size);
                         anon_unresv_zone(size, NULL);
                         SEGVN_TR_ADDSTAT(nokmem);
                         return;
                 }

@@ -10299,11 +10298,11 @@
 
         svd->tr_policy_info.mem_lgrpid = lgrp_id;
         svd->amp = svntrp->tr_amp[lgrp_id];
         p->p_tr_lgrpid = NLGRPS_MAX;
         SEGVN_LOCK_EXIT(seg->s_as, &svd->lock);
-        AS_LOCK_EXIT(as, &as->a_lock);
+        AS_LOCK_EXIT(as);
 
         ASSERT(svntrp->tr_refcnt != 0);
         ASSERT(svd->vp == svntrp->tr_vp);
         ASSERT(svd->tr_policy_info.mem_lgrpid == lgrp_id);
         ASSERT(svd->amp != NULL && svd->amp == svntrp->tr_amp[lgrp_id]);