From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751410AbdBUGLf (ORCPT ); Tue, 21 Feb 2017 01:11:35 -0500 Received: from mail-it0-f43.google.com ([209.85.214.43]:36102 "EHLO mail-it0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751381AbdBUGK6 (ORCPT ); Tue, 21 Feb 2017 01:10:58 -0500 MIME-Version: 1.0 In-Reply-To: References: <20170217141328.164563-1-kirill.shutemov@linux.intel.com> <20170217141328.164563-34-kirill.shutemov@linux.intel.com> From: Michael Pratt Date: Mon, 20 Feb 2017 22:10:17 -0800 Message-ID: Subject: Re: [PATCHv3 33/33] mm, x86: introduce PR_SET_MAX_VADDR and PR_GET_MAX_VADDR To: luto@amacapital.net Cc: torvalds@linux-foundation.org, kirill.shutemov@linux.intel.com, akpm@linux-foundation.org, x86@kernel.org, tglx@linutronix.de, mingo@redhat.com, arnd@arndb.de, hpa@zytor.com, ak@linux.intel.com, dave.hansen@intel.com, linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, catalin.marinas@arm.com, linux-api@vger.kernel.org Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Sigh... apologies for the HTML. Trying again... On Mon, Feb 20, 2017 at 9:21 PM, Michael Pratt wrote: > On Fri, Feb 17, 2017 at 3:02 PM, Andy Lutomirski wrote: >> On Fri, Feb 17, 2017 at 1:01 PM, Linus Torvalds >> wrote: >>> On Fri, Feb 17, 2017 at 12:12 PM, Andy Lutomirski wrote: >>>> >>>> At the very least, I'd want to see >>>> MAP_FIXED_BUT_DONT_BLOODY_UNMAP_ANYTHING. I *hate* the current >>>> interface. >>> >>> That's unrelated, but I guess w could add a MAP_NOUNMAP flag, and then >>> you can use MAP_FIXED | MAP_NOUNMAP or something. >>> >>> But that has nothing to do with the 47-vs-56 bit issue. >>> >>>> How about MAP_LIMIT where the address passed in is interpreted as an >>>> upper bound instead of a fixed address? >>> >>> Again, that's a unrelated semantic issue. Right now - if you don't >>> pass in MAP_FIXED at all, the "addr" argument is used as a starting >>> value for deciding where to find an unmapped area. But there is no way >>> to specify the end. That would basically be what the process control >>> thing would be (not per-system-call, but per-thread ). >>> >> >> What I'm trying to say is: if we're going to do the route of 48-bit >> limit unless a specific mmap call requests otherwise, can we at least >> have an interface that doesn't suck? I've got a set of patches that I've meant to send out as an RFC for a while that tries to address userspace control of address space layout and covers many of these ideas. There is a new syscall and set of prctls for controlling the "mmap layout" (i.e., get_unmapped_area search range) that look something like this: struct mmap_layout { unsigned long start; unsigned long end; /* * These are equivalent to mmap_legacy_base and mmap_base, * but are not really needed in this proposal. */ unsigned long low_base; unsigned long high_base; unsigned long flags; }; /* For flags */ #define MMAP_TOPDOWN 1 struct layout_mmap_args { unsigned long addr; unsigned long len; unsigned long prot; unsigned long flags; unsigned long fd; unsigned long off; struct mmap_layout layout; }; void *layout_mmap(struct layout_mmap_args *args); int prctl(PR_GET_MMAP_LAYOUT, struct mmap_layout *layout); int prctl(PR_SET_MMAP_LAYOUT, struct mmap_layout *layout); The prctls control the default range that mmap and friends will allocate. For 56-bit user address space, it could default to [mmap_min_addr, 1<<47), as Linus suggests. Applications that want the full address space can increase it to cover the entire range. The layout_mmap syscall allows one-off mappings that fall outside the default layout, and nicely solves the "MAP_FIXED but don't unmap anything problem" by passing an explicit range to check without actually setting MAP_FIXED. This idea is quite similar to the MAX_VADDR + default get_unmapped_area behavior ides, just more generalized to give userspace more control over the ultimate behavior of get_unmapped_area. PS. Apologies if my email client screwed up this message. I didn't have this thread in my client and have tried to import it from another account. From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Pratt Subject: Re: [PATCHv3 33/33] mm, x86: introduce PR_SET_MAX_VADDR and PR_GET_MAX_VADDR Date: Mon, 20 Feb 2017 22:10:17 -0800 Message-ID: References: <20170217141328.164563-1-kirill.shutemov@linux.intel.com> <20170217141328.164563-34-kirill.shutemov@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Return-path: In-Reply-To: Sender: owner-linux-mm@kvack.org To: luto@amacapital.net Cc: torvalds@linux-foundation.org, kirill.shutemov@linux.intel.com, akpm@linux-foundation.org, x86@kernel.org, tglx@linutronix.de, mingo@redhat.com, arnd@arndb.de, hpa@zytor.com, ak@linux.intel.com, dave.hansen@intel.com, linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, catalin.marinas@arm.com, linux-api@vger.kernel.org List-Id: linux-api@vger.kernel.org Sigh... apologies for the HTML. Trying again... On Mon, Feb 20, 2017 at 9:21 PM, Michael Pratt wrote: > On Fri, Feb 17, 2017 at 3:02 PM, Andy Lutomirski wrote: >> On Fri, Feb 17, 2017 at 1:01 PM, Linus Torvalds >> wrote: >>> On Fri, Feb 17, 2017 at 12:12 PM, Andy Lutomirski wrote: >>>> >>>> At the very least, I'd want to see >>>> MAP_FIXED_BUT_DONT_BLOODY_UNMAP_ANYTHING. I *hate* the current >>>> interface. >>> >>> That's unrelated, but I guess w could add a MAP_NOUNMAP flag, and then >>> you can use MAP_FIXED | MAP_NOUNMAP or something. >>> >>> But that has nothing to do with the 47-vs-56 bit issue. >>> >>>> How about MAP_LIMIT where the address passed in is interpreted as an >>>> upper bound instead of a fixed address? >>> >>> Again, that's a unrelated semantic issue. Right now - if you don't >>> pass in MAP_FIXED at all, the "addr" argument is used as a starting >>> value for deciding where to find an unmapped area. But there is no way >>> to specify the end. That would basically be what the process control >>> thing would be (not per-system-call, but per-thread ). >>> >> >> What I'm trying to say is: if we're going to do the route of 48-bit >> limit unless a specific mmap call requests otherwise, can we at least >> have an interface that doesn't suck? I've got a set of patches that I've meant to send out as an RFC for a while that tries to address userspace control of address space layout and covers many of these ideas. There is a new syscall and set of prctls for controlling the "mmap layout" (i.e., get_unmapped_area search range) that look something like this: struct mmap_layout { unsigned long start; unsigned long end; /* * These are equivalent to mmap_legacy_base and mmap_base, * but are not really needed in this proposal. */ unsigned long low_base; unsigned long high_base; unsigned long flags; }; /* For flags */ #define MMAP_TOPDOWN 1 struct layout_mmap_args { unsigned long addr; unsigned long len; unsigned long prot; unsigned long flags; unsigned long fd; unsigned long off; struct mmap_layout layout; }; void *layout_mmap(struct layout_mmap_args *args); int prctl(PR_GET_MMAP_LAYOUT, struct mmap_layout *layout); int prctl(PR_SET_MMAP_LAYOUT, struct mmap_layout *layout); The prctls control the default range that mmap and friends will allocate. For 56-bit user address space, it could default to [mmap_min_addr, 1<<47), as Linus suggests. Applications that want the full address space can increase it to cover the entire range. The layout_mmap syscall allows one-off mappings that fall outside the default layout, and nicely solves the "MAP_FIXED but don't unmap anything problem" by passing an explicit range to check without actually setting MAP_FIXED. This idea is quite similar to the MAX_VADDR + default get_unmapped_area behavior ides, just more generalized to give userspace more control over the ultimate behavior of get_unmapped_area. PS. Apologies if my email client screwed up this message. I didn't have this thread in my client and have tried to import it from another account. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org