summaryrefslogtreecommitdiffstats
path: root/sys/dev/hwpmc
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2013-06-05 17:00:10 +0000
committeralc <alc@FreeBSD.org>2013-06-05 17:00:10 +0000
commitb4fae704741d01b4c64b7b2668b5381c67811ccc (patch)
treef830c4874762a4e17862e90abf6836c133a47055 /sys/dev/hwpmc
parent5d26938b1d35cf753994309c70a0ef31b8302288 (diff)
downloadFreeBSD-src-b4fae704741d01b4c64b7b2668b5381c67811ccc.zip
FreeBSD-src-b4fae704741d01b4c64b7b2668b5381c67811ccc.tar.gz
Relax the vm object locking. Use a read lock.
Sponsored by: EMC / Isilon Storage Division
Diffstat (limited to 'sys/dev/hwpmc')
-rw-r--r--sys/dev/hwpmc/hwpmc_mod.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/sys/dev/hwpmc/hwpmc_mod.c b/sys/dev/hwpmc/hwpmc_mod.c
index eec33a3..150c69a 100644
--- a/sys/dev/hwpmc/hwpmc_mod.c
+++ b/sys/dev/hwpmc/hwpmc_mod.c
@@ -1672,7 +1672,7 @@ pmc_log_process_mappings(struct pmc_owner *po, struct proc *p)
}
obj = entry->object.vm_object;
- VM_OBJECT_WLOCK(obj);
+ VM_OBJECT_RLOCK(obj);
/*
* Walk the backing_object list to find the base
@@ -1680,9 +1680,9 @@ pmc_log_process_mappings(struct pmc_owner *po, struct proc *p)
*/
for (lobj = tobj = obj; tobj != NULL; tobj = tobj->backing_object) {
if (tobj != obj)
- VM_OBJECT_WLOCK(tobj);
+ VM_OBJECT_RLOCK(tobj);
if (lobj != obj)
- VM_OBJECT_WUNLOCK(lobj);
+ VM_OBJECT_RUNLOCK(lobj);
lobj = tobj;
}
@@ -1692,14 +1692,14 @@ pmc_log_process_mappings(struct pmc_owner *po, struct proc *p)
if (lobj == NULL) {
PMCDBG(LOG,OPS,2, "hwpmc: lobj unexpectedly NULL! pid=%d "
"vm_map=%p vm_obj=%p\n", p->p_pid, map, obj);
- VM_OBJECT_WUNLOCK(obj);
+ VM_OBJECT_RUNLOCK(obj);
continue;
}
if (lobj->type != OBJT_VNODE || lobj->handle == NULL) {
if (lobj != obj)
- VM_OBJECT_WUNLOCK(lobj);
- VM_OBJECT_WUNLOCK(obj);
+ VM_OBJECT_RUNLOCK(lobj);
+ VM_OBJECT_RUNLOCK(obj);
continue;
}
@@ -1711,8 +1711,8 @@ pmc_log_process_mappings(struct pmc_owner *po, struct proc *p)
if (entry->start == last_end && lobj->handle == last_vp) {
last_end = entry->end;
if (lobj != obj)
- VM_OBJECT_WUNLOCK(lobj);
- VM_OBJECT_WUNLOCK(obj);
+ VM_OBJECT_RUNLOCK(lobj);
+ VM_OBJECT_RUNLOCK(obj);
continue;
}
@@ -1734,9 +1734,9 @@ pmc_log_process_mappings(struct pmc_owner *po, struct proc *p)
vp = lobj->handle;
vref(vp);
if (lobj != obj)
- VM_OBJECT_WUNLOCK(lobj);
+ VM_OBJECT_RUNLOCK(lobj);
- VM_OBJECT_WUNLOCK(obj);
+ VM_OBJECT_RUNLOCK(obj);
freepath = NULL;
pmc_getfilename(vp, &fullpath, &freepath);
OpenPOWER on IntegriCloud