Commit 2e162674 authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman
Browse files

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: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent e83cbf7f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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__ */

+6 −0
Original line number Diff line number Diff line
@@ -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__ */

/*
+9 −0
Original line number Diff line number Diff line
@@ -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
+5 −0
Original line number Diff line number Diff line
@@ -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;
Loading