6082 }
6083
6084 head = &rq->migration_queue;
6085
6086 if (list_empty(head)) {
6087 spin_unlock_irq(&rq->lock);
6088 schedule();
6089 set_current_state(TASK_INTERRUPTIBLE);
6090 continue;
6091 }
6092 req = list_entry(head->next, struct migration_req, list);
6093 list_del_init(head->next);
6094
6095 spin_unlock(&rq->lock);
6096 __migrate_task(req->task, cpu, req->dest_cpu);
6097 local_irq_enable();
6098
6099 complete(&req->done);
6100 }
6101 __set_current_state(TASK_RUNNING);
6102 return 0;
6103
6104wait_to_die:
6105
6106 set_current_state(TASK_INTERRUPTIBLE);
6107 while (!kthread_should_stop()) {
6108 schedule();
6109 set_current_state(TASK_INTERRUPTIBLE);
6110 }
6111 __set_current_state(TASK_RUNNING);
6112 return 0;
6113}
6114
6115#ifdef CONFIG_HOTPLUG_CPU
6116
6117static int __migrate_task_irq(struct task_struct *p, int src_cpu, int dest_cpu)
6118{
6119 int ret;
6120
6121 local_irq_disable();
6122 ret = __migrate_task(p, src_cpu, dest_cpu);