powerpc/book3e: Change hugetlb preload to take vma argument
authorBecky Bruce <beckyb@kernel.crashing.org>
Mon, 28 Nov 2011 14:43:33 +0000 (14:43 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 7 Dec 2011 05:26:24 +0000 (16:26 +1100)
This avoids an extra find_vma() and is less error-prone.

Signed-off-by: Becky Bruce <beckyb@kernel.crashing.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/include/asm/hugetlb.h
arch/powerpc/mm/hugetlbpage-book3e.c
arch/powerpc/mm/mem.c

index 555044c310b2accd23aff1d66154a71c4af69f4d..863f49d5ea35ed60b2c021175f9e021b9b9c11a8 100644 (file)
@@ -52,7 +52,8 @@ static inline int is_hugepage_only_range(struct mm_struct *mm,
 }
 #endif
 
-void book3e_hugetlb_preload(struct mm_struct *mm, unsigned long ea, pte_t pte);
+void book3e_hugetlb_preload(struct vm_area_struct *vma, unsigned long ea,
+                           pte_t pte);
 void flush_hugetlb_page(struct vm_area_struct *vma, unsigned long vmaddr);
 
 void hugetlb_free_pgd_range(struct mmu_gather *tlb, unsigned long addr,
index 4d6d849a3e54cbc2545ee02fc96e049cfd4dac93..3bc700655fc88255ae39fe854341e467cd9910a5 100644 (file)
@@ -37,12 +37,14 @@ static inline int book3e_tlb_exists(unsigned long ea, unsigned long pid)
        return found;
 }
 
-void book3e_hugetlb_preload(struct mm_struct *mm, unsigned long ea, pte_t pte)
+void book3e_hugetlb_preload(struct vm_area_struct *vma, unsigned long ea,
+                           pte_t pte)
 {
        unsigned long mas1, mas2;
        u64 mas7_3;
        unsigned long psize, tsize, shift;
        unsigned long flags;
+       struct mm_struct *mm;
 
 #ifdef CONFIG_PPC_FSL_BOOK3E
        int index, ncams;
@@ -51,12 +53,14 @@ void book3e_hugetlb_preload(struct mm_struct *mm, unsigned long ea, pte_t pte)
        if (unlikely(is_kernel_addr(ea)))
                return;
 
+       mm = vma->vm_mm;
+
 #ifdef CONFIG_PPC_MM_SLICES
        psize = get_slice_psize(mm, ea);
        tsize = mmu_get_tsize(psize);
        shift = mmu_psize_defs[psize].shift;
 #else
-       psize = vma_mmu_pagesize(find_vma(mm, ea));
+       psize = vma_mmu_pagesize(vma);
        shift = __ilog2(psize);
        tsize = shift - 10;
 #endif
index 22563b9664c3524cf1939238355d6b7d50f37f99..83d819f308640285d58bfcdd1d443d5070b0696c 100644 (file)
@@ -553,7 +553,7 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address,
 #if (defined(CONFIG_PPC_BOOK3E_64) || defined(CONFIG_PPC_FSL_BOOK3E)) \
        && defined(CONFIG_HUGETLB_PAGE)
        if (is_vm_hugetlb_page(vma))
-               book3e_hugetlb_preload(vma->vm_mm, address, *ptep);
+               book3e_hugetlb_preload(vma, address, *ptep);
 #endif
 }