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]);