lkml.org 
[lkml]   [2011]   [Feb]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 17/17] sh, mm: Convert sh to generic tlb

    Cc: Paul Mundt <lethal@linux-sh.org>
    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    ---
    arch/sh/Kconfig | 1
    arch/sh/include/asm/tlb.h | 98 ++--------------------------------------------
    2 files changed, 6 insertions(+), 93 deletions(-)

    Index: linux-2.6/arch/sh/Kconfig
    ===================================================================
    --- linux-2.6.orig/arch/sh/Kconfig
    +++ linux-2.6/arch/sh/Kconfig
    @@ -23,6 +23,7 @@ config SUPERH
    select HAVE_SPARSE_IRQ
    select RTC_LIB
    select GENERIC_ATOMIC64
    + select HAVE_MMU_GATHER_RANGE if MMU
    # Support the deprecated APIs until MFD and GPIOLIB catch up.
    select GENERIC_HARDIRQS_NO_DEPRECATED if !MFD_SUPPORT && !GPIOLIB
    help
    Index: linux-2.6/arch/sh/include/asm/tlb.h
    ===================================================================
    --- linux-2.6.orig/arch/sh/include/asm/tlb.h
    +++ linux-2.6/arch/sh/include/asm/tlb.h
    @@ -9,100 +9,11 @@
    #include <linux/pagemap.h>

    #ifdef CONFIG_MMU
    -#include <asm/pgalloc.h>
    -#include <asm/tlbflush.h>
    #include <asm/mmu_context.h>

    -/*
    - * TLB handling. This allows us to remove pages from the page
    - * tables, and efficiently handle the TLB issues.
    - */
    -struct mmu_gather {
    - struct mm_struct *mm;
    - unsigned int fullmm;
    - unsigned long start, end;
    -};
    -
    -static inline void init_tlb_gather(struct mmu_gather *tlb)
    -{
    - tlb->start = TASK_SIZE;
    - tlb->end = 0;
    -
    - if (tlb->fullmm) {
    - tlb->start = 0;
    - tlb->end = TASK_SIZE;
    - }
    -}
    -
    -static inline void
    -tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned int full_mm_flush)
    -{
    - tlb->mm = mm;
    - tlb->fullmm = full_mm_flush;
    -
    - init_tlb_gather(tlb);
    -}
    -
    -static inline void
    -tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)
    -{
    - if (tlb->fullmm)
    - flush_tlb_mm(tlb->mm);
    -
    - /* keep the page table cache within bounds */
    - check_pgt_cache();
    -}
    -
    -static inline void
    -tlb_remove_tlb_entry(struct mmu_gather *tlb, pte_t *ptep, unsigned long address)
    -{
    - if (tlb->start > address)
    - tlb->start = address;
    - if (tlb->end < address + PAGE_SIZE)
    - tlb->end = address + PAGE_SIZE;
    -}
    -
    -/*
    - * In the case of tlb vma handling, we can optimise these away in the
    - * case where we're doing a full MM flush. When we're doing a munmap,
    - * the vmas are adjusted to only cover the region to be torn down.
    - */
    -static inline void
    -tlb_start_vma(struct mmu_gather *tlb, struct vm_area_struct *vma)
    -{
    - if (!tlb->fullmm)
    - flush_cache_range(vma, vma->vm_start, vma->vm_end);
    -}
    -
    -static inline void
    -tlb_end_vma(struct mmu_gather *tlb, struct vm_area_struct *vma)
    -{
    - if (!tlb->fullmm && tlb->end) {
    - flush_tlb_range(vma, tlb->start, tlb->end);
    - init_tlb_gather(tlb);
    - }
    -}
    -
    -static inline void tlb_flush_mmu(struct mmu_gather *tlb)
    -{
    -}
    -
    -static inline int __tlb_remove_page(struct mmu_gather *tlb, struct page *page)
    -{
    - free_page_and_swap_cache(page);
    - return 0;
    -}
    -
    -static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page)
    -{
    - __tlb_remove_page(tlb, page);
    -}
    -
    -#define pte_free_tlb(tlb, ptep, addr) pte_free((tlb)->mm, ptep)
    -#define pmd_free_tlb(tlb, pmdp, addr) pmd_free((tlb)->mm, pmdp)
    -#define pud_free_tlb(tlb, pudp, addr) pud_free((tlb)->mm, pudp)
    -
    -#define tlb_migrate_finish(mm) do { } while (0)
    +#define __pte_free_tlb(tlb, ptep, addr) pte_free((tlb)->mm, ptep)
    +#define __pmd_free_tlb(tlb, pmdp, addr) pmd_free((tlb)->mm, pmdp)
    +#define __pud_free_tlb(tlb, pudp, addr) pud_free((tlb)->mm, pudp)

    #if defined(CONFIG_CPU_SH4) || defined(CONFIG_SUPERH64)
    extern void tlb_wire_entry(struct vm_area_struct *, unsigned long, pte_t);
    @@ -127,8 +38,9 @@ static inline void tlb_unwire_entry(void
    #define __tlb_remove_tlb_entry(tlb, pte, address) do { } while (0)
    #define tlb_flush(tlb) do { } while (0)

    +#endif /* CONFIG_MMU */
    +
    #include <asm-generic/tlb.h>

    -#endif /* CONFIG_MMU */
    #endif /* __ASSEMBLY__ */
    #endif /* __ASM_SH_TLB_H */



    \
     
     \ /
      Last update: 2011-02-17 18:15    [W:0.026 / U:0.400 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site