This is a note to let you know that I've just added the patch titled

    sched: Do not account bogus utime

to the 3.9-stable tree which can be found at:
    
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     sched-do-not-account-bogus-utime.patch
and it can be found in the queue-3.9 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <[email protected]> know about it.


>From 772c808a252594692972773f6ee41c289b8e0b2a Mon Sep 17 00:00:00 2001
From: Stanislaw Gruszka <[email protected]>
Date: Tue, 30 Apr 2013 11:35:05 +0200
Subject: sched: Do not account bogus utime

From: Stanislaw Gruszka <[email protected]>

commit 772c808a252594692972773f6ee41c289b8e0b2a upstream.

Due to rounding in scale_stime(), for big numbers, scaled stime
values will grow in chunks. Since rtime grow in jiffies and we
calculate utime like below:

        prev->stime = max(prev->stime, stime);
        prev->utime = max(prev->utime, rtime - prev->stime);

we could erroneously account stime values as utime. To prevent
that only update prev->{u,s}time values when they are smaller
than current rtime.

Signed-off-by: Stanislaw Gruszka <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Cc: [email protected]
Cc: Linus Torvalds <[email protected]>
Cc: Dave Hansen <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Link: 
http://lkml.kernel.org/r/[email protected]
Signed-off-by: Ingo Molnar <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

---
 kernel/sched/cputime.c |    9 +++++++++
 1 file changed, 9 insertions(+)

--- a/kernel/sched/cputime.c
+++ b/kernel/sched/cputime.c
@@ -591,6 +591,14 @@ static void cputime_adjust(struct task_c
         */
        rtime = nsecs_to_cputime(curr->sum_exec_runtime);
 
+       /*
+        * Update userspace visible utime/stime values only if actual execution
+        * time is bigger than already exported. Note that can happen, that we
+        * provided bigger values due to scaling inaccuracy on big numbers.
+        */
+       if (prev->stime + prev->utime >= rtime)
+               goto out;
+
        if (!rtime) {
                stime = 0;
        } else if (!total) {
@@ -608,6 +616,7 @@ static void cputime_adjust(struct task_c
        prev->stime = max(prev->stime, stime);
        prev->utime = max(prev->utime, rtime - prev->stime);
 
+out:
        *ut = prev->utime;
        *st = prev->stime;
 }


Patches currently in stable-queue which might be from [email protected] are

queue-3.9/sched-do-not-account-bogus-utime.patch
queue-3.9/revert-math64-new-div64_u64_rem-helper.patch
queue-3.9/sched-lower-chances-of-cputime-scaling-overflow.patch
queue-3.9/sched-avoid-prev-stime-underflow.patch
queue-3.9/sched-avoid-cputime-scaling-overflow.patch
queue-3.9/math64-new-div64_u64_rem-helper.patch
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to