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