mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	powerpc/mm: cleanup HPAGE_SHIFT setup
Only book3s/64 may select default among several HPAGE_SHIFT at runtime. 8xx always defines 512K pages as default FSL_BOOK3E always defines 4M pages as default This patch limits HUGETLB_PAGE_SIZE_VARIABLE to book3s/64 moves the definitions in subarches files. Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
		
							parent
							
								
									45d0ba527b
								
							
						
					
					
						commit
						c5710cd207
					
				
					 5 changed files with 30 additions and 24 deletions
				
			
		| 
						 | 
				
			
			@ -390,7 +390,7 @@ source "kernel/Kconfig.hz"
 | 
			
		|||
 | 
			
		||||
config HUGETLB_PAGE_SIZE_VARIABLE
 | 
			
		||||
	bool
 | 
			
		||||
	depends on HUGETLB_PAGE
 | 
			
		||||
	depends on HUGETLB_PAGE && PPC_BOOK3S_64
 | 
			
		||||
	default y
 | 
			
		||||
 | 
			
		||||
config MATH_EMULATION
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,8 @@
 | 
			
		|||
 | 
			
		||||
extern bool hugetlb_disabled;
 | 
			
		||||
 | 
			
		||||
void hugetlbpage_init_default(void);
 | 
			
		||||
 | 
			
		||||
void flush_dcache_icache_hugepage(struct page *page);
 | 
			
		||||
 | 
			
		||||
int slice_is_hugepage_only_range(struct mm_struct *mm, unsigned long addr,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,10 +28,15 @@
 | 
			
		|||
#define PAGE_SIZE		(ASM_CONST(1) << PAGE_SHIFT)
 | 
			
		||||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
#ifdef CONFIG_HUGETLB_PAGE
 | 
			
		||||
extern unsigned int HPAGE_SHIFT;
 | 
			
		||||
#else
 | 
			
		||||
#ifndef CONFIG_HUGETLB_PAGE
 | 
			
		||||
#define HPAGE_SHIFT PAGE_SHIFT
 | 
			
		||||
#elif defined(CONFIG_PPC_BOOK3S_64)
 | 
			
		||||
extern unsigned int hpage_shift;
 | 
			
		||||
#define HPAGE_SHIFT hpage_shift
 | 
			
		||||
#elif defined(CONFIG_PPC_8xx)
 | 
			
		||||
#define HPAGE_SHIFT		19	/* 512k pages */
 | 
			
		||||
#elif defined(CONFIG_PPC_FSL_BOOK3E)
 | 
			
		||||
#define HPAGE_SHIFT		22	/* 4M pages */
 | 
			
		||||
#endif
 | 
			
		||||
#define HPAGE_SIZE		((1UL) << HPAGE_SHIFT)
 | 
			
		||||
#define HPAGE_MASK		(~(HPAGE_SIZE - 1))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,9 @@
 | 
			
		|||
#include <asm/cacheflush.h>
 | 
			
		||||
#include <asm/machdep.h>
 | 
			
		||||
 | 
			
		||||
unsigned int hpage_shift;
 | 
			
		||||
EXPORT_SYMBOL(hpage_shift);
 | 
			
		||||
 | 
			
		||||
extern long hpte_insert_repeating(unsigned long hash, unsigned long vpn,
 | 
			
		||||
				  unsigned long pa, unsigned long rlags,
 | 
			
		||||
				  unsigned long vflags, int psize, int ssize);
 | 
			
		||||
| 
						 | 
				
			
			@ -150,3 +153,16 @@ void huge_ptep_modify_prot_commit(struct vm_area_struct *vma, unsigned long addr
 | 
			
		|||
							   old_pte, pte);
 | 
			
		||||
	set_huge_pte_at(vma->vm_mm, addr, ptep, pte);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void hugetlbpage_init_default(void)
 | 
			
		||||
{
 | 
			
		||||
	/* Set default large page size. Currently, we pick 16M or 1M
 | 
			
		||||
	 * depending on what is available
 | 
			
		||||
	 */
 | 
			
		||||
	if (mmu_psize_defs[MMU_PAGE_16M].shift)
 | 
			
		||||
		hpage_shift = mmu_psize_defs[MMU_PAGE_16M].shift;
 | 
			
		||||
	else if (mmu_psize_defs[MMU_PAGE_1M].shift)
 | 
			
		||||
		hpage_shift = mmu_psize_defs[MMU_PAGE_1M].shift;
 | 
			
		||||
	else if (mmu_psize_defs[MMU_PAGE_2M].shift)
 | 
			
		||||
		hpage_shift = mmu_psize_defs[MMU_PAGE_2M].shift;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,9 +28,6 @@
 | 
			
		|||
 | 
			
		||||
bool hugetlb_disabled = false;
 | 
			
		||||
 | 
			
		||||
unsigned int HPAGE_SHIFT;
 | 
			
		||||
EXPORT_SYMBOL(HPAGE_SHIFT);
 | 
			
		||||
 | 
			
		||||
#define hugepd_none(hpd)	(hpd_val(hpd) == 0)
 | 
			
		||||
 | 
			
		||||
#define PTE_T_ORDER	(__builtin_ffs(sizeof(pte_t)) - __builtin_ffs(sizeof(void *)))
 | 
			
		||||
| 
						 | 
				
			
			@ -645,23 +642,9 @@ static int __init hugetlbpage_init(void)
 | 
			
		|||
#endif
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_PPC_FSL_BOOK3E) || defined(CONFIG_PPC_8xx)
 | 
			
		||||
	/* Default hpage size = 4M on FSL_BOOK3E and 512k on 8xx */
 | 
			
		||||
	if (mmu_psize_defs[MMU_PAGE_4M].shift)
 | 
			
		||||
		HPAGE_SHIFT = mmu_psize_defs[MMU_PAGE_4M].shift;
 | 
			
		||||
	else if (mmu_psize_defs[MMU_PAGE_512K].shift)
 | 
			
		||||
		HPAGE_SHIFT = mmu_psize_defs[MMU_PAGE_512K].shift;
 | 
			
		||||
#else
 | 
			
		||||
	/* Set default large page size. Currently, we pick 16M or 1M
 | 
			
		||||
	 * depending on what is available
 | 
			
		||||
	 */
 | 
			
		||||
	if (mmu_psize_defs[MMU_PAGE_16M].shift)
 | 
			
		||||
		HPAGE_SHIFT = mmu_psize_defs[MMU_PAGE_16M].shift;
 | 
			
		||||
	else if (mmu_psize_defs[MMU_PAGE_1M].shift)
 | 
			
		||||
		HPAGE_SHIFT = mmu_psize_defs[MMU_PAGE_1M].shift;
 | 
			
		||||
	else if (mmu_psize_defs[MMU_PAGE_2M].shift)
 | 
			
		||||
		HPAGE_SHIFT = mmu_psize_defs[MMU_PAGE_2M].shift;
 | 
			
		||||
#endif
 | 
			
		||||
	if (IS_ENABLED(HUGETLB_PAGE_SIZE_VARIABLE))
 | 
			
		||||
		hugetlbpage_init_default();
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue