|
@@ -1335,12 +1335,16 @@ static int migrate_swap_stop(void *data)
|
|
struct rq *src_rq, *dst_rq;
|
|
struct rq *src_rq, *dst_rq;
|
|
int ret = -EAGAIN;
|
|
int ret = -EAGAIN;
|
|
|
|
|
|
|
|
+ if (!cpu_active(arg->src_cpu) || !cpu_active(arg->dst_cpu))
|
|
|
|
+ return -EAGAIN;
|
|
|
|
+
|
|
src_rq = cpu_rq(arg->src_cpu);
|
|
src_rq = cpu_rq(arg->src_cpu);
|
|
dst_rq = cpu_rq(arg->dst_cpu);
|
|
dst_rq = cpu_rq(arg->dst_cpu);
|
|
|
|
|
|
double_raw_lock(&arg->src_task->pi_lock,
|
|
double_raw_lock(&arg->src_task->pi_lock,
|
|
&arg->dst_task->pi_lock);
|
|
&arg->dst_task->pi_lock);
|
|
double_rq_lock(src_rq, dst_rq);
|
|
double_rq_lock(src_rq, dst_rq);
|
|
|
|
+
|
|
if (task_cpu(arg->dst_task) != arg->dst_cpu)
|
|
if (task_cpu(arg->dst_task) != arg->dst_cpu)
|
|
goto unlock;
|
|
goto unlock;
|
|
|
|
|