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 CC47BE7716C for ; Thu, 5 Dec 2024 15:22:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D6A906B00CD; Thu, 5 Dec 2024 10:19:20 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id B21536B0109; Thu, 5 Dec 2024 10:19:14 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AFB0A6B00B7; Thu, 5 Dec 2024 10:19:10 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id C7EE84401B5 for ; Wed, 2 Oct 2024 12:09:04 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 66589C0316 for ; Wed, 2 Oct 2024 16:09:04 +0000 (UTC) X-FDA: 82629146208.07.D5EF39F Received: from forwardcorp1d.mail.yandex.net (forwardcorp1d.mail.yandex.net [178.154.239.200]) by imf09.hostedemail.com (Postfix) with ESMTP id 57038140020 for ; Wed, 2 Oct 2024 16:09:02 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=yandex-team.com header.s=default header.b=r7jyfNdc; dmarc=pass (policy=none) header.from=yandex-team.com; spf=pass (imf09.hostedemail.com: domain of arbn@yandex-team.com designates 178.154.239.200 as permitted sender) smtp.mailfrom=arbn@yandex-team.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1727885238; a=rsa-sha256; cv=none; b=keVRd7oLj5CgtdCCp54ow32el0pmsuNkYwBCFMclYdTH4HgsIfGWUm+5Exc6UgB6AC3Hfa a/y+gJqZ3lhainDPBUAzR44vB9IFZnZQd17ObV7IV3dyw6jO0aRJ+On3CLMiCifNFS9mge mYGzFC/G6OrX463S3TYbwWbbBd6owrE= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=yandex-team.com header.s=default header.b=r7jyfNdc; dmarc=pass (policy=none) header.from=yandex-team.com; spf=pass (imf09.hostedemail.com: domain of arbn@yandex-team.com designates 178.154.239.200 as permitted sender) smtp.mailfrom=arbn@yandex-team.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1727885238; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Buw6OtY4vaTEiLfE/rpef765HwG5RsoTmBzPC5wm+WI=; b=MaGQsKRa1EdDGPh+Vwwaf6vjRUMLJpfRguKdfiuGP61wuz1C4IIUP5DjmoWelzJOXoQdXw W18Hug0ysLMJd8nsb/oXZWlx6Fwo/gCwozJWltEB423gkgac83QBSEzObz8VPeDqxPZapq X5oRg8WfGPe823D5/W4EJ0VMfCnp3Gs= Received: from mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net [IPv6:2a02:6b8:c42:b1cb:0:640:2a1e:0]) by forwardcorp1d.mail.yandex.net (Yandex) with ESMTPS id CC29E60A0A; Wed, 2 Oct 2024 19:09:00 +0300 (MSK) Received: from dellarbn.yandex.net (unknown [10.214.35.248]) by mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id Z8emWD2IhiE0-zn4PxY97; Wed, 02 Oct 2024 19:08:59 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.com; s=default; t=1727885340; bh=Buw6OtY4vaTEiLfE/rpef765HwG5RsoTmBzPC5wm+WI=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=r7jyfNdcu/K1YYJQ5x6knMx5Nl49ROZZsg0QUwcs8pAkjxACaAuyrBlPZogqCEB6V 9NxYNkSHpbUIL/TAjsx2WCSnmAbHSj6ctGbfnRoo8DUx7sJv137cKVrtUwnBzmFt0M LJnhETmwa6hxGje8tRERsspaQJi5H+2Gj2LROC2E= From: Andrey Ryabinin To: linux-kernel@vger.kernel.org Cc: Alexander Graf , James Gowans , Mike Rapoport , Andrew Morton , linux-mm@kvack.org, Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Eric Biederman , kexec@lists.infradead.org, Steven Rostedt , Masami Hiramatsu , Mathieu Desnoyers , linux-trace-kernel@vger.kernel.org, valesini@yandex-team.com, Andrey Ryabinin Subject: [RFC PATCH 4/7] mm/memblock: Add MEMBLOCK_PRSRV flag Date: Wed, 2 Oct 2024 18:07:19 +0200 Message-ID: <20241002160722.20025-5-arbn@yandex-team.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20241002160722.20025-1-arbn@yandex-team.com> References: <20241002160722.20025-1-arbn@yandex-team.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Yandex-Filter: 1 X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 57038140020 X-Stat-Signature: yj3cs3jnn9939iq7spa66f43nu1hyfem X-Rspam-User: X-HE-Tag: 1727885342-732 X-HE-Meta: U2FsdGVkX18bhAy+TQDl0tQFGIhqjFZoCYdZbzc4+wfUwzTzHQATApQVFluYf6N+q4R2wSeO8fvrZTTFM879F571Zp8Bd1zSIdoaX9bwSOC8/SKvV5A/Zg44K3E6+wCwqtyC3BFo6QDHbdMn2PZgyDEF1EgdG96GORkXT5pWfSRjdOS1Fg4Pa2OmUOqQpJ8BxArMT7fT7pSarISfBT/jJbKMf1Wu3mWbyN9M4fgMn4NAECXTfs1ASyXCnnTqPyTPRFstprx6C7fpuOv/QgOn7OLXZ5y2ausABLloZIf0rM//hT/OdRC8uSPlfNT//2koC38F7oEEMI14Xkaf/S0f/DkYURZjpYuoEYdADTzVolvTaQ4XU10svkv3Zmmaf2/r15+xkTZ4YBfJEGV5Srz3t05XqVPcVaaXn2sOzy7J6L4VSwO8xOPNxgOVj6bIvwrT8DWVp09rzONJM6XYelhIdKkfldUhcpplS54pHLvLgXJiGtZUUUnfeGYVMzBpbWUbJ3Yo6ubC34YeLMAQl3mUIofYJB2UtmG0HBiuatnruGi3E7x5o0SwQLVeO4Tx2BwfJt7is6jnEtk05XZZXlarAO/XSztQhiRHnqrRY3zD2BCouCzyynFejSLQDI3f3aNGb9mgvvGuVT0GrCElNc2wekNznbhBfdbMCWTRulftShCeN3JtLDc4Mf8uOiMuFU2lyM3a3oOFwLkCSmSjmM9mJ+chnWobIJTyKEMV+QhtoAYaYCCG7CbYm76Af3Fp8Dyv6linLTPKaHmiVukCnPSu0WB4xTOOhZbx1jR5NlPOh4kyZtxpgA7WcmHOui+YxgV1KL8lvfT7Pdj+TW4cpD5wnqvrPKMVswPtutWJwI4RaFUQToWJFqBTdDyVW3DDPA0DYvTi0Tjne86QJ8gt09Z7IJlwzYK/hQMMt4JLyJoh2iyNdYqSzerFzP3kBdEAR/20RmLDTbDzDICEGyihjF9 6CW8P1GC YTu26qbKFKvWgZU2SycqRVnuJ4fyl7/iFx6Y//NM8O91AHId3rPrJSvD6dOz0Q1xyHxIQoCHH1qG7r2J6m7gc4dXvcKhv4H2nrU2vJfcaVJvkX3OGgJHKhF6bxH+Eil+7aZE3Zp14RHJPIaLWs3cl0JFEjriWcdrFwmYnvw99h9+mOdyW/+bdwvOpqPKceXI4FRir57Y6ue2/eQFePBIP1EtEpOVdd0pvQwFHyoDtKtSqWiQnJXeakGN/4kVQhWzZmlB1JULXb19kGAM8My62cta3RVBLx36V5llkCjLErbSwR1UwUeVfc36Je9cPrsCJX/TWLNkSDXvS43sy0mIOuSiil/3yFVTnZMkARVJDFxO0+eUITOvXsMWCmFQwN3QgDBVFAtmynZ4hyjGdroUJk5G6qBhSa/mhsCEnA0yUcMnAqX8kpM85U24YTw== 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: Add MEMBLOCK_PRSRV flag indicating that we don't need to initialize 'struct page' at all. The flag will be used in the following patches to mark memory intended to be kept intact across kexec. The 'struct page' for such region assumed to be initialized by the old kernel, so the new one shouldn't touch it. This is only initial RFC sketch, in which we assume that 'struct page' layout doens't change between old and new kernel. The proper solution would require some form of migration from old 'struct page' to the new one if layout did change. Signed-off-by: Andrey Ryabinin --- include/linux/memblock.h | 7 +++++++ mm/memblock.c | 9 ++++++++- mm/mm_init.c | 19 +++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/include/linux/memblock.h b/include/linux/memblock.h index 673d5cae7c813..b3c6029b03624 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h @@ -50,6 +50,7 @@ enum memblock_flags { MEMBLOCK_NOMAP = 0x4, /* don't add to kernel direct mapping */ MEMBLOCK_DRIVER_MANAGED = 0x8, /* always detected via a driver */ MEMBLOCK_RSRV_NOINIT = 0x10, /* don't initialize struct pages */ + MEMBLOCK_PRSRV = 0x20, /* struct page presreved during kexec, don't initialize */ }; /** @@ -132,6 +133,7 @@ int memblock_mark_mirror(phys_addr_t base, phys_addr_t size); int memblock_mark_nomap(phys_addr_t base, phys_addr_t size); int memblock_clear_nomap(phys_addr_t base, phys_addr_t size); int memblock_reserved_mark_noinit(phys_addr_t base, phys_addr_t size); +int memblock_reserved_mark_preserved(phys_addr_t base, phys_addr_t size); void memblock_free_all(void); void memblock_free(void *ptr, size_t size); @@ -271,6 +273,11 @@ static inline bool memblock_is_reserved_noinit(struct memblock_region *m) return m->flags & MEMBLOCK_RSRV_NOINIT; } +static inline bool memblock_is_preserved(struct memblock_region *m) +{ + return m->flags & MEMBLOCK_PRSRV; +} + static inline bool memblock_is_driver_managed(struct memblock_region *m) { return m->flags & MEMBLOCK_DRIVER_MANAGED; diff --git a/mm/memblock.c b/mm/memblock.c index 0389ce5cd281e..20ab3272cc166 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -1048,6 +1048,12 @@ int __init_memblock memblock_reserved_mark_noinit(phys_addr_t base, phys_addr_t MEMBLOCK_RSRV_NOINIT); } +int __init_memblock memblock_reserved_mark_preserved(phys_addr_t base, phys_addr_t size) +{ + return memblock_setclr_flag(&memblock.reserved, base, size, 1, + MEMBLOCK_PRSRV); +} + static bool should_skip_region(struct memblock_type *type, struct memblock_region *m, int nid, int flags) @@ -2181,7 +2187,8 @@ static void __init memmap_init_reserved_pages(void) * the MEMBLOCK_RSRV_NOINIT flag set */ for_each_reserved_mem_region(region) { - if (!memblock_is_reserved_noinit(region)) { + if (!memblock_is_reserved_noinit(region) && + !memblock_is_preserved(region)) { nid = memblock_get_region_node(region); start = region->base; end = start + region->size; diff --git a/mm/mm_init.c b/mm/mm_init.c index 4ba5607aaf194..b82c13077928f 100644 --- a/mm/mm_init.c +++ b/mm/mm_init.c @@ -837,6 +837,22 @@ static void __init init_unavailable_range(unsigned long spfn, node, zone_names[zone], pgcnt); } +static bool pfn_preserved(unsigned long *pfn) +{ + struct memblock_region *r; + + for_each_reserved_mem_region(r) { + if (memblock_is_preserved(r)) { + if (*pfn >= memblock_region_memory_base_pfn(r) && + *pfn < memblock_region_memory_end_pfn(r)) { + *pfn = memblock_region_memory_end_pfn(r); + return true; + } + } + } + return false; +} + /* * Initially all pages are reserved - free ones are freed * up by memblock_free_all() once the early boot process is @@ -889,6 +905,9 @@ void __meminit memmap_init_range(unsigned long size, int nid, unsigned long zone } } + if (pfn_preserved(&pfn)) + continue; + page = pfn_to_page(pfn); __init_single_page(page, pfn, zone, nid); if (context == MEMINIT_HOTPLUG) { -- 2.45.2