aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/sched/cputime.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c
index ace34f95e200..99947919e30b 100644
--- a/kernel/sched/cputime.c
+++ b/kernel/sched/cputime.c
@@ -551,10 +551,7 @@ static void cputime_adjust(struct task_cputime *curr,
551 struct cputime *prev, 551 struct cputime *prev,
552 cputime_t *ut, cputime_t *st) 552 cputime_t *ut, cputime_t *st)
553{ 553{
554 cputime_t rtime, stime, utime, total; 554 cputime_t rtime, stime, utime;
555
556 stime = curr->stime;
557 total = stime + curr->utime;
558 555
559 /* 556 /*
560 * Tick based cputime accounting depend on random scheduling 557 * Tick based cputime accounting depend on random scheduling
@@ -576,13 +573,19 @@ static void cputime_adjust(struct task_cputime *curr,
576 if (prev->stime + prev->utime >= rtime) 573 if (prev->stime + prev->utime >= rtime)
577 goto out; 574 goto out;
578 575
579 if (total) { 576 stime = curr->stime;
577 utime = curr->utime;
578
579 if (utime == 0) {
580 stime = rtime;
581 } else if (stime == 0) {
582 utime = rtime;
583 } else {
584 cputime_t total = stime + utime;
585
580 stime = scale_stime((__force u64)stime, 586 stime = scale_stime((__force u64)stime,
581 (__force u64)rtime, (__force u64)total); 587 (__force u64)rtime, (__force u64)total);
582 utime = rtime - stime; 588 utime = rtime - stime;
583 } else {
584 stime = rtime;
585 utime = 0;
586 } 589 }
587 590
588 /* 591 /*