mirror of
https://github.com/torvalds/linux.git
synced 2024-11-17 17:41:44 +00:00
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
e83cbf7fb7
commit
2e1626744e
@ -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__ */
|
||||
|
||||
/*
|
||||
|
@ -1482,6 +1482,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;
|
||||
|
@ -746,6 +746,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