mirror of https://gitee.com/openkylin/linux.git
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull cputime fix from Ingo Molnar: "This fixes a longer-standing cputime accounting bug that Stanislaw Gruszka finally managed to track down" * 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: sched/cputime: Do not scale when utime == 0
This commit is contained in:
commit
57d730924d
|
@ -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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue