powerpc/mm: Split mmu_context handling
This splits the mmu_context handling between 32-bit hash based processors, 64-bit hash based processors and everybody else. This is preliminary work for adding SMP support for BookE processors. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Acked-by: Kumar Gala <galak@kernel.crashing.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:

committed by
Paul Mackerras

parent
6d2170be45
commit
5e696617c4
@@ -60,6 +60,7 @@ int main(void)
|
||||
{
|
||||
DEFINE(THREAD, offsetof(struct task_struct, thread));
|
||||
DEFINE(MM, offsetof(struct task_struct, mm));
|
||||
DEFINE(MMCONTEXTID, offsetof(struct mm_struct, context.id));
|
||||
#ifdef CONFIG_PPC64
|
||||
DEFINE(AUDITCONTEXT, offsetof(struct task_struct, audit_context));
|
||||
#else
|
||||
|
@@ -31,6 +31,7 @@
|
||||
#include <asm/ppc_asm.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/bug.h>
|
||||
|
||||
/* 601 only have IBAT; cr0.eq is set on 601 when using this macro */
|
||||
#define LOAD_BAT(n, reg, RA, RB) \
|
||||
@@ -1070,9 +1071,14 @@ start_here:
|
||||
RFI
|
||||
|
||||
/*
|
||||
* void switch_mmu_context(struct mm_struct *prev, struct mm_struct *next);
|
||||
*
|
||||
* Set up the segment registers for a new context.
|
||||
*/
|
||||
_ENTRY(set_context)
|
||||
_ENTRY(switch_mmu_context)
|
||||
lwz r3,MMCONTEXTID(r4)
|
||||
cmpwi cr0,r3,0
|
||||
blt- 4f
|
||||
mulli r3,r3,897 /* multiply context by skew factor */
|
||||
rlwinm r3,r3,4,8,27 /* VSID = (context & 0xfffff) << 4 */
|
||||
addis r3,r3,0x6000 /* Set Ks, Ku bits */
|
||||
@@ -1083,6 +1089,7 @@ _ENTRY(set_context)
|
||||
/* Context switch the PTE pointer for the Abatron BDI2000.
|
||||
* The PGDIR is passed as second argument.
|
||||
*/
|
||||
lwz r4,MM_PGD(r4)
|
||||
lis r5, KERNELBASE@h
|
||||
lwz r5, 0xf0(r5)
|
||||
stw r4, 0x4(r5)
|
||||
@@ -1098,6 +1105,9 @@ _ENTRY(set_context)
|
||||
sync
|
||||
isync
|
||||
blr
|
||||
4: trap
|
||||
EMIT_BUG_ENTRY 4b,__FILE__,__LINE__,0
|
||||
blr
|
||||
|
||||
/*
|
||||
* An undocumented "feature" of 604e requires that the v bit
|
||||
|
@@ -174,8 +174,7 @@ EXPORT_SYMBOL(cacheable_memcpy);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PPC32
|
||||
EXPORT_SYMBOL(next_mmu_context);
|
||||
EXPORT_SYMBOL(set_context);
|
||||
EXPORT_SYMBOL(switch_mmu_context);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PPC_STD_MMU_32
|
||||
|
@@ -34,6 +34,6 @@ void save_processor_state(void)
|
||||
void restore_processor_state(void)
|
||||
{
|
||||
#ifdef CONFIG_PPC32
|
||||
set_context(current->active_mm->context.id, current->active_mm->pgd);
|
||||
switch_mmu_context(NULL, current->active_mm);
|
||||
#endif
|
||||
}
|
||||
|
Reference in New Issue
Block a user