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
@@ -648,6 +648,15 @@ unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
|
||||
slice_print_mask(" mask", &potential_mask);
|
||||
|
||||
convert:
|
||||
/*
|
||||
* Try to allocate the context before we do slice convert
|
||||
* so that we handle the context allocation failure gracefully.
|
||||
*/
|
||||
if (need_extra_context(mm, newaddr)) {
|
||||
if (alloc_extended_context(mm, newaddr) < 0)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
slice_andnot_mask(&potential_mask, &potential_mask, &good_mask);
|
||||
if (compat_maskp && !fixed)
|
||||
slice_andnot_mask(&potential_mask, &potential_mask, compat_maskp);
|
||||
@@ -658,10 +667,14 @@ unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
|
||||
if (psize > MMU_PAGE_BASE)
|
||||
on_each_cpu(slice_flush_segments, mm, 1);
|
||||
}
|
||||
|
||||
return_addr:
|
||||
return newaddr;
|
||||
|
||||
return_addr:
|
||||
if (need_extra_context(mm, newaddr)) {
|
||||
if (alloc_extended_context(mm, newaddr) < 0)
|
||||
return -ENOMEM;
|
||||
}
|
||||
return newaddr;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(slice_get_unmapped_area);
|
||||
|
||||
|
Reference in New Issue
Block a user