Re: [PATCHv5, REBASED 9/9] x86/mm: Allow to have userspace mappings above 47-bits
From: Michal Hocko <hidden>
Date: 2017-05-18 17:52:16
Also in:
linux-mm, lkml
On Thu 18-05-17 19:13:30, Michal Hocko wrote:
On Thu 18-05-17 19:22:55, Kirill A. Shutemov wrote:quoted
On Thu, May 18, 2017 at 05:59:14PM +0200, Michal Hocko wrote:[...]quoted
quoted
I basically mean something like the following ---diff --git a/arch/x86/kernel/sys_x86_64.c b/arch/x86/kernel/sys_x86_64.c index 74d1587b181d..d6f66ff02d0a 100644 --- a/arch/x86/kernel/sys_x86_64.c +++ b/arch/x86/kernel/sys_x86_64.c@@ -195,7 +195,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, goto bottomup; /* requesting a specific address */ - if (addr) { + if (addr && addr <= DEFAULT_MAP_WINDOW) { addr = PAGE_ALIGN(addr); vma = find_vma(mm, addr); if (TASK_SIZE - len >= addr &&@@ -215,7 +215,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, * !in_compat_syscall() check to avoid high addresses for x32. */ if (addr > DEFAULT_MAP_WINDOW && !in_compat_syscall()) - info.high_limit += TASK_SIZE_MAX - DEFAULT_MAP_WINDOW; + info.high_limit += min(TASK_SIZE_MAX, address) - DEFAULT_MAP_WINDOW; info.align_mask = 0; info.align_offset = pgoff << PAGE_SHIFT;You try to stretch the interface too far. With the patch you propose we have totally different behaviour wrt hint address if it below and above 47-bits: * <= 47-bits: allocate VM [addr; addr + len - 1], if free;unless I am missing something fundamental here this is not how it works. We just map a different range if the requested one is not free (in absence of MAP_FIXED). And we do that in top->down direction so this is already how it works. And you _do_ rely on the same thing when allowing larger than 47b except you start from the top of the supported address space. So how exactly is your new behavior any different and more clear?
OK, I take that back because I am clearly wrong. We simply always start from top. Sorry about my confusion. Feel free to add Acked-by: Michal Hocko <mhocko-IBi9RG/b67k@public.gmane.org> -- Michal Hocko SUSE Labs