diff --git a/kernel/sched.c b/kernel/sched.c
index b7480fb5c3dc21a7bf6513a978cf0ed2e8c19a8f..e4bb1dd7b308fce6f47e736b70425f4bc3482c0a 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -6587,7 +6587,9 @@ migration_call(struct notifier_block *nfb, unsigned long action, void *hcpu)
 			req = list_entry(rq->migration_queue.next,
 					 struct migration_req, list);
 			list_del_init(&req->list);
+			spin_unlock_irq(&rq->lock);
 			complete(&req->done);
+			spin_lock_irq(&rq->lock);
 		}
 		spin_unlock_irq(&rq->lock);
 		break;