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 BF1FAC3ABC3 for ; Fri, 9 May 2025 07:47:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B860B6B00C4; Fri, 9 May 2025 03:47:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B369A6B00C5; Fri, 9 May 2025 03:47:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 95DEC6B00C6; Fri, 9 May 2025 03:47:12 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 74ADF6B00C4 for ; Fri, 9 May 2025 03:47:12 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id B7B2A8127A for ; Fri, 9 May 2025 07:47:13 +0000 (UTC) X-FDA: 83422588746.26.BB9AE29 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) by imf12.hostedemail.com (Postfix) with ESMTP id D68BD40005 for ; Fri, 9 May 2025 07:47:11 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=JNZPifpB; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf12.hostedemail.com: domain of 3_rIdaAoKCCMBG9MFXT9MKFNNFKD.BNLKHMTW-LLJU9BJ.NQF@flex--changyuanl.bounces.google.com designates 209.85.215.201 as permitted sender) smtp.mailfrom=3_rIdaAoKCCMBG9MFXT9MKFNNFKD.BNLKHMTW-LLJU9BJ.NQF@flex--changyuanl.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1746776831; 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=+MKFnd7Zn7SK3r8U4sCfKiMzGHcBLk4epea527VBIak=; b=mO80KHQqatG+oRSTEL7+5F4FYcGgHGp3hI3n09UVlQoNsBvYjt/grzqSB21rOcNmHFJplJ ZcdPnvvX1rkngA0jm8+z3tSGq51LqOzmT94n9AWS/2wuwlrF57cSi1vmbm7/cHLSxHrdBR uc+979bls1rnxlN/cJwM2PpeH3RllUM= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1746776831; a=rsa-sha256; cv=none; b=TRGqebsZPNg+QzNEeSoJWU0bTDjxa77C1rXxnStl2pOd+2Dy9R8JIpZ9b5UYG2qKwPaasp P1UdoRS4bhOs4WeVfV45687rklj5yllfK9w6M+KkB9Y05orr4WARmj3N6bfAEn8sGVanPm qPDZHty5LS2Y3SD2Ytu8Kbb94umgeSs= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=JNZPifpB; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf12.hostedemail.com: domain of 3_rIdaAoKCCMBG9MFXT9MKFNNFKD.BNLKHMTW-LLJU9BJ.NQF@flex--changyuanl.bounces.google.com designates 209.85.215.201 as permitted sender) smtp.mailfrom=3_rIdaAoKCCMBG9MFXT9MKFNNFKD.BNLKHMTW-LLJU9BJ.NQF@flex--changyuanl.bounces.google.com Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-6c8f99fef10so1803853a12.3 for ; Fri, 09 May 2025 00:47:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1746776831; x=1747381631; 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=+MKFnd7Zn7SK3r8U4sCfKiMzGHcBLk4epea527VBIak=; b=JNZPifpB9hpjwIfJxHs6k2nE2CBVuhfRNffIDViDnije6QsBt54mJCzzyZfBqcPFRt uzPQptgEhuTDmiBrT8/FWaBF1xiq7M6AQP7NLEpy1dhg4I7Yv8/uyzJYrUSxZ4j2hnkg eM53/CIOZxYyIKFknMjN3m0nqVDXttYRdGygMs/OZ0gO4jr/+XAm0Ie5YfiVduH6HK/a 7oajitAfmfPSRrTdgShHZf19mpeKxtlvSwJ1EcWn+tSGX6ZaKEAQc5PaMu5+ynmrQBjz rHmpq+1fASLoQAEsdjGUpAZMafE+Ih5PXAgEiMijnRuzWLcWaY4/XZjmRGgDOqLLE84Q OGIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746776831; x=1747381631; 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=+MKFnd7Zn7SK3r8U4sCfKiMzGHcBLk4epea527VBIak=; b=UrHZW8TBpVsRVhXyP0v2dV87VVHDnWimlPQ0IhHcXM9OE+sR3iTM3XN04LLH27CBOV MA9qxTOaVZVn4Zp3MHL59ZlXZCoxzZGG4MWyI+al5cuzeVu77RVaBken4Olq3DD5DCMy HOAFcJ/km8Vs4rnp8zvrnexGoS2jaaNAYePTtwEYr130sn0OZsBgyvQuKOTzEd06LrUi EyDvrjmd0DGZbeS7BxRFzfynn7H0B1sDMN/8qEpqAc/X6aA2X4hFtp/TeHcgXtgpSZQb imcU4s0IIa7zSLVa6ZXp7WT++iHJWkq/A66Dawm36Dru63TbxxWrrYa3tDtHqIIdtsNL n+Fg== X-Forwarded-Encrypted: i=1; AJvYcCWJkiMWOO//rPLRaO1WrptVfG8Ak4OVNNosJ7Mo8hqcYcLgye49KAWyurhTFPclXq0apkAEh/4sTQ==@kvack.org X-Gm-Message-State: AOJu0YxXvkNDVGqnarI4aBlhxTN75hSV+MMVOmxQf/U5lBrH+GBbYGR5 Q8L4kAU5DbRnKUoGWtr9hFG5q4Q+yonrl+T/6Qu5JAcz80IEowZPyWnj4CRsDv0hxE2RNY53taC kFp+mpnz4EmUq5EYgDg== X-Google-Smtp-Source: AGHT+IGfyjNQOJiuMy4ATXLCwcN0r1W8pQNLUB/NSaK6TIX4HtlKTByFaG09nYANEwBhuzPNzyK+hM3F9MXfIdux X-Received: from pgvm1.prod.google.com ([2002:a65:62c1:0:b0:b1f:fb3f:2212]) (user=changyuanl job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:3998:b0:1f5:58b9:6d9b with SMTP id adf61e73a8af0-215abb0a371mr3368294637.12.1746776830830; Fri, 09 May 2025 00:47:10 -0700 (PDT) Date: Fri, 9 May 2025 00:46:27 -0700 In-Reply-To: <20250509074635.3187114-1-changyuanl@google.com> Mime-Version: 1.0 References: <20250509074635.3187114-1-changyuanl@google.com> X-Mailer: git-send-email 2.49.0.1015.ga840276032-goog Message-ID: <20250509074635.3187114-10-changyuanl@google.com> Subject: [PATCH v8 09/17] arm64: add KHO support From: Changyuan Lyu To: akpm@linux-foundation.org, linux-kernel@vger.kernel.org Cc: 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 Content-Type: text/plain; charset="UTF-8" X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: D68BD40005 X-Rspam-User: X-Stat-Signature: xzfjg9rknuqwi3cf33hyhaw8wgxtc8mr X-HE-Tag: 1746776831-268223 X-HE-Meta: U2FsdGVkX1+RxSBP+OSrtrhDkPH9PB4bwPcMhL4+kAAnxL7HtXt38NcQJm+fqIM53GZIGPDsvTbHeVm9nTh1/0dU+YicY0yZXlCwhD3mdM2Enti6gvxHqPfyJACtZ/0Ee6soCmCVnpQ6Wp5YSA1THxo8z0d6bAywqH8r3LeOYsepFHOWY7ourNhBy3ZLopMsCkv/QqAhFUo3VFwMWIxOrenFWQobkK1WtowTFoSbwB5Pu38Ty2yRlu3ZpvYYnEPFbX5x+ga7YaFyOSUcbf4E+gGOSfcwqjN6xWQMu4vN0WuB0hZwZSVl3RdLyuypRTx/PtwdX4V/l5xl1vbBOiYSTQd1g2bu5PWWzU5H31IL9MkSztovsMPaxhhr11NOIaWPbtAosi/KHfxLb9Dw1sNWzjrX1NMTuC6vHYhRp4ljWCpntVELn1KyJJVv6d6kPEm0tbluoWEQimNhdCvlhES6otbFnYhVR4etOoukO957QHq8V19I1TZrG32O6W7KBySOh6gqpj9MZDrz9B6kTi2GVOe99RBxbSAoTUR8QOAplwaBZQ9hxDNalge0/97w16U6MNW4+GKVbts/DWJAewhiI0w1sfTp3vKS2qXFilXr4wRyfdMj8rkZxoSDV7VehwkBWqV+XUZevdY7G7oMIRQYGpx0GOUDwCQGn5dg+wVDqAt1/ZW53acxyHsZhntBcqo4MqMcyF6/pe+9awyVuwLgflyYsVO/v4x4q0mFmSwhSBo8EQJPe7mElqWoNFRQ/dO7y/4g+q795pmVYqWiVG7IvNEHkyKs4kB71/i/Qr6wWQp0WCiqSLrvzws049lbbaa8V5ZFmnUkzHGvMY5OE5tMlo0DcPVWGNAWBgohP1zfQEd4pp/P5VuP7HaeV9toFQVSVqpiwl/XTcyRmjxzIDFPAlinF43aFf+H0VzMYLOmUjSadqG5RReM97fs9q/6tE/R+DKwAiHTEW/5Y2vPfLn sjx7hibm MFWxKcQh/OYTCBhN7iDnUPwK7iWfTTYNlC7IYqL/nrHN8kHXMtC20NcYLvRaU+b5U986zOUBa4MVAPUMzfS2yejfgUvl/Nu86L5xIoPtrrFS+njPd4Ek31259bXWSMPg8r+Ddf8DtltbMhNPRrJxTGo6pYQb3Y+h0cU4M3F2z2mKN+E/ohd3WtR20RIX2Oz/Lk/5ZRQq5t4TUEJw66i8vwjhQhWFjd0gzup39rBcP4gtVEYd47Dk8/f6lxh9AB2D/iGKHpZL/2bDY8vuCgI0L0SD7pIVJ3xmAGJVnsafNgCyEI6ucRx/96plLTyaWWW/jjW/6K83ZL5jfe0h4JOeILNyKYUbv85qu+8XYX4YHweY+yzQQBJKIrqtNYkrpA3sVLohxxvrKqDfw3Q3M/ZrOFLkrl/VWislK6xjjPPmxI80auNuIJZdf6YcpWuKHXWtnqr0hG2McWYcNRCDiBAxWWuUKMFRjlJZ3DiBP59RVI3Sv9C/diLJI84qcJTf+vsv0O/U1lk4PCBo6XmcGYyyTi1/1S+3WMLLs3dPUC1fut1otdATfeD1JBRvuAb4IxwvgHMrNbVBbdldWeWK3GxvTHVpUmnXVDqEGFnlqnRzHgrprcCyPWjgA8eaIOdAE7gfl0Gr5ZcUsxFcI31w= 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); -- 2.49.0.1015.ga840276032-goog