[patch] tlbflush "improvement"

Randolph Chung <[email protected]>
Newsgroups gmane.linux.ports.hppa
Message-ID <[email protected]>
This patch tries to get rid of our current "blow away the tlb on each 
fork()" behavior in SMP builds. Tested lightly on pa8800. Comments welcome.

I say "improvement" in quotes because I did not see a significant perf 
improvement in kernel build times, but theoretically it should be more 
performant :)

I think we need to do some threading testcases to exercise this 
sufficiently.... any volunteers? :)

randolph

diff --git a/include/asm-parisc/tlbflush.h b/include/asm-parisc/tlbflush.h
index f662e83..2e8c2bd 100644
--- a/include/asm-parisc/tlbflush.h
+++ b/include/asm-parisc/tlbflush.h
@@ -39,21 +39,19 @@ extern void flush_tlb_all_local(void *);
   * etc. do not do that).
   */

-static inline void flush_tlb_mm(struct mm_struct *mm)
+static inline void __flush_tlb_mm(void *mmv)
  {
-       BUG_ON(mm == &init_mm); /* Should never happen */
+       struct mm_struct *mm = (struct mm_struct *)mmv;
+       if (mm == current->active_mm)
+               load_context(mm->context);
+}

-#ifdef CONFIG_SMP
-       flush_tlb_all();
-#else
-       if (mm) {
-               if (mm->context != 0)
-                       free_sid(mm->context);
-               mm->context = alloc_sid();
-               if (mm == current->active_mm)
-                       load_context(mm->context);
-       }
-#endif
+static inline void flush_tlb_mm(struct mm_struct *mm)
+{
+       if (mm->context != 0)
+               free_sid(mm->context);
+       mm->context = alloc_sid();
+       on_each_cpu(__flush_tlb_mm, mm, 1, 1);
  }

  extern __inline__ void flush_tlb_pgtables(struct mm_struct *mm, 
unsigned long s
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.