From patchwork Thu Mar 20 01:55:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Changyuan Lyu X-Patchwork-Id: 14023312 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 02128C35FFC for ; Thu, 20 Mar 2025 01:56:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 32B1028000E; Wed, 19 Mar 2025 21:56:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2AE12280001; Wed, 19 Mar 2025 21:56:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0B18F28000E; Wed, 19 Mar 2025 21:56:22 -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 D814C280001 for ; Wed, 19 Mar 2025 21:56:21 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 50557B78EF for ; Thu, 20 Mar 2025 01:56:22 +0000 (UTC) X-FDA: 83240264604.10.06C1E10 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) by imf19.hostedemail.com (Postfix) with ESMTP id 786441A0005 for ; Thu, 20 Mar 2025 01:56:20 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=kb+joydF; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf19.hostedemail.com: domain of 3w3XbZwoKCGICHANGYUANLGOOGLE.COMLINUX-MMKVACK.ORG@flex--changyuanl.bounces.google.com designates 209.85.214.201 as permitted sender) smtp.mailfrom=3w3XbZwoKCGICHANGYUANLGOOGLE.COMLINUX-MMKVACK.ORG@flex--changyuanl.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742435780; 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=rd3wJc2IZkbxeklI0oyF9EA5atShYqSy3T5piwpZMms=; b=5eOs4mKW+HAL1JYbZKo3H0G/cdg9BsYLr97qE9WrfHvD+K5pWAv5ea5Qu0/jT1+FyG/bQ4 MOgSIUcfuXM1O3lUtjJI/i6skGcW0puhvGUjuDEJ8AnFjoshDmtBszN57I6X/ymUaNgICq tdNLEg1BgDxOmcmPBLXodqDkEriOkpQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742435780; a=rsa-sha256; cv=none; b=iU/SDztaTUB8+sg/FMEoTD7R92jGCLQgeXc1k8dE+uAg8m1eqCHmPLBT/f9K8lwTi7IpE3 pNK6v9LlIcs8Ktkoco5WDnRavg3ldiTFaQHJbUuj6uPneaRQOqBszE2OeWHn9fv4By9qQ5 7W6u8+dEKNmRGn6J6vLYaFhFas61I2g= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=kb+joydF; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf19.hostedemail.com: domain of 3w3XbZwoKCGICHANGYUANLGOOGLE.COMLINUX-MMKVACK.ORG@flex--changyuanl.bounces.google.com designates 209.85.214.201 as permitted sender) smtp.mailfrom=3w3XbZwoKCGICHANGYUANLGOOGLE.COMLINUX-MMKVACK.ORG@flex--changyuanl.bounces.google.com Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2240a960f9cso2984805ad.0 for ; Wed, 19 Mar 2025 18:56:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742435779; x=1743040579; 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=rd3wJc2IZkbxeklI0oyF9EA5atShYqSy3T5piwpZMms=; b=kb+joydFT3j/GE4h0VsP/8f4fDFza6t3l7l3csjnbroOduWaAqLruxfAjVhNvDoVTU u+JgsrOwEDeoaAjH6lJfe2ZM5MRYzmOi3ApYi4Tia3D4w1H4U5qNdP36t3BzlqNCj5gK eV+ysn8H0razPFCiCOBpgPNMV/5XJ3P9UIq2Rg31uAiZUtIm0KOqGb3mvYkpWUZpCYBi Ggak8JG4abd9R524w61iLKNX+2+kk4EUftHajTNNshfvwo6gc23GQNM4TCgRCZHzULrZ 64BQlMSBC65xqPGbHUe9JMLSGrarLxQol+c3Rpp2iiHNNjBF/1BAnLyv6pVCMkkoVYBn ZPPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742435779; x=1743040579; 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=rd3wJc2IZkbxeklI0oyF9EA5atShYqSy3T5piwpZMms=; b=SDzINnf4lb6Mzl2f8uaXAigiMk/av40nlfdIoBgA3szLwDxyE0nTqmecAuzDcpXzzZ sSQ0xfOw24vnTrmrCok9QZa5hPZI0En3KjVRKSZvw97LvyQd0F+XV/NQx8vzR0zESUiH S3LAlTzZm4vyNLrCRXxOQF4XOsoBYhvFlLnqbJRh0X8Zp+HsOIESW+TXpvALvOZ0aJ9J Ymc72P5EWWG0tRiGiFcbhAvK6ludm4JUs0Z5pwZMfMltuOXE5S5XWm8pKssm+hgpWCRg klpm8ZRjdAIk6oMlEIdjW2RcIhIZZE74t6DLnQ/hnDGPT+JoKN8e4wy0opK8Sw+GSeY2 aWuA== X-Forwarded-Encrypted: i=1; AJvYcCWtTTfALGfyvKQ0pRd+0b+F/CSQ8OmyWvWNkV5c7okzYhPfwFvR1NXpujtMBuWtXlRwWenTQzc/Qw==@kvack.org X-Gm-Message-State: AOJu0YynNfiGtQfzZPtfzapb964cikuvQ57PvMKzIs4lkYHvc6Aw4e2n taOB2GJKHzsZitoigFd+lYx4ZJCzZk49LJqhgY6oSmbYhP4sHZJq9WMynL6CUjfrfFBognHCzHO p7Who1htQPDXZBbQpGw== X-Google-Smtp-Source: AGHT+IGJMwZEQr7XX54NJ2Wc09gQFNrebDpGN2LmiuqxXXpWV4PLS6zLIf0YQX/7suAC0aQ3d5AJ2BOMHO4N4Oqa X-Received: from pfbig24.prod.google.com ([2002:a05:6a00:8b98:b0:730:597f:f227]) (user=changyuanl job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:3a08:b0:736:57cb:f2b6 with SMTP id d2e1a72fcca58-7376d62aac5mr7233223b3a.12.1742435779245; Wed, 19 Mar 2025 18:56:19 -0700 (PDT) Date: Wed, 19 Mar 2025 18:55:47 -0700 In-Reply-To: <20250320015551.2157511-1-changyuanl@google.com> Mime-Version: 1.0 References: <20250320015551.2157511-1-changyuanl@google.com> X-Mailer: git-send-email 2.49.0.rc1.451.g8f38331e32-goog Message-ID: <20250320015551.2157511-13-changyuanl@google.com> Subject: [PATCH v5 12/16] arm64: add KHO support From: Changyuan Lyu To: linux-kernel@vger.kernel.org Cc: graf@amazon.com, akpm@linux-foundation.org, luto@kernel.org, anthony.yznaga@oracle.com, arnd@arndb.de, ashish.kalra@amd.com, benh@kernel.crashing.org, bp@alien8.de, catalin.marinas@arm.com, dave.hansen@linux.intel.com, dwmw2@infradead.org, ebiederm@xmission.com, mingo@redhat.com, jgowans@amazon.com, corbet@lwn.net, krzk@kernel.org, rppt@kernel.org, mark.rutland@arm.com, pbonzini@redhat.com, pasha.tatashin@soleen.com, hpa@zytor.com, peterz@infradead.org, ptyadav@amazon.de, robh+dt@kernel.org, robh@kernel.org, saravanak@google.com, skinsburskii@linux.microsoft.com, rostedt@goodmis.org, tglx@linutronix.de, thomas.lendacky@amd.com, usama.arif@bytedance.com, will@kernel.org, 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, Changyuan Lyu X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 786441A0005 X-Stat-Signature: anscemsm4i5afboxe5cmceyi7xxy1758 X-HE-Tag: 1742435780-955774 X-HE-Meta: U2FsdGVkX18qV1Nm82Hp9fKu+ExXQhHvC9nNVVNGkScxP073znHWPDr+GVybxLbScmhZs8A6MU3NX4c82Xddc+Tdp9AkhazQ1JXok/4WO1+0YV7JCsyy9z4WXZoDQ++fqIWno3CEXKk84Btx6Tb653rNOpxneONdM0uF8oop57zbOxNOwd6iBWHZtk+utvwmqjskLbre0tTDtySXxvnOHH9VWRQcUpW2zOnj6yzdCHkzb9oIAuf4FzWxSEuVhnSJ/dGZlGqUCPMvc13wNTpmegQTV0ntw1ThM24Z7RCX48hFO+UfQhrTW8MUhAg6SnBY1CmbvuI3aILl9x7oivqaT6d14Kdcr6TySd9gT0iUaO8S9ISjSl1X5aojnR//Jb9tiQYrf7nTVAnVLW3FkW7o6RRFJaXsZV4LhDkvvoR02IVTZTHhIAZfMRUv9LD+4CiP5036Q2CHaOlasAXMdxf1GdRWvibhYv8t7yCK73qDjcM0ms/a5RVn3/GxVLpkGJVeIOoNxQWGydOCi+UhsTkq17BBxcjHKxHEcS0IfUzGnMqS33OcWZseLLarbG5QMqNybZ5LzGdpTJXvcvmVAjDMX3jvASi8eKFnKunGD2p/skWXyiHxEYVMIiRdh2VJfYLt/kfJy75R+BdiJtAn8M/68WH4WYRWT7eAUj0QkKih0l1DyZP3NTd5qVfSN51nS7+mh4U3Z7yyQ3Tc0241kxrFKIw29UcBXCkqwSoF7QHM2zJEvc9yAen7Y8d8xgfNNaj53m4EnNqAvum9RM/qds7kfGyGoXdNz/1p25Um9RV+KBgCJ/sCAZh2mRJON6S+1PMyIQld6ad52XCeel01W4cD9dvJDq9csqb8elekBw1+iDr3hs3LJMmK6PYepOVWcK1VWdl35pOuJinAs5f7fJrJfhH3OLIrnGfWvGYA5Rsi+mI9gr3Hp8ClRhgx0oYVkMS9+s+2B8iVaaOw9bYjgge 7jwc0PaZ P1K9hgShcED6T9fwPIYFr+zmL/L2/TN4z3PEcnIj4lThB2onGmsTjVT8B0bEDWu6yiMG0VmS2+hYmO4LuDTWoVXyB/KQA6ptGR1RNrfTM3aOtjsqxcQvXU6ks925225Yic4MfV3XCE5ehlhRcRF3b0bmHnY+55LunuWzjdzNLZpm7Zxc+T6TzYg+wIkjl647V+GZQHeo3ZTC++h4IJFMV0uGEb1ojC0BR22ETRlmmchZviRzFhDxStNfmIj97mGMH8scDXeXQEWmMgoCC/q279CTduY8RfMVrrz+IG9wIRwq7+4WauZf3/6mVC8ccYPTYCuxoR3TWCg3E32cQQSfb7AHLI4qmQ7P7fjBFIqhG9U0agzbxEIYndsNb8kLiTjI+scAYYiXPfFoNeAETLJktJuCF+a40D0XYe2Vt+Uu9zBToOXwMKdJlBkrCK00gX9X9n/IlxJ6zvRl83uk4FID93Ad1BwA2sxrqQFDsi2p9dtEFnX0upzxUuN0jiIrZp0ORj5LSFTsw7cd0oEFHvawMDoKCiKp89O7Q7H8vnNUYg2n63/54b58eNHsEluZtW40WvwqIWG2aF5b84/GE1O87eGU3CHox1Kk4VYUNojpwORP1rtR50oipvRxIEiTQU0fDKgEnwYR5aIPa52hY00aSEEbvHv0FhNtrHAW5pa7eWmkC/ObXbZ1u5p76IRhIr+VGvkzI 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. 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 | 33 +++++++++++++++++++++++++++++++++ drivers/of/kexec.c | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+) diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 940343beb3d4..c997b27b7da1 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -1589,6 +1589,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..73f80e3f7188 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,35 @@ 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-fdt", &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); + + kho_populate(kho_start, scratch_start, scratch_size); +} + #ifdef CONFIG_SERIAL_EARLYCON int __init early_init_dt_scan_chosen_stdout(void) @@ -1169,6 +1199,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..db7d7014d8b4 100644 --- a/drivers/of/kexec.c +++ b/drivers/of/kexec.c @@ -264,6 +264,38 @@ 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 dt_mem = 0; + phys_addr_t dt_len = 0; + phys_addr_t scratch_mem = 0; + phys_addr_t scratch_len = 0; + + if (!image->kho.fdt || !image->kho.scratch) + return 0; + + dt_mem = image->kho.fdt->mem; + dt_len = image->kho.fdt->memsz; + + 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", + dt_mem, dt_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 +446,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);