Pull scheduler fix from Ingo Molnar: "Fix a regression in the deferrable dl_server code that can cause the dl_server to be stuck" * tag 'sched-urgent-2026-02-01' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: sched/deadline: Fix 'stuck' dl_server
Unified · Split
| @@ -1034,6 +1034,12 @@ static void update_dl_entity(struct sched_dl_entity *dl_se) · 1033 unmodified lines | |||
| 1034 | return; | 1034 | return; |
| 1035 | } | 1035 | } |
| 1036 | 1036 | ||
| 1037 | /* | ||
| 1038 | * When [4] D->A is followed by [1] A->B, dl_defer_running | ||
| 1039 | * needs to be cleared, otherwise it will fail to properly | ||
| 1040 | * start the zero-laxity timer. | ||
| 1041 | */ | ||
| 1042 | dl_se->dl_defer_running = 0; | ||
| 1037 | replenish_dl_new_period(dl_se, rq); | 1043 | replenish_dl_new_period(dl_se, rq); |
| 1038 | } else if (dl_server(dl_se) && dl_se->dl_defer) { | 1044 | } else if (dl_server(dl_se) && dl_se->dl_defer) { |
| 1039 | /* | 1045 | /* |
| @@ -1655,6 +1661,12 @@ void dl_server_update(struct sched_dl_entity *dl_se, s64 delta_exec) · 615 unmodified lines | |||
| 1655 | * dl_server_active = 1; | 1661 | * dl_server_active = 1; |
| 1656 | * enqueue_dl_entity() | 1662 | * enqueue_dl_entity() |
| 1657 | * update_dl_entity(WAKEUP) | 1663 | * update_dl_entity(WAKEUP) |
| 1664 | * if (dl_time_before() || dl_entity_overflow()) | ||
| 1665 | * dl_defer_running = 0; | ||
| 1666 | * replenish_dl_new_period(); | ||
| 1667 | * // fwd period | ||
| 1668 | * dl_throttled = 1; | ||
| 1669 | * dl_defer_armed = 1; | ||
| 1658 | * if (!dl_defer_running) | 1670 | * if (!dl_defer_running) |
| 1659 | * dl_defer_armed = 1; | 1671 | * dl_defer_armed = 1; |
| 1660 | * dl_throttled = 1; | 1672 | * dl_throttled = 1; |