From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id AA832CFC5EB for ; Thu, 10 Oct 2024 18:35:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0D75F6B0082; Thu, 10 Oct 2024 14:35:55 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 087C26B0083; Thu, 10 Oct 2024 14:35:55 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E91556B0085; Thu, 10 Oct 2024 14:35:54 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id CDA086B0082 for ; Thu, 10 Oct 2024 14:35:54 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 68706804A6 for ; Thu, 10 Oct 2024 18:35:51 +0000 (UTC) X-FDA: 82658546628.07.EC012C2 Received: from bout3.ijzerbout.nl (bout3.ijzerbout.nl [136.144.140.114]) by imf04.hostedemail.com (Postfix) with ESMTP id DD2214000C for ; Thu, 10 Oct 2024 18:35:49 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=ijzerbout.nl header.s=key header.b=TnwSfC3B; dmarc=none; spf=pass (imf04.hostedemail.com: domain of kees@ijzerbout.nl designates 136.144.140.114 as permitted sender) smtp.mailfrom=kees@ijzerbout.nl ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1728585201; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=I0EZ6HkQ9I7eF0DetXqDrQTnXavDC1PLwU47uVpLkD4=; b=gTuvZTIe86QZue3TESqQuKNaEi21HlqtGPCjDG2vkQma5bQpoAO03ctQ31tuwFldf7Td3k +TwPsaCl+B+5CEo6KvMQDqdDrvqfP8vuYJy6v2ki8IXRaRv2wUPZeNMmMMr/8krecI0O0Z B2qqPsqOcOeWHgxdA7ZHkSX4eKpwN+A= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1728585201; a=rsa-sha256; cv=none; b=I/T8wxIv/BZA8vMe4vqnGYd+PfpdX2TQYL5kpDXI0ouc0yfjuN6TYpJ27Ugoz1/aBt5yED Nz5oTsDlwzTmBU03/qDShw8i9kFwFQW3YYyCgZzRoHbQKX0ND53179c5bcwKkWN6Chyft8 ZX0jEuz7VmdSZQh/afseBO3RAe+ZXU0= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=ijzerbout.nl header.s=key header.b=TnwSfC3B; dmarc=none; spf=pass (imf04.hostedemail.com: domain of kees@ijzerbout.nl designates 136.144.140.114 as permitted sender) smtp.mailfrom=kees@ijzerbout.nl DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ijzerbout.nl; s=key; t=1728585350; bh=eO8i66PrBt/aJfIHr67M2yWYkbNNStHt47cJJCQ8lLg=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=TnwSfC3B0BzzbrbBXfYCTvLzIQE1VFcC2vDoODjZOiRbhCpvxs+nfBrgLRAmHbBcp 5nDkTl4JQCQ0Wy/pLIF9/vFfww5UJ7PllGdlDfCRY4FgF60cuMAONiSY28SXpZ/fah ofsTg0sJAj3lUJpCxa6onaZfbwwGyEE3F+sIl/MzmrdHNasu+qZYD2CQrQKKnIrTre jEGUntoI51WphR4XjRXlRX68PsX4ZEqW4Lig8ApC7stf8X5g23ZhKSrvK2T2Yg2D5A bDv/1YoYnX+4WK7gSe7xgNsbMfMhOH2hPirF455+QlQzq1JgcpZmps0ommzymfrvIp q2yGRxotng1Sc5OlnXZIYfIyoPLe78QPg5yomWhS/7EpKy8gm5XCv2fZL2X1/G4BTR HL2kBhQM874WRNw9Pe4sCOauh/y6zMseb5uFaaTGvb5Bwf1+uMfTKAYUXYiqB6xWHZ FMRiB8gbs1uwwHzedLTctQNTtkBO6P4IZltp+SoRTwdUBuk2Am+I+Y/c5xNGGQwcTo dfQXGkuiHFMt18pGbziRX9AoIhYRkcXuQB6IdBahXiHe06KoZakmU5fKhn5ggdgeZF sIwBjRHZR9oCPZjKzUyfzG6lTzteD6iFNQ1wWMF1seN66YAyRB45H5n//oQ2UNHpBx anTYx1ofeL2gjEtOuPaxF2ZM= Received: from [IPV6:2a10:3781:99:1:1ac0:4dff:fea7:ec3a] (racer.ijzerbout.nl [IPv6:2a10:3781:99:1:1ac0:4dff:fea7:ec3a]) by bout3.ijzerbout.nl (Postfix) with ESMTPSA id DF155167DD7; Thu, 10 Oct 2024 20:35:47 +0200 (CEST) Message-ID: <936057f4-e461-4977-85e7-6100127c9574@ijzerbout.nl> Date: Thu, 10 Oct 2024 20:35:44 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v5 7/8] execmem: add support for cache of large ROX pages To: Mike Rapoport , Andrew Morton Cc: Andreas Larsson , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Brian Cain , Catalin Marinas , Christoph Hellwig , Christophe Leroy , Dave Hansen , Dinh Nguyen , Geert Uytterhoeven , Guo Ren , Helge Deller , Huacai Chen , Ingo Molnar , Johannes Berg , John Paul Adrian Glaubitz , Kent Overstreet , "Liam R. Howlett" , Luis Chamberlain , Mark Rutland , Masami Hiramatsu , Matt Turner , Max Filippov , Michael Ellerman , Michal Simek , Oleg Nesterov , Palmer Dabbelt , Peter Zijlstra , Richard Weinberger , Russell King , Song Liu , Stafford Horne , Steven Rostedt , Thomas Bogendoerfer , Thomas Gleixner , Uladzislau Rezki , Vineet Gupta , Will Deacon , bpf@vger.kernel.org, linux-alpha@vger.kernel.org, linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-mm@kvack.org, linux-modules@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-riscv@lists.infradead.org, linux-sh@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-trace-kernel@vger.kernel.org, linux-um@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, loongarch@lists.linux.dev, sparclinux@vger.kernel.org, x86@kernel.org References: <20241009180816.83591-1-rppt@kernel.org> <20241009180816.83591-8-rppt@kernel.org> Content-Language: en-US From: Kees Bakker In-Reply-To: <20241009180816.83591-8-rppt@kernel.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: DD2214000C X-Stat-Signature: oj3mdsrswt3h71mdxa6ak5479ro684qg X-Rspam-User: X-HE-Tag: 1728585349-550474 X-HE-Meta: U2FsdGVkX1+iQB8qeWHUTHqP20uQQEQ8apql2TAYzBq7H2uKckKqD832nOCdNkXQ4MSrERw3eAfHaw5n6cNLP9/lxPZuWmbbn1On17WTRcaBQTYc4xk4r5aJZQ0qyYFii8Mox475RcQsLQoqdY1m8x506kcqJUeeI5yX+0MRQ0A3aDC3YvqXvII8pk6Z1sWPz+KUAymeK6axHrmCjRXsBUwTQaMVDzeQa455CvhEQesZqvH6hqmefRnYcqzo+zR9NUNcM46ZInbBSWZACRqlmXLv2PZVhkjK6u2yCyssN/n5VB0QZ0cnMN62jB5oNXy39GIctSz1DEVbamyEg9iLV5uxZYhf58qqq0zkLC+/kcYSezLJz/5FGEq4UezXyg0rLfY6jvdLnuhyRXsaUveiidhpLwqNEOhNIPTMHheYChOvl0jRQOmRT8iXu4ZtK8g+oPGzUHB5vI5KmOIQYlPQTIk/bOCFb5z6Hws67z33z3ZYx6wC+hwx1xLqhJJD1ZxaqA+CBcrJ9EsmIGhsPsEcijBZNAZouvoOxT7TfehP8D2QipK7YN9LUt7x+hW9Wi+17TjOfKlDMbGG5V+ZCLyRL4gyCL0vMfPPDiTfGtfL4thHfEXegI6YiLxn60psXDVbGK2tLBEhux0kZo3lj6K4YmD+tSoY5MpM50+vjLq5xk23DLGEmahJ7pNDthZVz27arKGQQ3698xRcT/LvwqpnB+fAURamwYFCFyCIq3GMnS+wdStQlHn8Sf6yQ4jncKdJSxkUBLQ3r0BVgkfDQQXiNSkyuPMw/bpQ9H32zsYE4313e9C1hR2zWsxF4FORCIZK518iovvoE9VRB0NtwVxjo7Y2U+PpY8GMRA04qZf90rZtrgHkFhXT739OwQ3A1u7Jm9f5yzbqQ4oceW6dSkcDE52bhn18mJ0+Ty7ICU6XH/rGLTmr8/c5FK7ERUjNt3xJ6WiWM7SIpxI7sHxENzS POZYU4H+ yKG5Dh/5qv7au/ABIK9BkMBDQ1OBaJp6zvGnsMmevY3vIcn3MTmZMpNX0zQ69UQ41LhhdhEpBprYekqJwf4mDp28m2aLXDZI+y611sh6nR25o1dY2kcfFA+6EUpKhjW8kH6FoRCHwBRvGzGxS9idRdIaT1Z5ga1Wu7MLUEGr11eR4zPf/8xwUg8vfsVcy0Vye+PTPRymJm6krEBCm/rLQJ1UANNzKtwQj8fv5ScqziXh4VSrmE9LkW6CUGZxQlpNWRmL0m5JOw8GUOZ/g0zsyWvtyIa0oFaGQzsd2 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Op 09-10-2024 om 20:08 schreef Mike Rapoport: > From: "Mike Rapoport (Microsoft)" > > Using large pages to map text areas reduces iTLB pressure and improves > performance. > > Extend execmem_alloc() with an ability to use huge pages with ROX > permissions as a cache for smaller allocations. > > To populate the cache, a writable large page is allocated from vmalloc with > VM_ALLOW_HUGE_VMAP, filled with invalid instructions and then remapped as > ROX. > > Portions of that large page are handed out to execmem_alloc() callers > without any changes to the permissions. > > When the memory is freed with execmem_free() it is invalidated again so > that it won't contain stale instructions. > > The cache is enabled when an architecture sets EXECMEM_ROX_CACHE flag in > definition of an execmem_range. > > Signed-off-by: Mike Rapoport (Microsoft) > --- > include/linux/execmem.h | 2 + > mm/execmem.c | 317 +++++++++++++++++++++++++++++++++++++++- > mm/internal.h | 1 + > mm/vmalloc.c | 5 + > 4 files changed, 320 insertions(+), 5 deletions(-) > [...] > +static void execmem_cache_clean(struct work_struct *work) > +{ > + struct maple_tree *free_areas = &execmem_cache.free_areas; > + struct mutex *mutex = &execmem_cache.mutex; > + MA_STATE(mas, free_areas, 0, ULONG_MAX); > + void *area; > + > + mutex_lock(mutex); > + mas_for_each(&mas, area, ULONG_MAX) { > + size_t size; > + No need to check for !area, because it is already guaranteed by the while loop condition (mas_for_each) > + if (!area) > + continue; > + > + size = mas_range_len(&mas); > + > + if (IS_ALIGNED(size, PMD_SIZE) && > + IS_ALIGNED(mas.index, PMD_SIZE)) { > + struct vm_struct *vm = find_vm_area(area); > + > + execmem_set_direct_map_valid(vm, true); > + mas_store_gfp(&mas, NULL, GFP_KERNEL); > + vfree(area); > + } > + } > + mutex_unlock(mutex); > +} >