From 3d08a76bbc15511d93dec139ce42ceb6a4746ba1 Mon Sep 17 00:00:00 2001 From: Matthew D Fleming Date: Fri, 13 May 2011 05:27:58 +0000 Subject: Use a name instead of a magic number for kern_yield(9) when the priority should not change. Fetch the td_user_pri under the thread lock. This is probably not necessary but a magic number also seems preferable to knowing the implementation details here. Requested by: Jason Behmer < jason DOT behmer AT isilon DOT com > --- sys/kern/kern_synch.c | 4 +++- sys/kern/kern_sysctl.c | 2 +- sys/kern/vfs_bio.c | 2 +- sys/kern/vfs_mount.c | 2 +- sys/kern/vfs_subr.c | 4 ++-- sys/kern/vfs_vnops.c | 2 +- sys/sys/priority.h | 6 ++++++ sys/ufs/ffs/ffs_softdep.c | 2 +- 8 files changed, 16 insertions(+), 8 deletions(-) (limited to 'sys') diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c index a3e920d043f2..d3aef7648d55 100644 --- a/sys/kern/kern_synch.c +++ b/sys/kern/kern_synch.c @@ -551,7 +551,7 @@ maybe_yield(void) { if (should_yield()) - kern_yield(curthread->td_user_pri); + kern_yield(PRI_USER); } void @@ -562,6 +562,8 @@ kern_yield(int prio) td = curthread; DROP_GIANT(); thread_lock(td); + if (prio == PRI_USER) + prio = td->td_user_pri; if (prio >= 0) sched_prio(td, prio); mi_switch(SW_VOL | SWT_RELINQUISH, NULL); diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c index 0f1e35786c9d..8d2fddec6b0f 100644 --- a/sys/kern/kern_sysctl.c +++ b/sys/kern/kern_sysctl.c @@ -1590,7 +1590,7 @@ userland_sysctl(struct thread *td, int *name, u_int namelen, void *old, SYSCTL_XUNLOCK(); if (error != EAGAIN) break; - kern_yield(curthread->td_user_pri); + kern_yield(PRI_USER); } CURVNET_RESTORE(); diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c index 06e86254046f..0b5e973bc734 100644 --- a/sys/kern/vfs_bio.c +++ b/sys/kern/vfs_bio.c @@ -2234,7 +2234,7 @@ buf_daemon() while (numdirtybuffers > lodirtybuffers) { if (buf_do_flush(NULL) == 0) break; - kern_yield(-1); + kern_yield(PRI_UNCHANGED); } lodirtybuffers = lodirtysave; diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c index 7bdb29cf8b67..2e07cf1c7859 100644 --- a/sys/kern/vfs_mount.c +++ b/sys/kern/vfs_mount.c @@ -1644,7 +1644,7 @@ __mnt_vnode_next(struct vnode **mvp, struct mount *mp) KASSERT((*mvp)->v_mount == mp, ("marker vnode mount list mismatch")); if (should_yield()) { MNT_IUNLOCK(mp); - kern_yield(-1); + kern_yield(PRI_UNCHANGED); MNT_ILOCK(mp); } vp = TAILQ_NEXT(*mvp, v_nmntvnodes); diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index dead54648dc9..741061d639ef 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -718,7 +718,7 @@ next_iter: continue; MNT_IUNLOCK(mp); yield: - kern_yield(-1); + kern_yield(PRI_UNCHANGED); relock_mnt: MNT_ILOCK(mp); } @@ -831,7 +831,7 @@ vnlru_proc(void) vnlru_nowhere++; tsleep(vnlruproc, PPAUSE, "vlrup", hz * 3); } else - kern_yield(-1); + kern_yield(PRI_UNCHANGED); } } diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index 7b5cad1f04fd..e8bcc91cb969 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -491,7 +491,7 @@ vn_rdwr_inchunks(rw, vp, base, len, offset, segflg, ioflg, active_cred, break; offset += chunk; base = (char *)base + chunk; - kern_yield(curthread->td_user_pri); + kern_yield(PRI_USER); } while (len); if (aresid) *aresid = len + iaresid; diff --git a/sys/sys/priority.h b/sys/sys/priority.h index 8ada2db11e20..6548a35c9526 100644 --- a/sys/sys/priority.h +++ b/sys/sys/priority.h @@ -117,6 +117,12 @@ #define PRI_MIN_IDLE (224) #define PRI_MAX_IDLE (PRI_MAX) +#ifdef _KERNEL +/* Other arguments for kern_yield(9). */ +#define PRI_USER -2 /* Change to current user priority. */ +#define PRI_UNCHANGED -1 /* Do not change priority. */ +#endif + struct priority { u_char pri_class; /* Scheduling class. */ u_char pri_level; /* Normal priority level. */ diff --git a/sys/ufs/ffs/ffs_softdep.c b/sys/ufs/ffs/ffs_softdep.c index a6d444158b15..a7ae484fcb1a 100644 --- a/sys/ufs/ffs/ffs_softdep.c +++ b/sys/ufs/ffs/ffs_softdep.c @@ -1412,7 +1412,7 @@ softdep_process_worklist(mp, full) */ if (should_yield()) { FREE_LOCK(&lk); - kern_yield(-1); + kern_yield(PRI_UNCHANGED); bwillwrite(); ACQUIRE_LOCK(&lk); } -- cgit v1.2.3