diff options
author | jhb <jhb@FreeBSD.org> | 2001-01-24 12:23:17 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2001-01-24 12:23:17 +0000 |
commit | c5cc2f8e2621f1d090434a5474a18fae384e1db6 (patch) | |
tree | 646345257354550510bb6b464eec881a00e451ca /sys/vm/vm_glue.c | |
parent | 5927ef8ddc6ff5c5aa7d5b327d9c5577c552d5de (diff) | |
download | FreeBSD-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.
Diffstat (limited to 'sys/vm/vm_glue.c')
-rw-r--r-- | sys/vm/vm_glue.c | 19 |
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); |