From patchwork Thu Feb 6 13:27:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Rapoport X-Patchwork-Id: 13963090 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 559B0C02194 for ; Thu, 6 Feb 2025 13:29:59 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DA829280009; Thu, 6 Feb 2025 08:29:58 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D586A280005; Thu, 6 Feb 2025 08:29:58 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BAB1D280009; Thu, 6 Feb 2025 08:29:58 -0500 (EST) 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 9AD1E280005 for ; Thu, 6 Feb 2025 08:29:58 -0500 (EST) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id E709514113A for ; Thu, 6 Feb 2025 13:29:44 +0000 (UTC) X-FDA: 83089602288.13.EC64CDC Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf02.hostedemail.com (Postfix) with ESMTP id 4C30580029 for ; Thu, 6 Feb 2025 13:29:43 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=WFHeaz2W; spf=pass (imf02.hostedemail.com: domain of rppt@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=rppt@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738848583; 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=OqhPo9ta4iBL6YwMdbyL5HGD55Dm8ujj4PSl7i6Hsgs=; b=ZJQ4NTX3dsQ5lT6Mc9siDthswxIx9KIV+42Y2yEqNhasMhTit0L9cCgWD3C3fqXVyCB3cj JfTcQ2/mFt7J/9ArYA/YcMNhQtmF/zEkTp3WJIDPQ1qntX4aaPtqZ+sSJiPkKjzSkxae9n Oz4B9iGOBGgiBjrP7VNqPx9ekSX/css= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1738848583; a=rsa-sha256; cv=none; b=iOT5gMeWuHM9zpGsVPFBRUMT0idLGbKPdGW+yRu6lk+uWjiWM9EWAlu7eTQImFwMv94TQG vQLiXqO/lpNEnhAELdQ4PAJ0epS2GpMbJl5uOUIcEg9WWoAnmjwxdXhjrEaHfF+V062usA ARbwwS5deksktTMHPpx4Wrj6bqrMDHM= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=WFHeaz2W; spf=pass (imf02.hostedemail.com: domain of rppt@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=rppt@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 90828A43521; Thu, 6 Feb 2025 13:27:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B6746C4CEE5; Thu, 6 Feb 2025 13:29:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1738848582; bh=YhQ3gt0FcvyhHrH/fq8eDTzHj2J/JGVva+XZhcAjRME=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WFHeaz2Wf6zAlFKNEJGYupJoP4tb+oKUBXfVqahTutVYbwIRBynlBQHaXayGwkEu2 DuphCe8xk2pe+8oH7+XZQSe9pjgWZGsmkIospzcHjxO3RytUcsVovJmfiYKBBORcsL 4luOZoe358T6aqKuQn/upUfy7Z5PmlquzBJHTrWLVRYP7hc0VriUcgl4lPKOe4bajV ZVwAy9jBA2xpMFC/I3n9y07yrA5AKtZFTK9AcidCwRDnRl6rYTvWRjSGn6dW1qiFfP OHYDZqXXjaHUsYQmI1svg4fNC3oyX5TyerVpmcK3gD0lOT5H5hMpCAfnQUVx3w8RiF MCVMFhIn9tgsQ== From: Mike Rapoport To: linux-kernel@vger.kernel.org Cc: Alexander Graf , Andrew Morton , Andy Lutomirski , Anthony Yznaga , Arnd Bergmann , Ashish Kalra , Benjamin Herrenschmidt , Borislav Petkov , Catalin Marinas , Dave Hansen , David Woodhouse , Eric Biederman , Ingo Molnar , James Gowans , Jonathan Corbet , Krzysztof Kozlowski , Mark Rutland , Mike Rapoport , Paolo Bonzini , Pasha Tatashin , "H. Peter Anvin" , Peter Zijlstra , Pratyush Yadav , Rob Herring , Rob Herring , Saravana Kannan , Stanislav Kinsburskii , Steven Rostedt , Thomas Gleixner , Tom Lendacky , Usama Arif , Will Deacon , devicetree@vger.kernel.org, kexec@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org Subject: [PATCH v4 10/14] arm64: Add KHO support Date: Thu, 6 Feb 2025 15:27:50 +0200 Message-ID: <20250206132754.2596694-11-rppt@kernel.org> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250206132754.2596694-1-rppt@kernel.org> References: <20250206132754.2596694-1-rppt@kernel.org> MIME-Version: 1.0 X-Stat-Signature: 15miuke6hk4rxs3yswd1kqyggo9zbxwb X-Rspamd-Queue-Id: 4C30580029 X-Rspam-User: X-Rspamd-Server: rspam06 X-HE-Tag: 1738848583-287740 X-HE-Meta: U2FsdGVkX1+cveJQYIRq2UkSSKp4y7zWaFowk4ZA5cUC7R3A3ITQbAIX3aoWJf20wTbsoVgDr3sCNr2oONPIQqf2gW2F3xLezMg9avda5U3TGR9wGamcDyZ3tx1SODC4gH9GfMwkvmYwxmeVvAEQHvnC+TaMYo4kW/iyzJpQLAdlCJJzHoT/vTpLXUS62Cr2BhNeyYL7uK6THB8NEEnWZnJro77+ikS9YLGJkRerzlJEMBB78JMK9WxaefVUy7omKYxEYwwJD3i6mUN8N7el93W8CRRmUR9mlIiC8E4xvBYOt6mKAsEomeaev+wj18FxUAEnxWwMtddYMf62D3Dks/Bfs8cvFVtChxKYgd9lES++8EiKf64ofRR0qcPVncEFvDi4hud4JQGhaf9qKGv62XnuHYWJQX/bpuiWirDLvuA3Wx2T/a7dP5V+zMVv1Bhd3TrK7VugMjUG3VPxshGDDePzqrT8wzjb1h3f/BvHHumKIR+3wx8u419Is7y/dWtiUc2zKRooG0xcpuAwPCF63EHmdGka2/3LMw56qpsRXO1ODKV4U3sSUdQJ7RXCZLKIA8iwOUWLuSle2AaXvAETFz4+l6wQSYZsLWCXQlYwOmWDdDHq5jtUo8/eHywxT/9A5CpqTgIL19ZKJVSRheYLFYSurFF6hPAgBcaYdDBAbrp9QU6D8LxC6564JhUUtKX/PruUUZY0O5EFkdOELUDMLybDxPewxi1geacc1nszxji1IK1ISGkfUht5EuxW+Zf5JxrHQYIG4bhHaW4DvLFZ/JEqOaesz/NMqydSVy9Oi7KYYlPksbAseB4rj2NWcb8ei9DGrh41bIF2RolnENDernyybBuwBgmN83KG7r82BU5muQr5hWP5GBB8aOY5GdvpA2VIlYhgpSSBRKpi1K2E57JcEjvcbGpIQnFjd1UnRR3FVnjEIkC0NObUsvj9pN2MXVskNGx0Vc8F+U2yKVo t0g7SQeB QGkDK3ByhcyJ9uI6NGluhO2r/8BKjfl8jjXidHmgC43S3nQ6iPrkcL6RsYopqriezVZ4UluO+u6MhwkNMvH7T7SDYhvJTGJCbC33l9si5XmB0IIlw+4SBjR/doxRWjvumDCKySYDn22IqsZLFoxaKTVBlVlY71MUNPwOgCECuXJFmHjRDV8AOw3tFi0092fT/2nQdvpqX0RdpTJDca2KACWeQp/dbjefEUmdobCmoAg5xg75CO5WVo3xtqx8nXgpraU1nz3xPud2kWY3H7mAkksXAAitI/JO39QsKC3WYxfqG5EnNDOjYlvOkOu7j093si3R2jtnhyVnzQh8= 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. This patch adds 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. Signed-off-by: Alexander Graf Co-developed-by: Mike Rapoport (Microsoft) Signed-off-by: Mike Rapoport (Microsoft) --- arch/arm64/Kconfig | 3 +++ drivers/of/fdt.c | 36 ++++++++++++++++++++++++++++++++++++ drivers/of/kexec.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+) diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index fcdd0ed3eca8..5d9f07cea258 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -1590,6 +1590,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 aedd0e2dcd89..3178bf9c6bd2 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -875,6 +875,39 @@ 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 kho_start, 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-dt", &l); + if (l != (dt_root_addr_cells + dt_root_size_cells) * sizeof(__be32)) + return; + + kho_start = 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); + + p = of_get_flat_dt_prop(node, "linux,kho-mem", &l); + if (l != (dt_root_addr_cells + dt_root_size_cells) * sizeof(__be32)) + return; + + kho_populate(kho_start, scratch_start, scratch_size); +} + #ifdef CONFIG_SERIAL_EARLYCON int __init early_init_dt_scan_chosen_stdout(void) @@ -1169,6 +1202,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 5b924597a4de..f6cf0bc13246 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) +{ + void *dt = NULL; + phys_addr_t dt_mem = 0; + phys_addr_t dt_len = 0; + phys_addr_t scratch_mem = 0; + phys_addr_t scratch_len = 0; + int ret = 0; + +#ifdef CONFIG_KEXEC_HANDOVER + dt = image->kho.dt.buffer; + dt_mem = image->kho.dt.mem; + dt_len = image->kho.dt.bufsz; + + scratch_mem = image->kho.scratch.mem; + scratch_len = image->kho.scratch.bufsz; +#endif + + if (!dt) + goto out; + + pr_debug("Adding kho metadata to DT"); + + ret = fdt_appendprop_addrrange(fdt, 0, chosen_node, "linux,kho-dt", + dt_mem, dt_len); + if (ret) + goto out; + + ret = fdt_appendprop_addrrange(fdt, 0, chosen_node, "linux,kho-scratch", + scratch_mem, scratch_len); + if (ret) + goto out; + +out: + 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);