[PATCH] mm: tlb_is_full_mm was obscure
authorHugh Dickins <hugh@veritas.com>
Sun, 30 Oct 2005 01:16:02 +0000 (18:16 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Sun, 30 Oct 2005 04:40:37 +0000 (21:40 -0700)
tlb_is_full_mm?  What does that mean?  The TLB is full?  No, it means that the
mm's last user has gone and the whole mm is being torn down.  And it's an
inline function because sparc64 uses a different (slightly better)
"tlb_frozen" name for the flag others call "fullmm".

And now the ptep_get_and_clear_full macro used in zap_pte_range refers
directly to tlb->fullmm, which would be wrong for sparc64.  Rather than
correct that, I'd prefer to scrap tlb_is_full_mm altogether, and change
sparc64 to just use the same poor name as everyone else - is that okay?

Signed-off-by: Hugh Dickins <hugh@veritas.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/sparc64/mm/tlb.c
include/asm-arm/tlb.h
include/asm-arm26/tlb.h
include/asm-generic/tlb.h
include/asm-ia64/tlb.h
include/asm-sparc64/tlb.h
mm/memory.c

index 90ca99d0b89cd041fe61640c4ad47ab2a2f421c8..6a43f7cd090eb58ccc46aaa03fb2fb7132ee7a02 100644 (file)
@@ -72,7 +72,7 @@ void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, pte_t *ptep, pte_t
 
 no_cache_flush:
 
-       if (mp->tlb_frozen)
+       if (mp->fullmm)
                return;
 
        nr = mp->tlb_nr;
@@ -97,7 +97,7 @@ void flush_tlb_pgtables(struct mm_struct *mm, unsigned long start, unsigned long
        unsigned long nr = mp->tlb_nr;
        long s = start, e = end, vpte_base;
 
-       if (mp->tlb_frozen)
+       if (mp->fullmm)
                return;
 
        /* If start is greater than end, that is a real problem.  */
index da41df20928fe23ea7b02518b7728f52f26dae86..a35ab0f2e25e53eb0c57a0ab7538549feda8b0b1 100644 (file)
@@ -68,11 +68,6 @@ tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)
        put_cpu_var(mmu_gathers);
 }
 
-static inline unsigned int tlb_is_full_mm(struct mmu_gather *tlb)
-{
-       return tlb->fullmm;
-}
-
 #define tlb_remove_tlb_entry(tlb,ptep,address) do { } while (0)
 
 /*
index 8486b00a679935e6a5f797b0710d820ed50e3c3a..c7d54ca0a2396f7f59f7dfab6ec41ed7e2174a98 100644 (file)
@@ -55,13 +55,6 @@ tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)
         put_cpu_var(mmu_gathers);
 }
 
-
-static inline unsigned int
-tlb_is_full_mm(struct mmu_gather *tlb)
-{
-     return tlb->fullmm;
-}
-
 #define tlb_remove_tlb_entry(tlb,ptep,address)  do { } while (0)
 //#define tlb_start_vma(tlb,vma)                  do { } while (0)
 //FIXME - ARM32 uses this now that things changed in the kernel. seems like it may be pointless on arm26, however to get things compiling...
index c8232622c8d9c42c62f854ad92328a44a61f390e..5d352a70f0047ead95151329cd175ed3fd5d6863 100644 (file)
@@ -103,12 +103,6 @@ tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)
        put_cpu_var(mmu_gathers);
 }
 
-static inline unsigned int
-tlb_is_full_mm(struct mmu_gather *tlb)
-{
-       return tlb->fullmm;
-}
-
 /* tlb_remove_page
  *     Must perform the equivalent to __free_pte(pte_get_and_clear(ptep)), while
  *     handling the additional races in SMP caused by other CPUs caching valid
index 1b82299d7c1eade77099401b77f4956e06a51771..0bbd79f6a7934b20fe157fae8948efd66e088acd 100644 (file)
@@ -178,12 +178,6 @@ tlb_finish_mmu (struct mmu_gather *tlb, unsigned long start, unsigned long end)
        put_cpu_var(mmu_gathers);
 }
 
-static inline unsigned int
-tlb_is_full_mm(struct mmu_gather *tlb)
-{
-     return tlb->fullmm;
-}
-
 /*
  * Logically, this routine frees PAGE.  On MP machines, the actual freeing of the page
  * must be delayed until after the TLB has been flushed (see comments at the beginning of
index 169309bdbf82d3d23f293f26ca2023a22d554ba8..5d194eae870c147758544bd26f4872db2cf94306 100644 (file)
@@ -25,7 +25,7 @@ struct mmu_gather {
        struct mm_struct *mm;
        unsigned int pages_nr;
        unsigned int need_flush;
-       unsigned int tlb_frozen;
+       unsigned int fullmm;
        unsigned int tlb_nr;
        unsigned long freed;
        unsigned long vaddrs[TLB_BATCH_NR];
@@ -50,7 +50,7 @@ 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->tlb_frozen = full_mm_flush;
+       mp->fullmm = full_mm_flush;
        mp->freed = 0;
 
        return mp;
@@ -88,10 +88,10 @@ static inline void tlb_finish_mmu(struct mmu_gather *mp, unsigned long start, un
 
        tlb_flush_mmu(mp);
 
-       if (mp->tlb_frozen) {
+       if (mp->fullmm) {
                if (CTX_VALID(mm->context))
                        do_flush_tlb_mm(mm);
-               mp->tlb_frozen = 0;
+               mp->fullmm = 0;
        } else
                flush_tlb_pending();
 
@@ -101,11 +101,6 @@ static inline void tlb_finish_mmu(struct mmu_gather *mp, unsigned long start, un
        put_cpu_var(mmu_gathers);
 }
 
-static inline unsigned int tlb_is_full_mm(struct mmu_gather *mp)
-{
-       return mp->tlb_frozen;
-}
-
 static inline void tlb_remove_page(struct mmu_gather *mp, struct page *page)
 {
        mp->need_flush = 1;
index eaf79031f573b6f133d96a4d4e58183abf357438..585bb4e0b97f00dd9d1e0bc61753ab3a2827dae7 100644 (file)
@@ -249,7 +249,7 @@ void free_pgd_range(struct mmu_gather **tlb,
                free_pud_range(*tlb, pgd, addr, next, floor, ceiling);
        } while (pgd++, addr = next, addr != end);
 
-       if (!tlb_is_full_mm(*tlb))
+       if (!(*tlb)->fullmm)
                flush_tlb_pgtables((*tlb)->mm, start, end);
 }
 
@@ -698,7 +698,7 @@ unsigned long unmap_vmas(struct mmu_gather **tlbp, struct mm_struct *mm,
        int tlb_start_valid = 0;
        unsigned long start = start_addr;
        spinlock_t *i_mmap_lock = details? details->i_mmap_lock: NULL;
-       int fullmm = tlb_is_full_mm(*tlbp);
+       int fullmm = (*tlbp)->fullmm;
 
        for ( ; vma && vma->vm_start < end_addr; vma = vma->vm_next) {
                unsigned long end;