diff options
| author | Vincent Guittot <vincent.guittot@linaro.org> | 2023-03-17 17:08:10 +0100 |
|---|---|---|
| committer | Peter Zijlstra <peterz@infradead.org> | 2023-03-21 14:43:04 +0100 |
| commit | a53ce18cacb477dd0513c607f187d16f0fa96f71 (patch) | |
| tree | cbd0e5bf188e6a8f8a78d8159926149874b80b33 /kernel/sched/core.c | |
| parent | e8d018dd0257f744ca50a729e3d042cf2ec9da65 (diff) | |
| download | linux-a53ce18cacb477dd0513c607f187d16f0fa96f71.tar.gz linux-a53ce18cacb477dd0513c607f187d16f0fa96f71.tar.bz2 linux-a53ce18cacb477dd0513c607f187d16f0fa96f71.zip | |
sched/fair: Sanitize vruntime of entity being migrated
Commit 829c1651e9c4 ("sched/fair: sanitize vruntime of entity being placed")
fixes an overflowing bug, but ignore a case that se->exec_start is reset
after a migration.
For fixing this case, we delay the reset of se->exec_start after
placing the entity which se->exec_start to detect long sleeping task.
In order to take into account a possible divergence between the clock_task
of 2 rqs, we increase the threshold to around 104 days.
Fixes: 829c1651e9c4 ("sched/fair: sanitize vruntime of entity being placed")
Originally-by: Zhang Qiao <zhangqiao22@huawei.com>
Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Tested-by: Zhang Qiao <zhangqiao22@huawei.com>
Link: https://lore.kernel.org/r/20230317160810.107988-1-vincent.guittot@linaro.org
Diffstat (limited to 'kernel/sched/core.c')
| -rw-r--r-- | kernel/sched/core.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 488655f2319f..0d18c3969f90 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -2084,6 +2084,9 @@ static inline void dequeue_task(struct rq *rq, struct task_struct *p, int flags) void activate_task(struct rq *rq, struct task_struct *p, int flags) { + if (task_on_rq_migrating(p)) + flags |= ENQUEUE_MIGRATED; + enqueue_task(rq, p, flags); p->on_rq = TASK_ON_RQ_QUEUED; |
