<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">
From: Con Kolivas &lt;kernel@kolivas.org&gt;

Small error in the just interactive logic has been corrected.

Idle tasks get one higher priority than just interactive so they don't get
swamped under heavy load.

Cosmetic cleanup.



 kernel/sched.c |   31 +++++++++++++++----------------
 1 files changed, 15 insertions(+), 16 deletions(-)

diff -puN kernel/sched.c~o19int kernel/sched.c
--- 25/kernel/sched.c~o19int	2003-08-30 16:01:59.000000000 -0700
+++ 25-akpm/kernel/sched.c	2003-08-30 16:01:59.000000000 -0700
@@ -64,8 +64,8 @@
 /*
  * Some helpers for converting nanosecond timing to jiffy resolution
  */
-#define NS_TO_JIFFIES(TIME)	(TIME / (1000000000 / HZ))
-#define JIFFIES_TO_NS(TIME)	(TIME * (1000000000 / HZ))
+#define NS_TO_JIFFIES(TIME)	((TIME) / (1000000000 / HZ))
+#define JIFFIES_TO_NS(TIME)	((TIME) * (1000000000 / HZ))
 
 /*
  * These are the 'tuning knobs' of the scheduler:
@@ -132,7 +132,8 @@
 	((p)-&gt;prio &lt;= (p)-&gt;static_prio - DELTA(p))
 
 #define JUST_INTERACTIVE_SLEEP(p) \
-	(MAX_SLEEP_AVG - (DELTA(p) * AVG_TIMESLICE))
+	(JIFFIES_TO_NS(MAX_SLEEP_AVG * \
+		(MAX_BONUS / 2 + DELTA((p)) + 1) / MAX_BONUS - 1))
 
 #define HIGH_CREDIT(p) \
 	((p)-&gt;interactive_credit &gt; MAX_SLEEP_AVG)
@@ -382,10 +383,8 @@ static void recalc_task_prio(task_t *p, 
 		 * prevent them suddenly becoming cpu hogs and starving
 		 * other processes.
 		 */
-		if (p-&gt;mm &amp;&amp; sleep_time &gt;
-			JIFFIES_TO_NS(JUST_INTERACTIVE_SLEEP(p)))
-				p-&gt;sleep_avg =
-					JIFFIES_TO_NS(JUST_INTERACTIVE_SLEEP(p));
+		if (p-&gt;mm &amp;&amp; sleep_time &gt;JUST_INTERACTIVE_SLEEP(p))
+			p-&gt;sleep_avg = JUST_INTERACTIVE_SLEEP(p) + 1;
 		else {
 			/*
 			 * The lower the sleep avg a task has the more
@@ -405,16 +404,15 @@ static void recalc_task_prio(task_t *p, 
 			/*
 			 * Non high_credit tasks waking from uninterruptible
 			 * sleep are limited in their sleep_avg rise as they
-			 * are likely to be waiting on I/O
+			 * are likely to be cpu hogs waiting on I/O
 			 */
 			if (p-&gt;activated == -1 &amp;&amp; !HIGH_CREDIT(p) &amp;&amp; p-&gt;mm){
-				if (p-&gt;sleep_avg &gt;=
-					JIFFIES_TO_NS(JUST_INTERACTIVE_SLEEP(p)))
-						sleep_time = 0;
+				if (p-&gt;sleep_avg &gt;= JUST_INTERACTIVE_SLEEP(p))
+					sleep_time = 0;
 				else if (p-&gt;sleep_avg + sleep_time &gt;=
-					JIFFIES_TO_NS(JUST_INTERACTIVE_SLEEP(p))){
+					JUST_INTERACTIVE_SLEEP(p)){
 						p-&gt;sleep_avg =
-							JIFFIES_TO_NS(JUST_INTERACTIVE_SLEEP(p));
+							JUST_INTERACTIVE_SLEEP(p);
 						sleep_time = 0;
 					}
 			}
@@ -431,7 +429,8 @@ static void recalc_task_prio(task_t *p, 
 
 			if (p-&gt;sleep_avg &gt; NS_MAX_SLEEP_AVG){
 				p-&gt;sleep_avg = NS_MAX_SLEEP_AVG;
-				p-&gt;interactive_credit += !(HIGH_CREDIT(p));
+				if (!HIGH_CREDIT(p))
+					p-&gt;interactive_credit++;
 			}
 		}
 	}
@@ -1548,8 +1547,8 @@ switch_tasks:
 	prev-&gt;sleep_avg -= run_time;
 	if ((long)prev-&gt;sleep_avg &lt;= 0){
 		prev-&gt;sleep_avg = 0;
-		prev-&gt;interactive_credit -=
-			!(HIGH_CREDIT(prev) || LOW_CREDIT(prev));
+		if (!(HIGH_CREDIT(prev) || LOW_CREDIT(prev)))
+			prev-&gt;interactive_credit--;
 	}
 	prev-&gt;timestamp = now;
 

_
</pre></body></html>