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 | 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 | 1043 | replenish_dl_new_period(dl_se, rq); |
| 1038 | 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 | 1661 | * dl_server_active = 1; |
| 1656 | 1662 | * enqueue_dl_entity() |
| 1657 | 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 | 1670 | * if (!dl_defer_running) |
| 1659 | 1671 | * dl_defer_armed = 1; |
| 1660 | 1672 | * dl_throttled = 1; |