diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 3e153cf21fe1..73caf93f23c0 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -10443,9 +10443,16 @@ no_move: raw_spin_unlock_irqrestore(&busiest->lock, flags); if (active_balance) { - stop_one_cpu_nowait(cpu_of(busiest), + int ret; + + ret = stop_one_cpu_nowait(cpu_of(busiest), active_load_balance_cpu_stop, busiest, &busiest->active_balance_work); + if (!ret) { + clear_reserved(this_cpu); + busiest->active_balance = 0; + active_balance = 0; + } *continue_balancing = 0; } diff --git a/kernel/sched/walt/walt.c b/kernel/sched/walt/walt.c index c130771c3dad..99e8a0bf78ab 100644 --- a/kernel/sched/walt/walt.c +++ b/kernel/sched/walt/walt.c @@ -500,10 +500,10 @@ void clear_walt_request(int cpu) raw_spin_lock_irqsave(&rq->lock, flags); if (rq->wrq.push_task) { - clear_reserved(rq->push_cpu); push_task = rq->wrq.push_task; rq->wrq.push_task = NULL; } + clear_reserved(rq->push_cpu); rq->active_balance = 0; raw_spin_unlock_irqrestore(&rq->lock, flags); if (push_task)