svn commit: r221829 - in head/sys: kern sys ufs/ffs
Matthew D Fleming
mdf at FreeBSD.org
Fri May 13 05:27:59 UTC 2011
Author: mdf
Date: Fri May 13 05:27:58 2011
New Revision: 221829
URL: http://svn.freebsd.org/changeset/base/221829
Log:
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 >
Modified:
head/sys/kern/kern_synch.c
head/sys/kern/kern_sysctl.c
head/sys/kern/vfs_bio.c
head/sys/kern/vfs_mount.c
head/sys/kern/vfs_subr.c
head/sys/kern/vfs_vnops.c
head/sys/sys/priority.h
head/sys/ufs/ffs/ffs_softdep.c
Modified: head/sys/kern/kern_synch.c
==============================================================================
--- head/sys/kern/kern_synch.c Fri May 13 04:54:01 2011 (r221828)
+++ head/sys/kern/kern_synch.c Fri May 13 05:27:58 2011 (r221829)
@@ -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);
Modified: head/sys/kern/kern_sysctl.c
==============================================================================
--- head/sys/kern/kern_sysctl.c Fri May 13 04:54:01 2011 (r221828)
+++ head/sys/kern/kern_sysctl.c Fri May 13 05:27:58 2011 (r221829)
@@ -1590,7 +1590,7 @@ userland_sysctl(struct thread *td, int *
SYSCTL_XUNLOCK();
if (error != EAGAIN)
break;
- kern_yield(curthread->td_user_pri);
+ kern_yield(PRI_USER);
}
CURVNET_RESTORE();
Modified: head/sys/kern/vfs_bio.c
==============================================================================
--- head/sys/kern/vfs_bio.c Fri May 13 04:54:01 2011 (r221828)
+++ head/sys/kern/vfs_bio.c Fri May 13 05:27:58 2011 (r221829)
@@ -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;
Modified: head/sys/kern/vfs_mount.c
==============================================================================
--- head/sys/kern/vfs_mount.c Fri May 13 04:54:01 2011 (r221828)
+++ head/sys/kern/vfs_mount.c Fri May 13 05:27:58 2011 (r221829)
@@ -1644,7 +1644,7 @@ __mnt_vnode_next(struct vnode **mvp, str
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);
Modified: head/sys/kern/vfs_subr.c
==============================================================================
--- head/sys/kern/vfs_subr.c Fri May 13 04:54:01 2011 (r221828)
+++ head/sys/kern/vfs_subr.c Fri May 13 05:27:58 2011 (r221829)
@@ -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);
}
}
Modified: head/sys/kern/vfs_vnops.c
==============================================================================
--- head/sys/kern/vfs_vnops.c Fri May 13 04:54:01 2011 (r221828)
+++ head/sys/kern/vfs_vnops.c Fri May 13 05:27:58 2011 (r221829)
@@ -491,7 +491,7 @@ vn_rdwr_inchunks(rw, vp, base, len, offs
break;
offset += chunk;
base = (char *)base + chunk;
- kern_yield(curthread->td_user_pri);
+ kern_yield(PRI_USER);
} while (len);
if (aresid)
*aresid = len + iaresid;
Modified: head/sys/sys/priority.h
==============================================================================
--- head/sys/sys/priority.h Fri May 13 04:54:01 2011 (r221828)
+++ head/sys/sys/priority.h Fri May 13 05:27:58 2011 (r221829)
@@ -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. */
Modified: head/sys/ufs/ffs/ffs_softdep.c
==============================================================================
--- head/sys/ufs/ffs/ffs_softdep.c Fri May 13 04:54:01 2011 (r221828)
+++ head/sys/ufs/ffs/ffs_softdep.c Fri May 13 05:27:58 2011 (r221829)
@@ -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);
}
More information about the svn-src-head
mailing list