diff options
author | Gerald Schaefer <gerald.schaefer@de.ibm.com> | 2012-08-30 18:52:54 +0200 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2012-09-03 11:14:06 +0200 |
commit | d5feaea364281a7e9b80b4712e790ab908d61711 (patch) | |
tree | 2ebb9eed3eee9df643e3a3657ce89311b1024930 | |
parent | 5b716ac728bcc01b1f2a7ed6e437196602237c27 (diff) | |
download | blackbird-op-linux-d5feaea364281a7e9b80b4712e790ab908d61711.tar.gz blackbird-op-linux-d5feaea364281a7e9b80b4712e790ab908d61711.zip |
s390/mm: fix deadlock in unmap_hugepage_range()
git commit cd2934a3 moved the flush_tlb_range() within
__unmap_hugepage_range() inside the mm->page_table_lock, which
triggered a deadlock in s390 tlb flushing code. __tlb_flush_mm_cond()
also tries to acquire the mm->page_table_lock, but that is not needed
because all callers already have mm->mmap_sem or mm->page_table_lock,
so it can be safely removed to fix the deadlock.
Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r-- | arch/s390/include/asm/tlbflush.h | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/arch/s390/include/asm/tlbflush.h b/arch/s390/include/asm/tlbflush.h index 9fde315f3a7c..1d8fe2b17ef6 100644 --- a/arch/s390/include/asm/tlbflush.h +++ b/arch/s390/include/asm/tlbflush.h @@ -90,12 +90,10 @@ static inline void __tlb_flush_mm(struct mm_struct * mm) static inline void __tlb_flush_mm_cond(struct mm_struct * mm) { - spin_lock(&mm->page_table_lock); if (mm->context.flush_mm) { __tlb_flush_mm(mm); mm->context.flush_mm = 0; } - spin_unlock(&mm->page_table_lock); } /* |