Commit c40dd755 authored by Martin Schwidefsky's avatar Martin Schwidefsky Committed by Linus Torvalds

[PATCH] s390: flushtlb bug.

Don't set cpu_vm_mask if the mm isn't exclusive to the cpu.
parent 36d827d1
...@@ -91,13 +91,15 @@ static inline void global_flush_tlb(void) ...@@ -91,13 +91,15 @@ static inline void global_flush_tlb(void)
static inline void __flush_tlb_mm(struct mm_struct * mm) static inline void __flush_tlb_mm(struct mm_struct * mm)
{ {
if (((atomic_read(&mm->mm_count) != 1) || if (mm->cpu_vm_mask != (1UL << smp_processor_id())) {
(mm->cpu_vm_mask != (1UL << smp_processor_id())))) { /* mm was active on more than one cpu. */
mm->cpu_vm_mask = (1UL << smp_processor_id()); if (mm == current->active_mm &&
atomic_read(&mm->mm_count) == 1)
/* this cpu is the only one using the mm. */
mm->cpu_vm_mask = 1UL << smp_processor_id();
global_flush_tlb(); global_flush_tlb();
} else { } else
local_flush_tlb(); local_flush_tlb();
}
} }
static inline void flush_tlb(void) static inline void flush_tlb(void)
......
...@@ -88,13 +88,15 @@ static inline void global_flush_tlb(void) ...@@ -88,13 +88,15 @@ static inline void global_flush_tlb(void)
static inline void __flush_tlb_mm(struct mm_struct * mm) static inline void __flush_tlb_mm(struct mm_struct * mm)
{ {
if (((atomic_read(&mm->mm_count) != 1) || if (mm->cpu_vm_mask != (1UL << smp_processor_id())) {
(mm->cpu_vm_mask != (1UL << smp_processor_id())))) { /* mm was active on more than one cpu. */
mm->cpu_vm_mask = (1UL << smp_processor_id()); if (mm == current->active_mm &&
atomic_read(&mm->mm_count) == 1)
/* this cpu is the only one using the mm. */
mm->cpu_vm_mask = 1UL << smp_processor_id();
global_flush_tlb(); global_flush_tlb();
} else { } else
local_flush_tlb(); local_flush_tlb();
}
} }
static inline void flush_tlb(void) static inline void flush_tlb(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment