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 BB711C10F1A for ; Thu, 9 May 2024 04:00:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 23F976B0096; Thu, 9 May 2024 00:00:35 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1CA146B0098; Thu, 9 May 2024 00:00:35 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 042CB6B009E; Thu, 9 May 2024 00:00:34 -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 D39A06B0096 for ; Thu, 9 May 2024 00:00:34 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 810D016125D for ; Thu, 9 May 2024 04:00:34 +0000 (UTC) X-FDA: 82097505588.17.C00A35F Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf13.hostedemail.com (Postfix) with ESMTP id 1AE3620006 for ; Thu, 9 May 2024 04:00:31 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=none; spf=pass (imf13.hostedemail.com: domain of "SRS0=k3mh=MM=goodmis.org=rostedt@kernel.org" designates 145.40.73.55 as permitted sender) smtp.mailfrom="SRS0=k3mh=MM=goodmis.org=rostedt@kernel.org"; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1715227232; 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; bh=PRSO0KL2gHmGj8UkTLlN/HzLIKVybqcaVipePe81Vrk=; b=4H7yZERX8hmd30FrHgfXMuJjXGNmYbGGMKQyHceRmWrPQmDd+9UfjbVHItDLarXxXOLG2J wuw/VwL31YneI6B0tB6pDTX6clySI948VWVUE/UDFeGANMxNM+M0enZGfGql5VUvjm3Mty RHvOwwGSrnzHpO0ZscjvLi0xj3iLrK4= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=none; spf=pass (imf13.hostedemail.com: domain of "SRS0=k3mh=MM=goodmis.org=rostedt@kernel.org" designates 145.40.73.55 as permitted sender) smtp.mailfrom="SRS0=k3mh=MM=goodmis.org=rostedt@kernel.org"; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1715227232; a=rsa-sha256; cv=none; b=WYKwemOmohbK6K8SDCd6EI3opB2oai80rTAUtnTn+Pc9XvsusE3FJTSgWyARpgDYgL5Ap5 x79I+ANxcUXr4jiE3tCP44fFT0xMqWjGsh2eOoaO57p3R64Qlw37LTk1PzJRdbe98Jw0vP O5PTcER9GW97yaXVMV5gVR28InbS3kQ= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 4D19FCE0969; Thu, 9 May 2024 04:00:28 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 86446C116B1; Thu, 9 May 2024 04:00:25 +0000 (UTC) Date: Thu, 9 May 2024 00:00:23 -0400 From: Steven Rostedt To: Mike Rapoport Cc: "Guilherme G. Piccoli" , "Luck, Tony" , Kees Cook , Joel Fernandes , "linux-kernel@vger.kernel.org" , "linux-trace-kernel@vger.kernel.org" , Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton , "Liam R. Howlett" , Vlastimil Babka , Lorenzo Stoakes , "linux-mm@kvack.org" , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , "x86@kernel.org" , "H. Peter Anvin" , Peter Zijlstra , "linux-hardening@vger.kernel.org" , Guenter Roeck , Ross Zwisler , "wklin@google.com" , Vineeth Remanan Pillai , Suleiman Souhlal , Linus Torvalds , Catalin Marinas , Will Deacon Subject: Re: [POC][RFC][PATCH 0/2] pstore/mm/x86: Add wildcard memmap to map pstore consistently Message-ID: <20240509000023.096d4032@rorschach.local.home> In-Reply-To: References: <20240409210254.660888920@goodmis.org> <20240409172358.34ea19f0@gandalf.local.home> <202404091519.B7B2221@keescook> <3391c693-cf54-526b-79a8-d565e7140947@igalia.com> <20240411154007.5bdf8d95@gandalf.local.home> <20240412132243.053ad096@gandalf.local.home> <20240501105455.42b78a0b@gandalf.local.home> X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Rspam-User: X-Rspamd-Queue-Id: 1AE3620006 X-Rspamd-Server: rspam06 X-Stat-Signature: y9ttgbnkkr6ei4ibzfn4rfubcm5i9gyn X-HE-Tag: 1715227231-544413 X-HE-Meta: U2FsdGVkX18EawTo/nw0W79WKvmoKfiYkCZum4x+elPDKIKAbZDbOK+8/QhAChjj+JUEFSOP079LgA4Gn3zaggCfV8xcn03LwOiNwhXH0ttirZmglcJIHmu/i04VRsHKM8/AqEtyOi4j3hR2nPBUKCBcf+rrqfXATUl46KKECB/RAQW/xYnf0/IbOih6h4u/vjZ8QohHyzrnWGvqwXuGgB9GM/hpegsbZwbj82wnXclrLcr2ddNh9JVaidzS4AoTK4noWon3UQ99o4JyE7qFoUmPJ0o+bcH6ujPs8fVEFdqUnzglvYZba1HS7nm08+/aEZXLxzodNYausNMxfBW4DLAjOEbN4o4MKaO4QWlcRfZBY5+p0AREkXFDq7OwgXet4gWQQFxsZRGNm7MJ85MXmoG34hHkKkHyVp4ky1AkViSVshFNtHAfzObdD1LOYZz0slDcB6NWuIsy8lzsEONl1Z0l7X/7ZaloaZrsFcadMKNZoOgsOHWxKNDRoaeQncNxIn42wo0GXv0dEp+VatfvLxcXu5LhrTv4sX5eDtC5+QuR7sqHv/P2Q4apFHtFgsMF+NAR0ohAt//FuUYWanYcwiejhlgwLG+TJBTIVjIk9874GicCy9zHWDRkAJyU/KB9Z7nc9I2nKM3/ceCw7eg+xR0K5TFcqt6zfOgt5lm7YOxUcTNVibLhQo/vZRfdc3IJBVMluPqH3GuuLAz1ky1ZBukee8oRBarYWPxOA7Nm3FFe6UZGPxsWuKFfttFIQ3+kM8lOOUqxOmPpnS7E5gtvYaXDQjK1DMOsWSgk7nJPc5G3z7+PPRMN/EekxolV349sNyaNAPA98fl6cMJgwTz+48HtKTcl63oZYDU52hDNgBPUJsn3zeVEn40nu4CN4GVG5pJQf+8A5U9fCfsbbtlqQmOheHZcaUVnkzITqy9v8fkfZJmHccoBhFiFNc6euSx0+X9HoAqmi6oWz5jooW0 9euFkqo+ xF2FlX1IuODC2bchrGnX9GMxPbzXB5vv4nDoAQ21WfzxzcysdA7F539s8nmoOq61EU/X7XNiiJS67twkw4tM0BzH1bNWxEU+F3uQebonu15AK09qPXgM2A/0kjPW1JC6leUmvigBb0c+Mh8+k3fmXzzHuYBTaTvxeYXI4HtUvUSX1/PkbsHTaLbchtthfUaceVWrYe08DtIgsfA6p89iU+e9vs210AWCJqw29O8olEyrKzxIRDvfhyFw1+4cMV1mBU3kn4adyw95A84aAhSPiQxdbNgpig5djezcR3gYdgM2lzftN4Fz72ubZ1H5pGp1DWkrLP2T5fDb9YgS/dCrI+hDL4J4UwkWMP+kA 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: On Wed, 1 May 2024 18:30:40 +0300 Mike Rapoport wrote: > > So this will allocate the same physical location for every boot, if booting > > the same kernel and having the same physical memory layout? > > Up to kaslr that might use that location for the kernel image. > But it's the same as allocating from e820 after kaslr. > > And, TBH, I don't have good ideas how to ensure the same physical location > with randomization of the physical address of the kernel image. > I tried this approach and it unfortunately picks a different physical location every time :-( So it is either adding to e820 tables or we create a new way to allocate memory at early boot up. Below is the patch I used. -- Steve diff --git a/include/linux/mm.h b/include/linux/mm.h index b6bdaa18b9e9..74aaf0bcb363 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -4204,4 +4204,6 @@ static inline bool pfn_is_unaccepted_memory(unsigned long pfn) return range_contains_unaccepted_memory(paddr, paddr + PAGE_SIZE); } +int memmap_named(const char *name, unsigned long *start, unsigned long *size); + #endif /* _LINUX_MM_H */ diff --git a/mm/memblock.c b/mm/memblock.c index d09136e040d3..3c015395d262 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -2243,6 +2243,101 @@ void __init memblock_free_all(void) pages = free_low_memory_core_early(); totalram_pages_add(pages); } +/* For wildcard memory requests, have a table to find them later */ +#define MEMMAP_MAX_MAPS 8 +#define MEMMAP_NAME_SIZE 16 +struct memmap_map { + char name[MEMMAP_NAME_SIZE]; + unsigned long start; + unsigned long size; +}; +static struct memmap_map memmap_list[MEMMAP_MAX_MAPS] __initdata; +static int memmap_size __initdata; + +/* Add wildcard region with a lookup name */ +static int __init memmap_add(u64 start, u64 size, const char *name) +{ + struct memmap_map *map; + + if (!name || !name[0] || strlen(name) >= MEMMAP_NAME_SIZE) + return -EINVAL; + + if (memmap_size >= MEMMAP_MAX_MAPS) + return -1; + + map = &memmap_list[memmap_size++]; + map->start = start; + map->size = size; + strcpy(map->name, name); + return 0; +} + +/** + * memmap_named - Find a wildcard region with a given name + * @name: The name that is attached to a wildcard region + * @start: If found, holds the start address + * @size: If found, holds the size of the address. + * + * Returns: 1 if found or 0 if not found. + */ +int __init memmap_named(const char *name, unsigned long *start, unsigned long *size) +{ + struct memmap_map *map; + int i; + + for (i = 0; i < memmap_size; i++) { + map = &memmap_list[i]; + if (!map->size) + continue; + if (strcmp(name, map->name) == 0) { + *start = map->start; + *size = map->size; + return 1; + } + } + return 0; +} + +/* + * Parse early_reserve_mem=nn:align:name + */ +static int __init early_reserve_mem(char *p) +{ + phys_addr_t start, size, align; + char *oldp; + int err; + + if (!p) + return -EINVAL; + + oldp = p; + size = memparse(p, &p); + if (p == oldp) + return -EINVAL; + + if (*p != ':') + return -EINVAL; + + align = memparse(p+1, &p); + if (*p != ':') + return -EINVAL; + + start = memblock_phys_alloc(size, align); + if (!start) + return -ENOMEM; + + p++; + err = memmap_add(start, size, p); + if (err) { + memblock_phys_free(start, size); + return err; + } + + p += strlen(p); + + return *p == '\0' ? 0: -EINVAL; +} +__setup("early_reserve_mem=", early_reserve_mem); #if defined(CONFIG_DEBUG_FS) && defined(CONFIG_ARCH_KEEP_MEMBLOCK) static const char * const flagname[] = {