Loading arch/arm64/include/asm/pgtable.h +5 −0 Original line number Diff line number Diff line Loading @@ -1022,6 +1022,11 @@ static inline pgprot_t arch_filter_pgprot(pgprot_t prot) return PAGE_READONLY_EXEC; } static inline bool pud_sect_supported(void) { return PAGE_SIZE == SZ_4K; } #endif /* !__ASSEMBLY__ */ Loading arch/arm64/include/asm/vmalloc.h +2 −2 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ #define _ASM_ARM64_VMALLOC_H #include <asm/page.h> #include <asm/pgtable.h> #ifdef CONFIG_HAVE_ARCH_HUGE_VMAP Loading @@ -9,10 +10,9 @@ static inline bool arch_vmap_pud_supported(pgprot_t prot) { /* * Only 4k granule supports level 1 block mappings. * SW table walks can't handle removal of intermediate entries. */ return IS_ENABLED(CONFIG_ARM64_4K_PAGES) && return pud_sect_supported() && !IS_ENABLED(CONFIG_PTDUMP_DEBUGFS); } Loading arch/arm64/mm/hugetlbpage.c +15 −11 Original line number Diff line number Diff line Loading @@ -40,11 +40,10 @@ void __init arm64_hugetlb_cma_reserve(void) { int order; #ifdef CONFIG_ARM64_4K_PAGES if (pud_sect_supported()) order = PUD_SHIFT - PAGE_SHIFT; #else else order = CONT_PMD_SHIFT + PMD_SHIFT - PAGE_SHIFT; #endif /* * HugeTLB CMA reservation is required for gigantic * huge pages which could not be allocated via the Loading @@ -62,8 +61,9 @@ bool arch_hugetlb_migration_supported(struct hstate *h) size_t pagesize = huge_page_size(h); switch (pagesize) { #ifdef CONFIG_ARM64_4K_PAGES #ifndef __PAGETABLE_PMD_FOLDED case PUD_SIZE: return pud_sect_supported(); #endif case PMD_SIZE: case CONT_PMD_SIZE: Loading Loading @@ -126,8 +126,11 @@ static inline int num_contig_ptes(unsigned long size, size_t *pgsize) *pgsize = size; switch (size) { #ifdef CONFIG_ARM64_4K_PAGES #ifndef __PAGETABLE_PMD_FOLDED case PUD_SIZE: if (pud_sect_supported()) contig_ptes = 1; break; #endif case PMD_SIZE: contig_ptes = 1; Loading Loading @@ -489,9 +492,9 @@ void huge_ptep_clear_flush(struct vm_area_struct *vma, static int __init hugetlbpage_init(void) { #ifdef CONFIG_ARM64_4K_PAGES if (pud_sect_supported()) hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT); #endif hugetlb_add_hstate(CONT_PMD_SHIFT - PAGE_SHIFT); hugetlb_add_hstate(PMD_SHIFT - PAGE_SHIFT); hugetlb_add_hstate(CONT_PTE_SHIFT - PAGE_SHIFT); Loading @@ -503,8 +506,9 @@ arch_initcall(hugetlbpage_init); bool __init arch_hugetlb_valid_size(unsigned long size) { switch (size) { #ifdef CONFIG_ARM64_4K_PAGES #ifndef __PAGETABLE_PMD_FOLDED case PUD_SIZE: return pud_sect_supported(); #endif case CONT_PMD_SIZE: case PMD_SIZE: Loading arch/arm64/mm/init.c +0 −2 Original line number Diff line number Diff line Loading @@ -416,8 +416,6 @@ void __init mem_init(void) else if (!xen_swiotlb_detect()) swiotlb_force = SWIOTLB_NO_FORCE; set_max_mapnr(max_pfn - PHYS_PFN_OFFSET); /* this will put all unused low memory onto the freelists */ memblock_free_all(); Loading arch/arm64/mm/mmu.c +5 −0 Original line number Diff line number Diff line Loading @@ -1499,6 +1499,11 @@ int arch_add_memory(int nid, u64 start, u64 size, if (ret) __remove_pgd_mapping(swapper_pg_dir, __phys_to_virt(start), size); else { max_pfn = PFN_UP(start + size); max_low_pfn = max_pfn; } return ret; } Loading Loading
arch/arm64/include/asm/pgtable.h +5 −0 Original line number Diff line number Diff line Loading @@ -1022,6 +1022,11 @@ static inline pgprot_t arch_filter_pgprot(pgprot_t prot) return PAGE_READONLY_EXEC; } static inline bool pud_sect_supported(void) { return PAGE_SIZE == SZ_4K; } #endif /* !__ASSEMBLY__ */ Loading
arch/arm64/include/asm/vmalloc.h +2 −2 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ #define _ASM_ARM64_VMALLOC_H #include <asm/page.h> #include <asm/pgtable.h> #ifdef CONFIG_HAVE_ARCH_HUGE_VMAP Loading @@ -9,10 +10,9 @@ static inline bool arch_vmap_pud_supported(pgprot_t prot) { /* * Only 4k granule supports level 1 block mappings. * SW table walks can't handle removal of intermediate entries. */ return IS_ENABLED(CONFIG_ARM64_4K_PAGES) && return pud_sect_supported() && !IS_ENABLED(CONFIG_PTDUMP_DEBUGFS); } Loading
arch/arm64/mm/hugetlbpage.c +15 −11 Original line number Diff line number Diff line Loading @@ -40,11 +40,10 @@ void __init arm64_hugetlb_cma_reserve(void) { int order; #ifdef CONFIG_ARM64_4K_PAGES if (pud_sect_supported()) order = PUD_SHIFT - PAGE_SHIFT; #else else order = CONT_PMD_SHIFT + PMD_SHIFT - PAGE_SHIFT; #endif /* * HugeTLB CMA reservation is required for gigantic * huge pages which could not be allocated via the Loading @@ -62,8 +61,9 @@ bool arch_hugetlb_migration_supported(struct hstate *h) size_t pagesize = huge_page_size(h); switch (pagesize) { #ifdef CONFIG_ARM64_4K_PAGES #ifndef __PAGETABLE_PMD_FOLDED case PUD_SIZE: return pud_sect_supported(); #endif case PMD_SIZE: case CONT_PMD_SIZE: Loading Loading @@ -126,8 +126,11 @@ static inline int num_contig_ptes(unsigned long size, size_t *pgsize) *pgsize = size; switch (size) { #ifdef CONFIG_ARM64_4K_PAGES #ifndef __PAGETABLE_PMD_FOLDED case PUD_SIZE: if (pud_sect_supported()) contig_ptes = 1; break; #endif case PMD_SIZE: contig_ptes = 1; Loading Loading @@ -489,9 +492,9 @@ void huge_ptep_clear_flush(struct vm_area_struct *vma, static int __init hugetlbpage_init(void) { #ifdef CONFIG_ARM64_4K_PAGES if (pud_sect_supported()) hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT); #endif hugetlb_add_hstate(CONT_PMD_SHIFT - PAGE_SHIFT); hugetlb_add_hstate(PMD_SHIFT - PAGE_SHIFT); hugetlb_add_hstate(CONT_PTE_SHIFT - PAGE_SHIFT); Loading @@ -503,8 +506,9 @@ arch_initcall(hugetlbpage_init); bool __init arch_hugetlb_valid_size(unsigned long size) { switch (size) { #ifdef CONFIG_ARM64_4K_PAGES #ifndef __PAGETABLE_PMD_FOLDED case PUD_SIZE: return pud_sect_supported(); #endif case CONT_PMD_SIZE: case PMD_SIZE: Loading
arch/arm64/mm/init.c +0 −2 Original line number Diff line number Diff line Loading @@ -416,8 +416,6 @@ void __init mem_init(void) else if (!xen_swiotlb_detect()) swiotlb_force = SWIOTLB_NO_FORCE; set_max_mapnr(max_pfn - PHYS_PFN_OFFSET); /* this will put all unused low memory onto the freelists */ memblock_free_all(); Loading
arch/arm64/mm/mmu.c +5 −0 Original line number Diff line number Diff line Loading @@ -1499,6 +1499,11 @@ int arch_add_memory(int nid, u64 start, u64 size, if (ret) __remove_pgd_mapping(swapper_pg_dir, __phys_to_virt(start), size); else { max_pfn = PFN_UP(start + size); max_low_pfn = max_pfn; } return ret; } Loading