diff options
| -rw-r--r-- | arch/ia64/mm/tlb.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c index 6a4eec9113e8..4dbbca0b5e9c 100644 --- a/arch/ia64/mm/tlb.c +++ b/arch/ia64/mm/tlb.c | |||
| @@ -156,17 +156,19 @@ flush_tlb_range (struct vm_area_struct *vma, unsigned long start, | |||
| 156 | nbits = purge.max_bits; | 156 | nbits = purge.max_bits; |
| 157 | start &= ~((1UL << nbits) - 1); | 157 | start &= ~((1UL << nbits) - 1); |
| 158 | 158 | ||
| 159 | # ifdef CONFIG_SMP | ||
| 160 | platform_global_tlb_purge(mm, start, end, nbits); | ||
| 161 | # else | ||
| 162 | preempt_disable(); | 159 | preempt_disable(); |
| 160 | #ifdef CONFIG_SMP | ||
| 161 | if (mm != current->active_mm || cpus_weight(mm->cpu_vm_mask) != 1) { | ||
| 162 | platform_global_tlb_purge(mm, start, end, nbits); | ||
| 163 | preempt_enable(); | ||
| 164 | return; | ||
| 165 | } | ||
| 166 | #endif | ||
| 163 | do { | 167 | do { |
| 164 | ia64_ptcl(start, (nbits<<2)); | 168 | ia64_ptcl(start, (nbits<<2)); |
| 165 | start += (1UL << nbits); | 169 | start += (1UL << nbits); |
| 166 | } while (start < end); | 170 | } while (start < end); |
| 167 | preempt_enable(); | 171 | preempt_enable(); |
| 168 | # endif | ||
| 169 | |||
| 170 | ia64_srlz_i(); /* srlz.i implies srlz.d */ | 172 | ia64_srlz_i(); /* srlz.i implies srlz.d */ |
| 171 | } | 173 | } |
| 172 | EXPORT_SYMBOL(flush_tlb_range); | 174 | EXPORT_SYMBOL(flush_tlb_range); |
