powerpc/64s/hash: Provide arch_setup_exec() hooks for hash slice setup
This will be used by the SLB code in the next patch, but for now this sets the slb_addr_limit to the correct size for 32-bit tasks. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
		
							parent
							
								
									126b11b294
								
							
						
					
					
						commit
						425d331462
					
				| @ -487,6 +487,8 @@ int htab_remove_mapping(unsigned long vstart, unsigned long vend, | ||||
| extern void pseries_add_gpage(u64 addr, u64 page_size, unsigned long number_of_pages); | ||||
| extern void demote_segment_4k(struct mm_struct *mm, unsigned long addr); | ||||
| 
 | ||||
| extern void hash__setup_new_exec(void); | ||||
| 
 | ||||
| #ifdef CONFIG_PPC_PSERIES | ||||
| void hpte_init_pseries(void); | ||||
| #else | ||||
|  | ||||
| @ -32,6 +32,7 @@ void slice_set_range_psize(struct mm_struct *mm, unsigned long start, | ||||
| 			   unsigned long len, unsigned int psize); | ||||
| 
 | ||||
| void slice_init_new_context_exec(struct mm_struct *mm); | ||||
| void slice_setup_new_exec(void); | ||||
| 
 | ||||
| #endif /* __ASSEMBLY__ */ | ||||
| 
 | ||||
|  | ||||
| @ -72,6 +72,12 @@ static inline struct thread_info *current_thread_info(void) | ||||
| } | ||||
| 
 | ||||
| extern int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src); | ||||
| 
 | ||||
| #ifdef CONFIG_PPC_BOOK3S_64 | ||||
| void arch_setup_new_exec(void); | ||||
| #define arch_setup_new_exec arch_setup_new_exec | ||||
| #endif | ||||
| 
 | ||||
| #endif /* __ASSEMBLY__ */ | ||||
| 
 | ||||
| /*
 | ||||
|  | ||||
| @ -1490,6 +1490,15 @@ void flush_thread(void) | ||||
| #endif /* CONFIG_HAVE_HW_BREAKPOINT */ | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_PPC_BOOK3S_64 | ||||
| void arch_setup_new_exec(void) | ||||
| { | ||||
| 	if (radix_enabled()) | ||||
| 		return; | ||||
| 	hash__setup_new_exec(); | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| int set_thread_uses_vas(void) | ||||
| { | ||||
| #ifdef CONFIG_PPC_BOOK3S_64 | ||||
|  | ||||
| @ -84,6 +84,11 @@ static int hash__init_new_context(struct mm_struct *mm) | ||||
| 	return index; | ||||
| } | ||||
| 
 | ||||
| void hash__setup_new_exec(void) | ||||
| { | ||||
| 	slice_setup_new_exec(); | ||||
| } | ||||
| 
 | ||||
| static int radix__init_new_context(struct mm_struct *mm) | ||||
| { | ||||
| 	unsigned long rts_field; | ||||
|  | ||||
| @ -757,6 +757,20 @@ void slice_init_new_context_exec(struct mm_struct *mm) | ||||
| 		bitmap_fill(mask->high_slices, SLICE_NUM_HIGH); | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_PPC_BOOK3S_64 | ||||
| void slice_setup_new_exec(void) | ||||
| { | ||||
| 	struct mm_struct *mm = current->mm; | ||||
| 
 | ||||
| 	slice_dbg("slice_setup_new_exec(mm=%p)\n", mm); | ||||
| 
 | ||||
| 	if (!is_32bit_task()) | ||||
| 		return; | ||||
| 
 | ||||
| 	mm->context.slb_addr_limit = DEFAULT_MAP_WINDOW; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| void slice_set_range_psize(struct mm_struct *mm, unsigned long start, | ||||
| 			   unsigned long len, unsigned int psize) | ||||
| { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user