diff options
-rw-r--r-- | arch/s390/mm/fault.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c index a9c11aa57450..72cec9ecd96c 100644 --- a/arch/s390/mm/fault.c +++ b/arch/s390/mm/fault.c | |||
@@ -584,6 +584,8 @@ static void pfault_interrupt(struct ext_code ext_code, | |||
584 | } | 584 | } |
585 | } else { | 585 | } else { |
586 | /* signal bit not set -> a real page is missing. */ | 586 | /* signal bit not set -> a real page is missing. */ |
587 | if (WARN_ON_ONCE(tsk != current)) | ||
588 | goto out; | ||
587 | if (tsk->thread.pfault_wait == 1) { | 589 | if (tsk->thread.pfault_wait == 1) { |
588 | /* Already on the list with a reference: put to sleep */ | 590 | /* Already on the list with a reference: put to sleep */ |
589 | __set_task_state(tsk, TASK_UNINTERRUPTIBLE); | 591 | __set_task_state(tsk, TASK_UNINTERRUPTIBLE); |
@@ -606,6 +608,7 @@ static void pfault_interrupt(struct ext_code ext_code, | |||
606 | set_tsk_need_resched(tsk); | 608 | set_tsk_need_resched(tsk); |
607 | } | 609 | } |
608 | } | 610 | } |
611 | out: | ||
609 | spin_unlock(&pfault_lock); | 612 | spin_unlock(&pfault_lock); |
610 | put_task_struct(tsk); | 613 | put_task_struct(tsk); |
611 | } | 614 | } |