|
@@ -49,11 +49,13 @@ void exit_thread_runtime_instr(void)
|
|
{
|
|
{
|
|
struct task_struct *task = current;
|
|
struct task_struct *task = current;
|
|
|
|
|
|
|
|
+ preempt_disable();
|
|
if (!task->thread.ri_cb)
|
|
if (!task->thread.ri_cb)
|
|
return;
|
|
return;
|
|
disable_runtime_instr();
|
|
disable_runtime_instr();
|
|
kfree(task->thread.ri_cb);
|
|
kfree(task->thread.ri_cb);
|
|
task->thread.ri_cb = NULL;
|
|
task->thread.ri_cb = NULL;
|
|
|
|
+ preempt_enable();
|
|
}
|
|
}
|
|
|
|
|
|
SYSCALL_DEFINE1(s390_runtime_instr, int, command)
|
|
SYSCALL_DEFINE1(s390_runtime_instr, int, command)
|
|
@@ -64,9 +66,7 @@ SYSCALL_DEFINE1(s390_runtime_instr, int, command)
|
|
return -EOPNOTSUPP;
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
if (command == S390_RUNTIME_INSTR_STOP) {
|
|
if (command == S390_RUNTIME_INSTR_STOP) {
|
|
- preempt_disable();
|
|
|
|
exit_thread_runtime_instr();
|
|
exit_thread_runtime_instr();
|
|
- preempt_enable();
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|