diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 6afda059e882a7ee532a1fe872d2c1b7d92fb733..37526eb8bdf2945e6389952690f817f75c9970a3 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -2016,6 +2016,10 @@ static u64 numa_get_avg_runtime(struct task_struct *p, u64 *period) if (p->last_task_numa_placement) { delta = runtime - p->last_sum_exec_runtime; *period = now - p->last_task_numa_placement; + + /* Avoid backward, and prevent potential divide error */ + if (*period < 0) + *period = 0; } else { delta = p->se.avg.load_sum; *period = LOAD_AVG_MAX;