提交 d49f47f8 编写于 作者: H Heiko Carstens 提交者: Martin Schwidefsky

s390/pfault: add sanity check

If the task that was found on an initial interrupt doesn't match the
current task execute a WARN_ON_ONCE() and don't put the task to sleep.

When this happened something went wrong between the interface of the
hypervisor and the kernel. In such a case keep the tasks alive to
avoid a hanging system.
Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
上级 0a16ba78
......@@ -584,6 +584,8 @@ static void pfault_interrupt(struct ext_code ext_code,
}
} else {
/* signal bit not set -> a real page is missing. */
if (WARN_ON_ONCE(tsk != current))
goto out;
if (tsk->thread.pfault_wait == 1) {
/* Already on the list with a reference: put to sleep */
__set_task_state(tsk, TASK_UNINTERRUPTIBLE);
......@@ -606,6 +608,7 @@ static void pfault_interrupt(struct ext_code ext_code,
set_tsk_need_resched(tsk);
}
}
out:
spin_unlock(&pfault_lock);
put_task_struct(tsk);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册