From patchwork Fri Apr 11 05:37:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Changyuan Lyu X-Patchwork-Id: 14047569 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 ADC36C369A2 for ; Fri, 11 Apr 2025 05:38:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DDEDC280161; Fri, 11 Apr 2025 01:38:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D5C2C28015B; Fri, 11 Apr 2025 01:38:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B8768280161; Fri, 11 Apr 2025 01:38:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 9814128015B for ; Fri, 11 Apr 2025 01:38:37 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 81EFABC274 for ; Fri, 11 Apr 2025 05:38:38 +0000 (UTC) X-FDA: 83320658316.23.55549AB Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) by imf22.hostedemail.com (Postfix) with ESMTP id DF078C0009 for ; Fri, 11 Apr 2025 05:38:36 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=ErTMKEuf; spf=pass (imf22.hostedemail.com: domain of 326r4ZwoKCFo492F8QM2FD8GG8D6.4GEDAFMP-EECN24C.GJ8@flex--changyuanl.bounces.google.com designates 209.85.214.201 as permitted sender) smtp.mailfrom=326r4ZwoKCFo492F8QM2FD8GG8D6.4GEDAFMP-EECN24C.GJ8@flex--changyuanl.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744349916; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=XwVp4OOgPlRngbn5ra+015ZDy9PB79QtA1kcHgCX6xE=; b=agn2YrTU44IZQzGIYjadcLhg4tb201qVBLs6Ocfe1X087izKfTa6SwCTfQMmWwtN5TnjsC lpgfeBUPp0i0zw8YZ059yz2K/jRpazuYrHabEFQF5y+kRNMbIOAgIj98XZdHkEh6NdWe9k orRFTqAjYk98PNoihWOBMWpkR5mgjaw= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=ErTMKEuf; spf=pass (imf22.hostedemail.com: domain of 326r4ZwoKCFo492F8QM2FD8GG8D6.4GEDAFMP-EECN24C.GJ8@flex--changyuanl.bounces.google.com designates 209.85.214.201 as permitted sender) smtp.mailfrom=326r4ZwoKCFo492F8QM2FD8GG8D6.4GEDAFMP-EECN24C.GJ8@flex--changyuanl.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744349916; a=rsa-sha256; cv=none; b=RotHVPxLjhUZQMaP5zM65wLznCErMUoWFq631/U2Vj7hAcsmFVWVImfPQxV7FthSCwCEfg dfL8nkHboSNackVjOVW//86v2Fsi8+8U5D35nrluDU0qv+pST2C3Z/1KR+xyuoFsbIslPQ a3wZIAjbSOxbe0rJg4ebbw3CljhtZaQ= Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-225974c6272so13492735ad.1 for ; Thu, 10 Apr 2025 22:38:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744349916; x=1744954716; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=XwVp4OOgPlRngbn5ra+015ZDy9PB79QtA1kcHgCX6xE=; b=ErTMKEufisQx7SSfC6LjZZhvn71KNEAjKwDlckz64lr8TMgllIL3eBYyHS1DmAfGF8 1WfzIxd2MG1ye5PkZPut+6wfydm6DA1OaJVJssdayV5jjlVZyxR4H/ijrhJ2w1B3z2su iZOowC0N/4rbJ3oX+mpMQQRP7uJng3TaCS0bQXYFkHZQnBr9Z135BcBn5JOZP6JSaDIA FbLbEbvuQE77uSFBQa0GZrMagiVLvFoM/yIBlmC3B5dGj+HtE8qaBF8Hi2DW5HiOvqVh jTOEhL4NzfF2wi5iNqDF9RWF9tMT4EQGo1P1/gXzJUVMmKEF5KzMrDHGQyAvpXCQ56Fv BmZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744349916; x=1744954716; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=XwVp4OOgPlRngbn5ra+015ZDy9PB79QtA1kcHgCX6xE=; b=Lfd5Sj7tGMzAOHaTqekHRl9Rot2s2Ml2WrPI3WCKo8sgfxAM09miALM1dj74xnpmB5 EwXvdVIr93YAtV7EVH2oV6j4CF/a7AgAAgO8A0uovegGnDpJx4iitOpRr5XaYrjquhat NZtz9yB4HoHTRKac77OTFkRQBNPV7w2LiQ6wcKkLMLeILO5y3yYvZAV2reqKEDnFh9FQ /T83rOg+dIUZUuTEAUayf+0PixB81ewhs9eBgxsXuFl9tCO9ZDHNDKfHdFNoXIiNBkc1 9j1sRCi/PnCainNgErCSnaqXa+I6GuQtrAW+pjLY4lSY3dV1b4+Hq+YW++4aTvQX9eDk L0sQ== X-Forwarded-Encrypted: i=1; AJvYcCVe9TRUfwl0UEiLzZJsFi27OuxL9BiXmNn1NiIMp89sAVIu1YR70oRAmzuvNoiyBQApipRUOuTduQ==@kvack.org X-Gm-Message-State: AOJu0Yy/eo0A7ddUse9FW9dj9W2qBlABcvq/XAkVF6gafb14nIVnR8jS 8YPOKqDC4ViX4nwELffRmEFOoUTCPP4EpEU1J0MD/wwXNT7b3Jwm5ThsNEzA9KRRU9EJg7E59hZ jklFBHPTG+mtogEWYMQ== X-Google-Smtp-Source: AGHT+IHxdPnuc2TYfLwCd9IDe8ouX7KQHFzd57k3DfleSG8BDX2oEcNCF76lTSltuytpC8emM71yRGFfu+F93+HC X-Received: from plgf6.prod.google.com ([2002:a17:902:ce86:b0:223:fb3a:ac08]) (user=changyuanl job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ebcb:b0:21a:7e04:7021 with SMTP id d9443c01a7336-22bea0c6794mr26802705ad.24.1744349915769; Thu, 10 Apr 2025 22:38:35 -0700 (PDT) Date: Thu, 10 Apr 2025 22:37:40 -0700 In-Reply-To: <20250411053745.1817356-1-changyuanl@google.com> Mime-Version: 1.0 References: <20250411053745.1817356-1-changyuanl@google.com> X-Mailer: git-send-email 2.49.0.604.gff1f9ca942-goog Message-ID: <20250411053745.1817356-10-changyuanl@google.com> Subject: [PATCH v6 09/14] arm64: add KHO support From: Changyuan Lyu To: linux-kernel@vger.kernel.org Cc: akpm@linux-foundation.org, anthony.yznaga@oracle.com, arnd@arndb.de, ashish.kalra@amd.com, benh@kernel.crashing.org, bp@alien8.de, catalin.marinas@arm.com, corbet@lwn.net, dave.hansen@linux.intel.com, devicetree@vger.kernel.org, dwmw2@infradead.org, ebiederm@xmission.com, graf@amazon.com, hpa@zytor.com, jgowans@amazon.com, kexec@lists.infradead.org, krzk@kernel.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, luto@kernel.org, mark.rutland@arm.com, mingo@redhat.com, pasha.tatashin@soleen.com, pbonzini@redhat.com, peterz@infradead.org, ptyadav@amazon.de, robh@kernel.org, rostedt@goodmis.org, rppt@kernel.org, saravanak@google.com, skinsburskii@linux.microsoft.com, tglx@linutronix.de, thomas.lendacky@amd.com, will@kernel.org, x86@kernel.org, Changyuan Lyu X-Rspamd-Queue-Id: DF078C0009 X-Stat-Signature: kjrn5fnt66hoeswkarpbmyes5opu6btb X-Rspam-User: X-Rspamd-Server: rspam12 X-HE-Tag: 1744349916-891163 X-HE-Meta: U2FsdGVkX18ly1w4+RtgKtoq+T1Dubdf+ZnKOxsNSt/p8PRJEQ10N0eO3bpm97PZtW9hkPOhNyiE4TTpOG4uHDnLQ5/OVhaSPgwseZEAP4YEJoOyZzJ1XpOHA4aOWJm5ZBfn7ObgLWP81Sn5vzEIvxxSfr7ZJov1F28JxGPRrfzepvz4aQ7FfD5TYby8CVaGAYlK2+LajvWWPxRqH4TlfR1Lx602tAyhaDYyYS2g3bTIjG6GtOHRoFGx4XctTwqrP2CM0Tiq4ckB8Egq5mBmk+6hf2euSryMt2YN6AYLUVVtVgFyGjBNcIyGkqimP0LY/8mhGB39/4YavaBpBIu/oygLDCvBktETHLasH4YJxJhjJ4NA1B3D4nXunx7ehBSSCI06eApqI8AuuwmSWWrNFvbk8Fw1pUcP5L6YAq6CxcVswUuAwT1F0Md5X+as3ujm9DNtfiAhj4NWL7xa2YPn5+2+1GJcqiJDSgmHJcdjwTxpZhbuxI37hBYXcCtmtJLs9w/FoyPSPvu4jaIW3PPRgjtqOpm6o8dLtswjSJv9ETCH40IDDut9c3Qep8FfRIQiJj5oOJe6XiuS9vWhwnlo63aXoidZgN8D0Oy2+V1bhucbFRdAJAvqXgl5c/o3Cvy8M3/v76h6p01Tx8WdYq8bxg70OfgG4QzYINFm+kClwVIo8kDyShm39Tq8keyXzh16C2s5QmZjLI7Qj3LamILg+HSQLC0qgCD0Ro1MVaurYzy8TcgVB0JLzyIM4Rn5fOZzoQudsR99C6oxNPsChTJqqsaUCekPdl0cADF+vOtRK0ip5Zwkua63DJgfZXIc7/FgDkvlVmSiKWV/BUIhGMEAc2/dbFUlE5ztnXaVwBinmeejgeR2nK20Oev2uHNwMeJvIIW71jnrHZvdlfGYzFPTXO1IUfNdmoPsmhI3dWjJb57w1ACCzhjAm4sqM5Bo6nogohb/hNj9Zf5R0jrQyKu 04D8X7Xs VKxE7YB+Vv5t4dI34hLnD3TLUWTRk0/vjpUms+M8INq2qR7GpOWpQq5N1V4bPDcmKiG8cIL+dZ2MJXuodJOnZQmDkewiBHEdpKlX0oj7+nwpTVMTeFTTLa/Iwylv6cpGKuY1ABXWqY4rS6sf8XBx9NihtbSNK1RY+LsDnC5QLrXrogl6ejRcuebvPhMDYG4PnriTi7guqscwluZApGJI3/xONJvIAnzQBk5CWsdK2sVj0FFCtmMOv34N7/11qNWsvwhdS2bBi908SHiF6vKtD6Aj9WhrVEbokfoJw 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: From: Alexander Graf We now have all bits in place to support KHO kexecs. Add awareness of KHO in the kexec file as well as boot path for arm64 and adds the respective kconfig option to the architecture so that it can use KHO successfully. Changes to the "chosen" node have been sent to https://github.com/devicetree-org/dt-schema/pull/158. Signed-off-by: Alexander Graf Co-developed-by: Mike Rapoport (Microsoft) Signed-off-by: Mike Rapoport (Microsoft) Co-developed-by: Changyuan Lyu Signed-off-by: Changyuan Lyu --- arch/arm64/Kconfig | 3 +++ drivers/of/fdt.c | 34 ++++++++++++++++++++++++++++++++++ drivers/of/kexec.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+) diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index a182295e6f08b..34c79f4fee3f9 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -1602,6 +1602,9 @@ config ARCH_SUPPORTS_KEXEC_IMAGE_VERIFY_SIG config ARCH_DEFAULT_KEXEC_IMAGE_VERIFY_SIG def_bool y +config ARCH_SUPPORTS_KEXEC_HANDOVER + def_bool y + config ARCH_SUPPORTS_CRASH_DUMP def_bool y diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index aedd0e2dcd890..0edd639898a63 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -25,6 +25,7 @@ #include #include #include +#include #include /* for COMMAND_LINE_SIZE */ #include @@ -875,6 +876,36 @@ void __init early_init_dt_check_for_usable_mem_range(void) memblock_add(rgn[i].base, rgn[i].size); } +/** + * early_init_dt_check_kho - Decode info required for kexec handover from DT + */ +static void __init early_init_dt_check_kho(void) +{ + unsigned long node = chosen_node_offset; + u64 fdt_start, fdt_size, scratch_start, scratch_size; + const __be32 *p; + int l; + + if (!IS_ENABLED(CONFIG_KEXEC_HANDOVER) || (long)node < 0) + return; + + p = of_get_flat_dt_prop(node, "linux,kho-fdt", &l); + if (l != (dt_root_addr_cells + dt_root_size_cells) * sizeof(__be32)) + return; + + fdt_start = dt_mem_next_cell(dt_root_addr_cells, &p); + fdt_size = dt_mem_next_cell(dt_root_addr_cells, &p); + + p = of_get_flat_dt_prop(node, "linux,kho-scratch", &l); + if (l != (dt_root_addr_cells + dt_root_size_cells) * sizeof(__be32)) + return; + + scratch_start = dt_mem_next_cell(dt_root_addr_cells, &p); + scratch_size = dt_mem_next_cell(dt_root_addr_cells, &p); + + kho_populate(fdt_start, fdt_size, scratch_start, scratch_size); +} + #ifdef CONFIG_SERIAL_EARLYCON int __init early_init_dt_scan_chosen_stdout(void) @@ -1169,6 +1200,9 @@ void __init early_init_dt_scan_nodes(void) /* Handle linux,usable-memory-range property */ early_init_dt_check_for_usable_mem_range(); + + /* Handle kexec handover */ + early_init_dt_check_kho(); } bool __init early_init_dt_scan(void *dt_virt, phys_addr_t dt_phys) diff --git a/drivers/of/kexec.c b/drivers/of/kexec.c index 5b924597a4deb..1ee2d31816aeb 100644 --- a/drivers/of/kexec.c +++ b/drivers/of/kexec.c @@ -264,6 +264,43 @@ static inline int setup_ima_buffer(const struct kimage *image, void *fdt, } #endif /* CONFIG_IMA_KEXEC */ +static int kho_add_chosen(const struct kimage *image, void *fdt, int chosen_node) +{ + int ret = 0; +#ifdef CONFIG_KEXEC_HANDOVER + phys_addr_t fdt_mem = 0; + phys_addr_t fdt_len = 0; + phys_addr_t scratch_mem = 0; + phys_addr_t scratch_len = 0; + + ret = fdt_delprop(fdt, chosen_node, "linux,kho-fdt"); + if (ret && ret != -FDT_ERR_NOTFOUND) + return ret; + ret = fdt_delprop(fdt, chosen_node, "linux,kho-scratch"); + if (ret && ret != -FDT_ERR_NOTFOUND) + return ret; + + if (!image->kho.fdt || !image->kho.scratch) + return 0; + + fdt_mem = image->kho.fdt; + fdt_len = PAGE_SIZE; + scratch_mem = image->kho.scratch->mem; + scratch_len = image->kho.scratch->bufsz; + + pr_debug("Adding kho metadata to DT"); + + ret = fdt_appendprop_addrrange(fdt, 0, chosen_node, "linux,kho-fdt", + fdt_mem, fdt_len); + if (ret) + return ret; + ret = fdt_appendprop_addrrange(fdt, 0, chosen_node, "linux,kho-scratch", + scratch_mem, scratch_len); + +#endif /* CONFIG_KEXEC_HANDOVER */ + return ret; +} + /* * of_kexec_alloc_and_setup_fdt - Alloc and setup a new Flattened Device Tree * @@ -414,6 +451,11 @@ void *of_kexec_alloc_and_setup_fdt(const struct kimage *image, #endif } + /* Add kho metadata if this is a KHO image */ + ret = kho_add_chosen(image, fdt, chosen_node); + if (ret) + goto out; + /* add bootargs */ if (cmdline) { ret = fdt_setprop_string(fdt, chosen_node, "bootargs", cmdline);