Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753427AbdCNCen (ORCPT ); Mon, 13 Mar 2017 22:34:43 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:35213 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751422AbdCNCee (ORCPT ); Mon, 13 Mar 2017 22:34:34 -0400 From: Till Smejkal X-Google-Original-From: Till Smejkal Date: Mon, 13 Mar 2017 19:34:27 -0700 To: Vineet Gupta Cc: Till Smejkal , Richard Henderson , Ivan Kokshaysky , Matt Turner , Russell King , Catalin Marinas , Will Deacon , Steven Miao , Richard Kuo , Tony Luck , Fenghua Yu , James Hogan , Ralf Baechle , "James E.J. Bottomley" , Helge Deller , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Martin Schwidefsky , Heiko Carstens , Yoshinori Sato , Rich Felker , "David S. Miller" , linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, adi-buildroot-devel@lists.sourceforge.net, linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org, linux-metag@vger.kernel.org, linux-mips@linux-mips.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-xtensa@linux-xtensa.org, linux-media@vger.kernel.org, linux-mtd@lists.infradead.org, linux-usb@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-aio@kvack.org, linux-mm@kvack.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, alsa-devel@alsa-project.org, Ingo Molnar , Thomas Gleixner , Andy Lutomirski Subject: Re: [RFC PATCH 10/13] mm: Introduce first class virtual address spaces Message-ID: <20170314023427.3p4a5qxtl5eh5epi@arch-dev> Mail-Followup-To: Vineet Gupta , Till Smejkal , Richard Henderson , Ivan Kokshaysky , Matt Turner , Russell King , Catalin Marinas , Will Deacon , Steven Miao , Richard Kuo , Tony Luck , Fenghua Yu , James Hogan , Ralf Baechle , "James E.J. Bottomley" , Helge Deller , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Martin Schwidefsky , Heiko Carstens , Yoshinori Sato , Rich Felker , "David S. Miller" , linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, adi-buildroot-devel@lists.sourceforge.net, linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org, linux-metag@vger.kernel.org, linux-mips@linux-mips.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-xtensa@linux-xtensa.org, linux-media@vger.kernel.org, linux-mtd@lists.infradead.org, linux-usb@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-aio@kvack.org, linux-mm@kvack.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, alsa-devel@alsa-project.org, Ingo Molnar , Thomas Gleixner , Andy Lutomirski MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20170306 (1.8.0) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2541 Lines: 44 Hi Vineet, On Mon, 13 Mar 2017, Vineet Gupta wrote: > I've not looked at the patches closely (or read the references paper fully yet), > but at first glance it seems on ARC architecture, we can can potentially > use/leverage this mechanism to implement the shared TLB entries. Before anyone > shouts these are not same as the IA64/x86 protection keys which allow TLB entries > with different protection bits across processes etc. These TLB entries are > actually *shared* by processes. > > Conceptually there's shared address spaces, independent of processes. e.g. ldso > code is shared address space #1, libc (code) #2 .... System can support a limited > number of shared addr spaces (say 64, enough for typical embedded sys). > > While Normal TLB entries are tagged with ASID (Addr space ID) to keep them unique > across processes, Shared TLB entries are tagged with Shared address space ID. > > A process MMU context consists of ASID (a single number) and a SASID bitmap (to > allow "subscription" to multiple Shared spaces. The subscriptions are set up bu > userspace ld.so which knows about the libs process wants to map. > > The restriction ofcourse is that the spaces are mapped at *same* vaddr is all > participating processes. I know this goes against whole security, address space > randomization - but it gives much better real time performance. Why does each > process need to take a MMU exception for libc code... > > So long story short - it seems there can be multiple uses of this infrastructure ! During the development of this code, we also looked at shared TLB entries, but the other way around. We wanted to use them to prevent flushing of TLB entries of shared memory regions when switching between multiple ASes. Unfortunately, we never finished this part of the code. However, we also investigated into a different use-case for first class virtual address spaces that is related to what you propose if I didn't understand something wrong. The idea is to move shared libraries into their own first class virtual address space and only load some small trampoline code in the application AS. This trampoline code performs the VAS switch in the libraries AS and execute the requested function there. If we combine this architecture with tagged TLB entries to prevent TLB flushes during the switch operation, it can also reach an acceptable performance. A side effect of moving the shared library into its own AS is that it can not be used by ROP-attacks because it is not accessible in the application's AS. Till