While mapping hints with a length that cross 128TB are disallowed, MAP_FIXED allocations that cross 128TB are allowed. These are failing on hash (on radix they succeed). Add an additional case for fixed mappings to expand the addr_limit when crossing 128TB.
Cc: "Aneesh Kumar K.V" <aneesh.ku...@linux.vnet.ibm.com> Fixes: f4ea6dcb08 ("powerpc/mm: Enable mappings above 128TB") Signed-off-by: Nicholas Piggin <npig...@gmail.com> --- arch/powerpc/mm/slice.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/mm/slice.c b/arch/powerpc/mm/slice.c index 567db541c0a1..f980397b449d 100644 --- a/arch/powerpc/mm/slice.c +++ b/arch/powerpc/mm/slice.c @@ -419,7 +419,8 @@ unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len, /* * Check if we need to expland slice area. */ - if (unlikely(addr > mm->context.addr_limit && + if (unlikely(((addr > mm->context.addr_limit) || + (fixed && addr + len > mm->context.addr_limit)) && mm->context.addr_limit != TASK_SIZE)) { mm->context.addr_limit = TASK_SIZE; on_each_cpu(slice_flush_segments, mm, 1); -- 2.15.0