]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/asm-sparc64/tlb.h
[SPARC64]: Recognize "virtual-console" as input and output console device.
[linux-2.6-omap-h63xx.git] / include / asm-sparc64 / tlb.h
index 5d194eae870c147758544bd26f4872db2cf94306..61c01882b5629db7f665943255fc7574e3ee7c46 100644 (file)
@@ -27,7 +27,6 @@ struct mmu_gather {
        unsigned int need_flush;
        unsigned int fullmm;
        unsigned int tlb_nr;
-       unsigned long freed;
        unsigned long vaddrs[TLB_BATCH_NR];
        struct page *pages[FREE_PTE_NR];
 };
@@ -51,7 +50,6 @@ static inline struct mmu_gather *tlb_gather_mmu(struct mm_struct *mm, unsigned i
        mp->mm = mm;
        mp->pages_nr = num_online_cpus() > 1 ? 0U : ~0U;
        mp->fullmm = full_mm_flush;
-       mp->freed = 0;
 
        return mp;
 }
@@ -60,11 +58,9 @@ static inline struct mmu_gather *tlb_gather_mmu(struct mm_struct *mm, unsigned i
 static inline void tlb_flush_mmu(struct mmu_gather *mp)
 {
        if (mp->need_flush) {
+               free_pages_and_swap_cache(mp->pages, mp->pages_nr);
+               mp->pages_nr = 0;
                mp->need_flush = 0;
-               if (!tlb_fast_mode(mp)) {
-                       free_pages_and_swap_cache(mp->pages, mp->pages_nr);
-                       mp->pages_nr = 0;
-               }
        }
 
 }
@@ -78,21 +74,11 @@ extern void smp_flush_tlb_mm(struct mm_struct *mm);
 
 static inline void tlb_finish_mmu(struct mmu_gather *mp, unsigned long start, unsigned long end)
 {
-       unsigned long freed = mp->freed;
-       struct mm_struct *mm = mp->mm;
-       unsigned long rss = get_mm_counter(mm, rss);
-
-       if (rss < freed)
-               freed = rss;
-       add_mm_counter(mm, rss, -freed);
-
        tlb_flush_mmu(mp);
 
-       if (mp->fullmm) {
-               if (CTX_VALID(mm->context))
-                       do_flush_tlb_mm(mm);
+       if (mp->fullmm)
                mp->fullmm = 0;
-       else
+       else
                flush_tlb_pending();
 
        /* keep the page table cache within bounds */
@@ -103,11 +89,11 @@ static inline void tlb_finish_mmu(struct mmu_gather *mp, unsigned long start, un
 
 static inline void tlb_remove_page(struct mmu_gather *mp, struct page *page)
 {
-       mp->need_flush = 1;
        if (tlb_fast_mode(mp)) {
                free_page_and_swap_cache(page);
                return;
        }
+       mp->need_flush = 1;
        mp->pages[mp->pages_nr++] = page;
        if (mp->pages_nr >= FREE_PTE_NR)
                tlb_flush_mmu(mp);