summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authormdf <mdf@FreeBSD.org>2011-05-13 05:27:58 +0000
committermdf <mdf@FreeBSD.org>2011-05-13 05:27:58 +0000
commitbbbc4c545502c531d59efe43f9b7bde9b9a92979 (patch)
treeadb29eb7ec0b83c1b5131762d1a0bd2a78471e17 /sys/kern
parent224bed0ec43f4c221ce29acc84da51964f83f818 (diff)
downloadFreeBSD-src-bbbc4c545502c531d59efe43f9b7bde9b9a92979.zip
FreeBSD-src-bbbc4c545502c531d59efe43f9b7bde9b9a92979.tar.gz
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 >
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/kern_synch.c4
-rw-r--r--sys/kern/kern_sysctl.c2
-rw-r--r--sys/kern/vfs_bio.c2
-rw-r--r--sys/kern/vfs_mount.c2
-rw-r--r--sys/kern/vfs_subr.c4
-rw-r--r--sys/kern/vfs_vnops.c2
6 files changed, 9 insertions, 7 deletions
diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c
index a3e920d..d3aef76 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 0f1e357..8d2fdde 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 06e8625..0b5e973 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 7bdb29c..2e07cf1 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 dead546..741061d 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 7b5cad1..e8bcc91 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;
OpenPOWER on IntegriCloud