diff --git a/kernel/sched.c b/kernel/sched.c index 2e3545f57e770830c4fca6702a64e3e2bca510a1..deb5ac8c12f37c44e71dcc46484149d073430948 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -3728,8 +3728,13 @@ load_balance_newidle(int this_cpu, struct rq *this_rq, struct sched_domain *sd, } double_unlock_balance(this_rq, busiest); + /* + * Should not call ttwu while holding a rq->lock + */ + spin_unlock(&this_rq->lock); if (active_balance) wake_up_process(busiest->migration_thread); + spin_lock(&this_rq->lock); } else sd->nr_balance_failed = 0;