mirror of https://github.com/torvalds/linux.git
- Make sure the check for lost pelt idle time is done unconditionally to
have correct lost idle time accounting - Stop the deadline server task before a CPU goes offline -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEzv7L6UO9uDPlPSfHEsHwGGHeVUoFAmj0yvsACgkQEsHwGGHe VUqiYRAAncYon7a++87nuCHIw2ktAcjn4PJTz0F1VGw9ZvcbWThUhNoA17jd4uOz XCzSH1rnHnlz359cJIzFwgVYjkBIaqT8GBN0al9ODra37laZCo89bKLmOeAlH81H 1xJXrDwn7U8dYBjgf6E6OGCdAx40kspCBxmpxrFW1VrGDvfNjEAKezm5GWeSED0Z umA93dBr82i4IvfARUkK8s35ctHyx+o+7lCvCSsKSJgM02WWrKqAA/lv6jFjIgdE 0UuYJv+5A2e1Iog2KNSbvSPn23VaMnsZtvXfJoRLFHEsNTiL9NliTnwrOY6xx0Z8 9+GUeWsbobKwcKSk4dctOh0g/4afNbxWe2aAPmScHJNHtXHSeejps+zy4xFCLTZn 2muHCdZ2zo6YSL+og4TQax+FnLYnGUtPFDOQYsNxv/Cp1H+cbgvG5Qp08XXt8Tfl Mt82g25GKklc28AN5Ui7FKTFmV2K363pV04YVZjXOwmxwiEYbwKw8gKfxi7CRW7S fl4nW6Kp8BFtJQxc/RCXDIiX3h0wRlTOmF5FzyFYxgdsmO5AdGqS9tqknLrV2NlH JVtj7alnrmCU34LwtTVfCvYQZiNd4IN+B6/htsL3AzrcLnqJz4O/T/Eyv9UL4yUs yvQuO+yStCyk0BFYaGM3/E0xp87NYjaLiHnpM2jia3DT3UT1t7Q= =uqJW -----END PGP SIGNATURE----- Merge tag 'sched_urgent_for_v6.18_rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip Pull scheduler fixes from Borislav Petkov: - Make sure the check for lost pelt idle time is done unconditionally to have correct lost idle time accounting - Stop the deadline server task before a CPU goes offline * tag 'sched_urgent_for_v6.18_rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: sched/fair: Fix pelt lost idle time detection sched/deadline: Stop dl_server before CPU goes offline
This commit is contained in:
commit
d9043c79ba
|
|
@ -8571,10 +8571,12 @@ int sched_cpu_dying(unsigned int cpu)
|
|||
sched_tick_stop(cpu);
|
||||
|
||||
rq_lock_irqsave(rq, &rf);
|
||||
update_rq_clock(rq);
|
||||
if (rq->nr_running != 1 || rq_has_pinned_tasks(rq)) {
|
||||
WARN(true, "Dying CPU not properly vacated!");
|
||||
dump_rq_tasks(rq, KERN_WARNING);
|
||||
}
|
||||
dl_server_stop(&rq->fair_server);
|
||||
rq_unlock_irqrestore(rq, &rf);
|
||||
|
||||
calc_load_migrate(rq);
|
||||
|
|
|
|||
|
|
@ -1582,6 +1582,9 @@ void dl_server_start(struct sched_dl_entity *dl_se)
|
|||
if (!dl_server(dl_se) || dl_se->dl_server_active)
|
||||
return;
|
||||
|
||||
if (WARN_ON_ONCE(!cpu_online(cpu_of(rq))))
|
||||
return;
|
||||
|
||||
dl_se->dl_server_active = 1;
|
||||
enqueue_dl_entity(dl_se, ENQUEUE_WAKEUP);
|
||||
if (!dl_task(dl_se->rq->curr) || dl_entity_preempt(dl_se, &rq->curr->dl))
|
||||
|
|
|
|||
|
|
@ -8920,21 +8920,21 @@ pick_next_task_fair(struct rq *rq, struct task_struct *prev, struct rq_flags *rf
|
|||
return p;
|
||||
|
||||
idle:
|
||||
if (!rf)
|
||||
return NULL;
|
||||
|
||||
if (rf) {
|
||||
new_tasks = sched_balance_newidle(rq, rf);
|
||||
|
||||
/*
|
||||
* Because sched_balance_newidle() releases (and re-acquires) rq->lock, it is
|
||||
* possible for any higher priority task to appear. In that case we
|
||||
* must re-start the pick_next_entity() loop.
|
||||
* Because sched_balance_newidle() releases (and re-acquires)
|
||||
* rq->lock, it is possible for any higher priority task to
|
||||
* appear. In that case we must re-start the pick_next_entity()
|
||||
* loop.
|
||||
*/
|
||||
if (new_tasks < 0)
|
||||
return RETRY_TASK;
|
||||
|
||||
if (new_tasks > 0)
|
||||
goto again;
|
||||
}
|
||||
|
||||
/*
|
||||
* rq is about to be idle, check if we need to update the
|
||||
|
|
|
|||
Loading…
Reference in New Issue