powerpc/mm: Add support for handling > 512TB address in SLB miss
For addresses above 512TB we allocate additional mmu contexts. To make it all easy, addresses above 512TB are handled with IR/DR=1 and with stack frame setup. The mmu_context_t is also updated to track the new extended_ids. To support upto 4PB we need a total 8 contexts. Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> [mpe: Minor formatting tweaks and comment wording, switch BUG to WARN in get_ea_context().] Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:

committed by
Michael Ellerman

parent
0dea04b288
commit
f384796c40
@@ -179,6 +179,19 @@ void __destroy_context(int context_id)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__destroy_context);
|
||||
|
||||
static void destroy_contexts(mm_context_t *ctx)
|
||||
{
|
||||
int index, context_id;
|
||||
|
||||
spin_lock(&mmu_context_lock);
|
||||
for (index = 0; index < ARRAY_SIZE(ctx->extended_id); index++) {
|
||||
context_id = ctx->extended_id[index];
|
||||
if (context_id)
|
||||
ida_remove(&mmu_context_ida, context_id);
|
||||
}
|
||||
spin_unlock(&mmu_context_lock);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PPC_64K_PAGES
|
||||
static void destroy_pagetable_page(struct mm_struct *mm)
|
||||
{
|
||||
@@ -217,7 +230,7 @@ void destroy_context(struct mm_struct *mm)
|
||||
else
|
||||
subpage_prot_free(mm);
|
||||
destroy_pagetable_page(mm);
|
||||
__destroy_context(mm->context.id);
|
||||
destroy_contexts(&mm->context);
|
||||
mm->context.id = MMU_NO_CONTEXT;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user