From f09ffbea51613413c16706c32897ef6cc9b6f935 Mon Sep 17 00:00:00 2001 From: "Chen, Kenneth W" Date: Mon, 6 Mar 2006 14:12:54 -0800 Subject: [PATCH] --- yaml --- r: 24765 b: refs/heads/master c: ce9eed5a98efacb896551d3470d9d46826caaee5 h: refs/heads/master i: 24763: fcabb888243238e108ceeb393b778b5bfc739acf v: v3 --- [refs] | 2 +- trunk/arch/ia64/mm/tlb.c | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 5b01c20cecac..3a523d6f21aa 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5e48521e869de7d904bb5ffe9739258ffa026927 +refs/heads/master: ce9eed5a98efacb896551d3470d9d46826caaee5 diff --git a/trunk/arch/ia64/mm/tlb.c b/trunk/arch/ia64/mm/tlb.c index 6a4eec9113e8..4dbbca0b5e9c 100644 --- a/trunk/arch/ia64/mm/tlb.c +++ b/trunk/arch/ia64/mm/tlb.c @@ -156,17 +156,19 @@ flush_tlb_range (struct vm_area_struct *vma, unsigned long start, nbits = purge.max_bits; start &= ~((1UL << nbits) - 1); -# ifdef CONFIG_SMP - platform_global_tlb_purge(mm, start, end, nbits); -# else preempt_disable(); +#ifdef CONFIG_SMP + if (mm != current->active_mm || cpus_weight(mm->cpu_vm_mask) != 1) { + platform_global_tlb_purge(mm, start, end, nbits); + preempt_enable(); + return; + } +#endif do { ia64_ptcl(start, (nbits<<2)); start += (1UL << nbits); } while (start < end); preempt_enable(); -# endif - ia64_srlz_i(); /* srlz.i implies srlz.d */ } EXPORT_SYMBOL(flush_tlb_range);