lkml.org 
[lkml]   [1996]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Date
Subjectminor patch for kernel/sched.c
Here's a small patch to change a few things in sched.c. These are not 
bugs in the strict sense, but look at the modifications yourself and
build your own opinion...

Ulrich
This patch to kernel/sched.c changes a few very strange code constructs to
be (hopefully) more understandable. Also added better rounding to nanosleep
function. Some very long string constants in printk have been split into
shorter lines. Added and corrected some comments.

Ulrich Windl <Ulrich.Windl@rz.uni-regensburg.de>

--- sched.c 1996/05/12 18:08:12 1.5
+++ sched.c 1996/05/27 14:54:01 1.6
@@ -230,7 +230,7 @@
* 0: out of time, recalculate counters (but it might still be
* selected)
* +ve: "goodness" value (the larger, the better)
- * +1000: realtime process, select this.
+ * >= +1000: realtime process, select this.
*/
static inline int goodness(struct task_struct * p, struct task_struct * prev, int this_cpu)
{
@@ -1279,6 +1279,7 @@

t.tv_sec = 0;
t.tv_nsec = 0; /* <-- Linus, please fill correct value in here */
+ /* is this ``"number of running processes" * "timeslice"'' ? */
return -ENOSYS; /* and then delete this line. Thanks! */
memcpy_tofs(interval, &t, sizeof(struct timespec));

@@ -1296,7 +1297,7 @@

if (sec > (LONG_MAX / HZ))
return LONG_MAX;
- nsec += 1000000000L / HZ - 1;
+ nsec += 500000000L / HZ; /* round to the nearest jiffy */
nsec /= 1000000000L / HZ;
return HZ * sec + nsec;
}
@@ -1333,20 +1334,21 @@
/*
* Short delay requests up to 2 ms will be handled with
* high precision by a busy wait for all real-time processes.
+ * We might lose up to 500ns when calling udelay(), but we
+ * are closer to the requested delay than with rounding-up.
*/
- udelay((t.tv_nsec + 999) / 1000);
+ udelay((t.tv_nsec + 500) / 1000);
return 0;
}

- expire = timespectojiffies(&t) + (t.tv_sec || t.tv_nsec) + jiffies;
+ expire = timespectojiffies(&t) + jiffies;
current->timeout = expire;
current->state = TASK_INTERRUPTIBLE;
schedule();

if (expire > jiffies) {
if (rmtp) {
- jiffiestotimespec(expire - jiffies -
- (expire > jiffies + 1), &t);
+ jiffiestotimespec(expire - jiffies, &t);
memcpy_tofs(rmtp, &t, sizeof(struct timespec));
}
return -EINTR;
@@ -1376,7 +1378,7 @@
else
printk(" %016lx ", thread_saved_pc(&p->tss));
#endif
- for (free = 1; free < PAGE_SIZE/sizeof(long) ; free++) {
+ for (free = 1; free < PAGE_SIZE/sizeof(long); free++) {
if (((unsigned long *)p->kernel_stack_page)[free])
break;
}
@@ -1399,15 +1401,15 @@
{
int i;

+ printk("\n "
#if ((~0UL) == 0xffffffff)
- printk("\n"
- " free sibling\n");
- printk(" task PC stack pid father child younger older\n");
+ "free sibling\n"
+ " task PC "
#else
- printk("\n"
- " free sibling\n");
- printk(" task PC stack pid father child younger older\n");
+ " free sibling\n"
+ " task PC "
#endif
+ "stack pid father child younger older\n");
for (i=0 ; i<NR_TASKS ; i++)
if (task[i])
show_task(i,task[i]);
\
 
 \ /
  Last update: 2005-03-22 13:37    [W:0.021 / U:0.604 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site