sched/eevdf: Fix min_deadline heap integrity
Marek and Biju reported instances of:
"EEVDF scheduling fail, picking leftmost"
which Mike correlated with cgroup scheduling and the min_deadline heap
getting corrupted; some trace output confirms:
> And yeah, min_deadline is hosed somehow:
>
> validate_cfs_rq: --- /
> __print_se:
ffff88845cf48080 w: 1024 ve: -
58857638 lag: 870381 vd: -
55861854 vmd: -
66302085 E (11372/tr)
> __print_se:
ffff88810d165800 w: 25 ve: -
80323686 lag:
22336429 vd: -
41496434 vmd: -
66302085 E (-1//autogroup-31)
> __print_se:
ffff888108379000 w: 25 ve: 0 lag: -
57987257 vd:
114632828 vmd:
114632828 N (-1//autogroup-33)
> validate_cfs_rq: min_deadline: -
55861854 avg_vruntime: -
62278313462 / 1074 = -
57987256
Turns out that reweight_entity(), which tries really hard to be fast,
does not do the normal dequeue+update+enqueue pattern but *does* scale
the deadline.
However, it then fails to propagate the updated deadline value up the
heap.
Fixes:
147f3efaa241 ("sched/fair: Implement an EEVDF-like scheduling policy")
Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reported-by: Biju Das <biju.das.jz@bp.renesas.com>
Reported-by: Mike Galbraith <efault@gmx.de>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Tested-by: Biju Das <biju.das.jz@bp.renesas.com>
Tested-by: Mike Galbraith <efault@gmx.de>
Link: https://lkml.kernel.org/r/20231006192445.GE743@noisy.programming.kicks-ass.net