summaryrefslogtreecommitdiffstats
path: root/sys/kern/sched_ule.c
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2003-06-17 10:21:34 +0000
committerjeff <jeff@FreeBSD.org>2003-06-17 10:21:34 +0000
commit85db173ae676a74b59e9688d9d7d314358d40e01 (patch)
treea5a8417b80cf48ef050aa2ca7e54e0e6ac2f4100 /sys/kern/sched_ule.c
parent93123acec520f3937741c5e47b67eb0d9028407a (diff)
downloadFreeBSD-src-85db173ae676a74b59e9688d9d7d314358d40e01.zip
FreeBSD-src-85db173ae676a74b59e9688d9d7d314358d40e01.tar.gz
- Temporarily patch a problem where the interact score could be negative
because the run time exceeds the largest value a signed int can hold. The real solution involves calculating how far we are over the limit. To quickly solve this problem we loop removing 1/5th of the current value until it falls below the limit. The common case requires no passes.
Diffstat (limited to 'sys/kern/sched_ule.c')
-rw-r--r--sys/kern/sched_ule.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/kern/sched_ule.c b/sys/kern/sched_ule.c
index bd208e4..5cbc991 100644
--- a/sys/kern/sched_ule.c
+++ b/sys/kern/sched_ule.c
@@ -627,7 +627,8 @@ sched_slice(struct kse *ke)
static void
sched_interact_update(struct ksegrp *kg)
{
- if ((kg->kg_runtime + kg->kg_slptime) > SCHED_SLP_RUN_MAX) {
+ /* XXX Fixme, use a linear algorithm and not a while loop. */
+ while ((kg->kg_runtime + kg->kg_slptime) > SCHED_SLP_RUN_MAX) {
kg->kg_runtime = (kg->kg_runtime / 5) * 4;
kg->kg_slptime = (kg->kg_slptime / 5) * 4;
}
OpenPOWER on IntegriCloud