Skip to content

Commit 09135cc

Browse files
djbwtorvalds
authored andcommitted
mm, powerpc: use vma_kernel_pagesize() in vma_mmu_pagesize()
Patch series "mm, smaps: MMUPageSize for device-dax", v3. Similar to commit 31383c6 ("mm, hugetlbfs: introduce ->split() to vm_operations_struct") here is another occasion where we want special-case hugetlbfs/hstate enabling to also apply to device-dax. This prompts the question what other hstate conversions we might do beyond ->split() and ->pagesize(), but this appears to be the last of the usages of hstate_vma() in generic/non-hugetlbfs specific code paths. This patch (of 3): The current powerpc definition of vma_mmu_pagesize() open codes looking up the page size via hstate. It is identical to the generic vma_kernel_pagesize() implementation. Now, vma_kernel_pagesize() is growing support for determining the page size of Device-DAX vmas in addition to the existing Hugetlbfs page size determination. Ideally, if the powerpc vma_mmu_pagesize() used vma_kernel_pagesize() it would automatically benefit from any new vma-type support that is added to vma_kernel_pagesize(). However, the powerpc vma_mmu_pagesize() is prevented from calling vma_kernel_pagesize() due to a circular header dependency that requires vma_mmu_pagesize() to be defined before including <linux/hugetlb.h>. Break this circular dependency by defining the default vma_mmu_pagesize() as a __weak symbol to be overridden by the powerpc version. Link: http://lkml.kernel.org/r/151996254179.27922.2213728278535578744.stgit@dwillia2-desk3.amr.corp.intel.com Signed-off-by: Dan Williams <[email protected]> Reviewed-by: Andrew Morton <[email protected]> Cc: Benjamin Herrenschmidt <[email protected]> Cc: Paul Mackerras <[email protected]> Cc: Michael Ellerman <[email protected]> Cc: Jane Chu <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 2923117 commit 09135cc

File tree

3 files changed

+4
-15
lines changed

3 files changed

+4
-15
lines changed

arch/powerpc/include/asm/hugetlb.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,6 @@ void hugetlb_free_pgd_range(struct mmu_gather *tlb, unsigned long addr,
117117
unsigned long end, unsigned long floor,
118118
unsigned long ceiling);
119119

120-
/*
121-
* The version of vma_mmu_pagesize() in arch/powerpc/mm/hugetlbpage.c needs
122-
* to override the version in mm/hugetlb.c
123-
*/
124-
#define vma_mmu_pagesize vma_mmu_pagesize
125-
126120
/*
127121
* If the arch doesn't supply something else, assume that hugepage
128122
* size aligned regions are ok without further preparation.

arch/powerpc/mm/hugetlbpage.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -568,10 +568,7 @@ unsigned long vma_mmu_pagesize(struct vm_area_struct *vma)
568568
if (!radix_enabled())
569569
return 1UL << mmu_psize_to_shift(psize);
570570
#endif
571-
if (!is_vm_hugetlb_page(vma))
572-
return PAGE_SIZE;
573-
574-
return huge_page_size(hstate_vma(vma));
571+
return vma_kernel_pagesize(vma);
575572
}
576573

577574
static inline bool is_power_of_4(unsigned long x)

mm/hugetlb.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -651,15 +651,13 @@ EXPORT_SYMBOL_GPL(vma_kernel_pagesize);
651651
/*
652652
* Return the page size being used by the MMU to back a VMA. In the majority
653653
* of cases, the page size used by the kernel matches the MMU size. On
654-
* architectures where it differs, an architecture-specific version of this
655-
* function is required.
654+
* architectures where it differs, an architecture-specific 'strong'
655+
* version of this symbol is required.
656656
*/
657-
#ifndef vma_mmu_pagesize
658-
unsigned long vma_mmu_pagesize(struct vm_area_struct *vma)
657+
__weak unsigned long vma_mmu_pagesize(struct vm_area_struct *vma)
659658
{
660659
return vma_kernel_pagesize(vma);
661660
}
662-
#endif
663661

664662
/*
665663
* Flags for MAP_PRIVATE reservations. These are stored in the bottom

0 commit comments

Comments
 (0)