summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2001-01-24 12:23:17 +0000
committerjhb <jhb@FreeBSD.org>2001-01-24 12:23:17 +0000
commitc5cc2f8e2621f1d090434a5474a18fae384e1db6 (patch)
tree646345257354550510bb6b464eec881a00e451ca
parent5927ef8ddc6ff5c5aa7d5b327d9c5577c552d5de (diff)
downloadFreeBSD-src-c5cc2f8e2621f1d090434a5474a18fae384e1db6.zip
FreeBSD-src-c5cc2f8e2621f1d090434a5474a18fae384e1db6.tar.gz
Argh, I didn't get this test right when I converted it. Break this up
into two separate if's instead of nested if's. Also, reorder things slightly to avoid unnecessary mutex operations.
-rw-r--r--sys/vm/vm_glue.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/sys/vm/vm_glue.c b/sys/vm/vm_glue.c
index 6e6f798..f915403 100644
--- a/sys/vm/vm_glue.c
+++ b/sys/vm/vm_glue.c
@@ -448,20 +448,19 @@ retry:
struct vmspace *vm;
PROC_LOCK(p);
- if (!(p->p_lock == 0 &&
- (p->p_flag & (P_TRACED|P_SYSTEM|P_WEXIT)) == 0)) {
- mtx_enter(&sched_lock, MTX_SPIN);
- if ((p->p_sflag & (PS_INMEM|PS_SWAPPING)) == PS_INMEM) {
- mtx_exit(&sched_lock, MTX_SPIN);
- PROC_UNLOCK(p);
- continue;
- }
- mtx_exit(&sched_lock, MTX_SPIN);
+ if (p->p_lock != 0 ||
+ (p->p_flag & (P_TRACED|P_SYSTEM|P_WEXIT)) != 0) {
+ PROC_UNLOCK(p);
+ continue;
}
vm = p->p_vmspace;
PROC_UNLOCK(p);
-
mtx_enter(&sched_lock, MTX_SPIN);
+ if ((p->p_sflag & (PS_INMEM|PS_SWAPPING)) != PS_INMEM) {
+ mtx_exit(&sched_lock, MTX_SPIN);
+ continue;
+ }
+
switch (p->p_stat) {
default:
mtx_exit(&sched_lock, MTX_SPIN);
OpenPOWER on IntegriCloud