summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_subr.c
diff options
context:
space:
mode:
authorbde <bde@FreeBSD.org>1999-02-22 16:57:48 +0000
committerbde <bde@FreeBSD.org>1999-02-22 16:57:48 +0000
commitd51135c0c3ce43b173e455e0e5a42cf324e3e282 (patch)
tree66a439581aefbaba2f0a011c5e92e24bcc7ef58a /sys/kern/kern_subr.c
parent4e6745d688eb7cb27f48a71861157be87705f8c1 (diff)
downloadFreeBSD-src-d51135c0c3ce43b173e455e0e5a42cf324e3e282.zip
FreeBSD-src-d51135c0c3ce43b173e455e0e5a42cf324e3e282.tar.gz
Improved scheduling in uiomove(), etc. resched_wanted() is true too
often for it to be a good criterion for switching kernel cpu hogs -- it is true after most wakeups. Use the criterion "has been running for >= 2 quanta" instead.
Diffstat (limited to 'sys/kern/kern_subr.c')
-rw-r--r--sys/kern/kern_subr.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/sys/kern/kern_subr.c b/sys/kern/kern_subr.c
index d8e1f08..7f14488 100644
--- a/sys/kern/kern_subr.c
+++ b/sys/kern/kern_subr.c
@@ -36,11 +36,12 @@
* SUCH DAMAGE.
*
* @(#)kern_subr.c 8.3 (Berkeley) 1/21/94
- * $Id: kern_subr.c,v 1.24 1999/01/10 01:58:24 eivind Exp $
+ * $Id: kern_subr.c,v 1.25 1999/02/02 12:11:01 bde Exp $
*/
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/kernel.h>
#include <sys/proc.h>
#include <sys/malloc.h>
#include <sys/lock.h>
@@ -52,8 +53,6 @@
#include <vm/vm_page.h>
#include <vm/vm_map.h>
-#include <machine/cpu.h>
-
static void uio_yield __P((void));
int
@@ -86,7 +85,7 @@ uiomove(cp, n, uio)
case UIO_USERSPACE:
case UIO_USERISPACE:
- if (resched_wanted())
+ if (ticks - switchticks >= hogticks)
uio_yield();
if (uio->uio_rw == UIO_READ)
error = copyout(cp, iov->iov_base, cnt);
@@ -146,7 +145,7 @@ uiomoveco(cp, n, uio, obj)
case UIO_USERSPACE:
case UIO_USERISPACE:
- if (resched_wanted())
+ if (ticks - switchticks >= hogticks)
uio_yield();
if (uio->uio_rw == UIO_READ) {
if (vfs_ioopt && ((cnt & PAGE_MASK) == 0) &&
@@ -223,7 +222,7 @@ uioread(n, uio, obj, nread)
cnt &= ~PAGE_MASK;
- if (resched_wanted())
+ if (ticks - switchticks >= hogticks)
uio_yield();
error = vm_uiomove(&curproc->p_vmspace->vm_map, obj,
uio->uio_offset, cnt,
@@ -408,6 +407,7 @@ uio_yield()
int s;
p = curproc;
+ p->p_priority = p->p_usrpri;
s = splhigh();
setrunqueue(p);
p->p_stats->p_ru.ru_nivcsw++;
OpenPOWER on IntegriCloud