forked from mirrors/linux
		
	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
 | 
					config HUGETLB_PAGE_SIZE_VARIABLE
 | 
				
			||||||
	bool
 | 
						bool
 | 
				
			||||||
	depends on HUGETLB_PAGE
 | 
						depends on HUGETLB_PAGE && PPC_BOOK3S_64
 | 
				
			||||||
	default y
 | 
						default y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config MATH_EMULATION
 | 
					config MATH_EMULATION
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,6 +15,8 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern bool hugetlb_disabled;
 | 
					extern bool hugetlb_disabled;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void hugetlbpage_init_default(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void flush_dcache_icache_hugepage(struct page *page);
 | 
					void flush_dcache_icache_hugepage(struct page *page);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int slice_is_hugepage_only_range(struct mm_struct *mm, unsigned long addr,
 | 
					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)
 | 
					#define PAGE_SIZE		(ASM_CONST(1) << PAGE_SHIFT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef __ASSEMBLY__
 | 
					#ifndef __ASSEMBLY__
 | 
				
			||||||
#ifdef CONFIG_HUGETLB_PAGE
 | 
					#ifndef CONFIG_HUGETLB_PAGE
 | 
				
			||||||
extern unsigned int HPAGE_SHIFT;
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
#define HPAGE_SHIFT PAGE_SHIFT
 | 
					#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
 | 
					#endif
 | 
				
			||||||
#define HPAGE_SIZE		((1UL) << HPAGE_SHIFT)
 | 
					#define HPAGE_SIZE		((1UL) << HPAGE_SHIFT)
 | 
				
			||||||
#define HPAGE_MASK		(~(HPAGE_SIZE - 1))
 | 
					#define HPAGE_MASK		(~(HPAGE_SIZE - 1))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,6 +15,9 @@
 | 
				
			||||||
#include <asm/cacheflush.h>
 | 
					#include <asm/cacheflush.h>
 | 
				
			||||||
#include <asm/machdep.h>
 | 
					#include <asm/machdep.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unsigned int hpage_shift;
 | 
				
			||||||
 | 
					EXPORT_SYMBOL(hpage_shift);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern long hpte_insert_repeating(unsigned long hash, unsigned long vpn,
 | 
					extern long hpte_insert_repeating(unsigned long hash, unsigned long vpn,
 | 
				
			||||||
				  unsigned long pa, unsigned long rlags,
 | 
									  unsigned long pa, unsigned long rlags,
 | 
				
			||||||
				  unsigned long vflags, int psize, int ssize);
 | 
									  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);
 | 
												   old_pte, pte);
 | 
				
			||||||
	set_huge_pte_at(vma->vm_mm, addr, ptep, 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;
 | 
					bool hugetlb_disabled = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unsigned int HPAGE_SHIFT;
 | 
					 | 
				
			||||||
EXPORT_SYMBOL(HPAGE_SHIFT);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define hugepd_none(hpd)	(hpd_val(hpd) == 0)
 | 
					#define hugepd_none(hpd)	(hpd_val(hpd) == 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PTE_T_ORDER	(__builtin_ffs(sizeof(pte_t)) - __builtin_ffs(sizeof(void *)))
 | 
					#define PTE_T_ORDER	(__builtin_ffs(sizeof(pte_t)) - __builtin_ffs(sizeof(void *)))
 | 
				
			||||||
| 
						 | 
					@ -645,23 +642,9 @@ static int __init hugetlbpage_init(void)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(CONFIG_PPC_FSL_BOOK3E) || defined(CONFIG_PPC_8xx)
 | 
						if (IS_ENABLED(HUGETLB_PAGE_SIZE_VARIABLE))
 | 
				
			||||||
	/* Default hpage size = 4M on FSL_BOOK3E and 512k on 8xx */
 | 
							hugetlbpage_init_default();
 | 
				
			||||||
	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
 | 
					 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue