From d51135c0c3ce43b173e455e0e5a42cf324e3e282 Mon Sep 17 00:00:00 2001 From: bde Date: Mon, 22 Feb 1999 16:57:48 +0000 Subject: 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. --- sys/kern/kern_subr.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'sys/kern/kern_subr.c') 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 #include +#include #include #include #include @@ -52,8 +53,6 @@ #include #include -#include - 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++; -- cgit v1.1