diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 5a73b1e7a..8ad5275f0 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -1737,6 +1737,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 time going backwards, prevent potential divide error: */ + if (unlikely((s64)*period < 0)) + *period = 0; } else { delta = p->se.avg.load_sum / p->se.load.weight; *period = LOAD_AVG_MAX;