diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2017-07-24 14:27:58 +1000 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2017-08-23 22:27:42 +1000 |
commit | 43ed84a891b70165a621a5c92196949efd57be39 (patch) | |
tree | 1570af2ea5fb592218957c74d00e9736435b0a69 /arch/powerpc/include | |
parent | 3e23a12bcaf18b3587088807722cd25b562d7731 (diff) | |
download | linux-43ed84a891b70165a621a5c92196949efd57be39.tar.gz |
powerpc/mm: Move pgdir setting into a helper
Makes switch_mm_irqs_off() a bit more readable
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/include')
-rw-r--r-- | arch/powerpc/include/asm/mmu_context.h | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/arch/powerpc/include/asm/mmu_context.h b/arch/powerpc/include/asm/mmu_context.h index 2ab328f0159e..992123e4e7f6 100644 --- a/arch/powerpc/include/asm/mmu_context.h +++ b/arch/powerpc/include/asm/mmu_context.h @@ -77,6 +77,26 @@ extern void switch_cop(struct mm_struct *next); extern int use_cop(unsigned long acop, struct mm_struct *mm); extern void drop_cop(unsigned long acop, struct mm_struct *mm); +#if defined(CONFIG_PPC32) +static inline void switch_mm_pgdir(struct task_struct *tsk, + struct mm_struct *mm) +{ + /* 32-bit keeps track of the current PGDIR in the thread struct */ + tsk->thread.pgdir = mm->pgd; +} +#elif defined(CONFIG_PPC_BOOK3E_64) +static inline void switch_mm_pgdir(struct task_struct *tsk, + struct mm_struct *mm) +{ + /* 64-bit Book3E keeps track of current PGD in the PACA */ + get_paca()->pgd = mm->pgd; +} +#else +static inline void switch_mm_pgdir(struct task_struct *tsk, + struct mm_struct *mm) { } +#endif + + /* * switch_mm is the entry point called from the architecture independent * code in kernel/sched/core.c @@ -111,15 +131,9 @@ static inline void switch_mm_irqs_off(struct mm_struct *prev, new_on_cpu = true; } - /* 32-bit keeps track of the current PGDIR in the thread struct */ -#ifdef CONFIG_PPC32 - tsk->thread.pgdir = next->pgd; -#endif /* CONFIG_PPC32 */ + /* Some subarchs need to track the PGD elsewhere */ + switch_mm_pgdir(tsk, next); - /* 64-bit Book3E keeps track of current PGD in the PACA */ -#ifdef CONFIG_PPC_BOOK3E_64 - get_paca()->pgd = next->pgd; -#endif /* Nothing else to do if we aren't actually switching */ if (prev == next) return; |