]> Pileus Git - ~andy/linux/blobdiff - kernel/sched/cputime.c
sched/cputime: Do not scale when utime == 0
[~andy/linux] / kernel / sched / cputime.c
index c1d7493825ae515d35e57deab35c8f8c8c2f8c10..5b03f5bebabcdbdc3e438d343d8a80ed3cf26f72 100644 (file)
@@ -551,10 +551,7 @@ static void cputime_adjust(struct task_cputime *curr,
                           struct cputime *prev,
                           cputime_t *ut, cputime_t *st)
 {
-       cputime_t rtime, stime, utime, total;
-
-       stime = curr->stime;
-       total = stime + curr->utime;
+       cputime_t rtime, stime, utime;
 
        /*
         * Tick based cputime accounting depend on random scheduling
@@ -576,13 +573,19 @@ static void cputime_adjust(struct task_cputime *curr,
        if (prev->stime + prev->utime >= rtime)
                goto out;
 
-       if (total) {
+       stime = curr->stime;
+       utime = curr->utime;
+
+       if (utime == 0) {
+               stime = rtime;
+       } else if (stime == 0) {
+               utime = rtime;
+       } else {
+               cputime_t total = stime + utime;
+
                stime = scale_stime((__force u64)stime,
                                    (__force u64)rtime, (__force u64)total);
                utime = rtime - stime;
-       } else {
-               stime = rtime;
-               utime = 0;
        }
 
        /*