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 69352CE79A4 for ; Mon, 25 Sep 2023 21:28:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 01F548D0021; Mon, 25 Sep 2023 17:28:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EEA086B016F; Mon, 25 Sep 2023 17:28:06 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D8ABE8D0021; Mon, 25 Sep 2023 17:28:06 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id C26D36B016C for ; Mon, 25 Sep 2023 17:28:06 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 95DF740CCA for ; Mon, 25 Sep 2023 21:28:06 +0000 (UTC) X-FDA: 81276407772.09.0729287 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by imf27.hostedemail.com (Postfix) with ESMTP id D41BD40030 for ; Mon, 25 Sep 2023 21:28:04 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=linux.microsoft.com header.s=default header.b=GrGaL61W; spf=pass (imf27.hostedemail.com: domain of skinsburskii@linux.microsoft.com designates 13.77.154.182 as permitted sender) smtp.mailfrom=skinsburskii@linux.microsoft.com; dmarc=pass (policy=none) header.from=linux.microsoft.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1695677285; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=31r3+teMkDng2tqbYlVeWHQusQtnTuIKy4PPrzro3Jo=; b=RlZhmMX5UgZzujtgnSvtRQ5p61kbwhnPhujOSCRfAoM+WRlBwXU0v+/hZ7BNfJxwwBWBAz qo40gVEm60nhMHUeT9MnqK3d9xWmoeteLGmyM79BqQacbseA/Kr9uI5zlkia9Y0stJGZk+ kJ+zoXVQZIfAOQRE+W+rXnMBZVYdaz0= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1695677285; a=rsa-sha256; cv=none; b=KtjopRV6WbTudOWydhIdj2SPIIM9jEjbDWi62ZiBh3hu/SPqbCVUQ9xw8Qaisn9peZS6De eVdmcUxecd0n27BQ3QWV5XjE3mYcF2ZjThO9d7TCLzy65Hcb7g0JaGye09aSwTqvJE605I J7AE7TkCHKncRRtG9kmCmvKqikKhrvo= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=linux.microsoft.com header.s=default header.b=GrGaL61W; spf=pass (imf27.hostedemail.com: domain of skinsburskii@linux.microsoft.com designates 13.77.154.182 as permitted sender) smtp.mailfrom=skinsburskii@linux.microsoft.com; dmarc=pass (policy=none) header.from=linux.microsoft.com Received: from skinsburskii. (c-67-170-100-148.hsd1.wa.comcast.net [67.170.100.148]) by linux.microsoft.com (Postfix) with ESMTPSA id E58C1212C81A; Mon, 25 Sep 2023 14:28:02 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com E58C1212C81A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1695677284; bh=31r3+teMkDng2tqbYlVeWHQusQtnTuIKy4PPrzro3Jo=; h=Subject:From:To:Date:In-Reply-To:References:From; b=GrGaL61WsFhTEwyMze7wRAYu6XpBN7Eh3oADDGL4oljCNrUIkvM4FgsVD8V8iUtOV YtlrPBBjhSckZbP/BHI0u+BGjamKBFeqtF+BmWa+94cAE8NDGEZzwBZz8Tme9rqA84 cgz63bBFHx6XTdanh8G50ZkYGy2lH5GGPlGy3urg= Subject: [RFC PATCH v2 3/7] x86: kexec: Enable fdt modification in callbacks From: Stanislav Kinsburskii To: tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, ebiederm@xmission.com, akpm@linux-foundation.org, stanislav.kinsburskii@gmail.com, corbet@lwn.net, linux-kernel@vger.kernel.org, kexec@lists.infradead.org, linux-mm@kvack.org, kys@microsoft.com, jgowans@amazon.com, wei.liu@kernel.org, arnd@arndb.de, gregkh@linuxfoundation.org, graf@amazon.de, pbonzini@redhat.com Date: Mon, 25 Sep 2023 14:28:01 -0700 Message-ID: <169567728132.19708.15145818489125262286.stgit@skinsburskii.> In-Reply-To: <169567722094.19708.3583735425859054859.stgit@skinsburskii.> References: <169567722094.19708.3583735425859054859.stgit@skinsburskii.> User-Agent: StGit/0.19 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Stat-Signature: t44qr8uy3yxfjn1tgszaop9eu6uqa5jt X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: D41BD40030 X-Rspam-User: X-HE-Tag: 1695677284-251139 X-HE-Meta: U2FsdGVkX1+ezXO3iZdXU3RVmejQC3nqEY8AdZn7R0tlRn2JN9yhYIaKxZoBlOarbHu40uUregrTqBj2M5VPDsBpxoS0x6AUhID0LqqD5vK3xGGUmrnb4PbyVm2PAhid5umDCSpoa8PuMWVUC5TUP4ZcA6B3Wt9hsOLVKMyFCo87qZHGC9EmHyUT3KzkYd6ho9Y8BHLdw0h5SnMShzVjaHQxKYjK6Qo/POEggFElghjMg6EK0rdd+VCAI0DqxWkWayprkFBMYB3ERWHvY2a9hSboirX9N7+H3BAl4N49BopqlGIoJsvWLtAIVJ8SE/8KMp3S8kUp1INGbRyXZPMCtkcG+pBBkm0Uq1EXWpbuq3sP8HxOD4ZjXYEJ6Lys17VevR6/MXqQqV/7eBcXNxt7b4/l1YHj42bLhSEVcsQOo2TgaWkVzDFtbRSDIDzCn+LidpMGLeE9bgozvo9Xt/IBECK5lsrk1Hzp0VlwLuOI3tvIKmvr9oZuthDyiBgJUzrvI2JuilTe7Ly4YbGkT8Oc3R30uR0wxDcE1uE+rA0MfzomzRXk/6b9XfIGgomgIidpr3r8MjY/oETjCZeQjFzv/fWiYdvIWJ5FDfYA4MdoH9QuVO9EM1NZGfujc26onbYxOS6ArQpViUwbD8RYd7l6dsvRRcxWTAGeCdObLljkthxDRXJAas3d+ePczzzuugFNAtJa732fkrEAaC1CmO62B2j4/O0PHjJJuyYvC/bsE8JEMKUUH4PFhm8kvtQri29cOSSO0+w8n5Yk3BIGBkTwbm5EtfsjN2ff3ucDSxB11NqB1wDReIvzxiv1Apn3WYR/eCYPRsh9xJfl66sVdGTbQdN76QdupTaGcSkelwigJttMUxmCn3HfLuxso+9mNenz50Gk8knvsdHE5YH0ffmXBr57kEqUs68UsSJ40A+NeQXQpJMQTioYcuEjeX4FaxfmODT0lGlcIiHqw5EGfro NdxNp7BQ AAOYiY2etT6BvYXvJzN4UdvuzZO0GtohSgACG8a/S5hGNJv1adhs8ruhdJwGqBJjL3BkdjAmPcUpDtZtQ1jxWhy24w9PGv0auL89qvhximbw6eiAqPYNihIl/GWVr0v7frl3uVp+59v5tq69J+xyRZBDufuzhl5tFGGJykh3TRDX3Yckb4FMemgkg5SsLw0NiukNI19/yu6wDcQ5kVNZbvvmUc5aX3tBsekpzdwuXVBsqff81IrL9T+QNg3ytSgxlg56WDXsxlpMAUtZSHFiUXja+ENKhk/vDn2feBXqwZPBu0Lc= 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: From: Stanislav Kinsburskii This option allows kernel subsystems to modify (or create, if necessary) the Flattened Device Tree (fdt) using registered callbacks and then pass the modified version to the new kernel. Signed-off-by: Stanislav Kinsburskii --- arch/x86/Kconfig | 8 +++++++ arch/x86/kernel/kexec-bzimage64.c | 41 ++++++++++++++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index efb472e267ec..90da51fbb8f8 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -2078,6 +2078,14 @@ config KEXEC_FILE_FDT This option enables passing existent Flattened Device Tree to the new kernel when kexec is invoked by the file based system call. +config KEXEC_FILE_FDT_CALLBACK + bool "Enable kexec fdt modification support" + depends on KEXEC_FILE_FDT + select LIBFDT + help + This option enables Flattened Device Tree modification (and creation + if needed) by kernel subsystems, registered corresponding callback. + config ARCH_HAS_KEXEC_PURGATORY def_bool KEXEC_FILE diff --git a/arch/x86/kernel/kexec-bzimage64.c b/arch/x86/kernel/kexec-bzimage64.c index ab9ae02c9a5f..3c6df28d3637 100644 --- a/arch/x86/kernel/kexec-bzimage64.c +++ b/arch/x86/kernel/kexec-bzimage64.c @@ -384,11 +384,50 @@ static int bzImage64_probe(const char *buf, unsigned long len) return ret; } #ifdef CONFIG_KEXEC_FILE_FDT +#ifdef CONFIG_KEXEC_FILE_FDT_CALLBACK +static void *fdt_get_runtime(void) +{ + void *fdt; + size_t fdt_size = SZ_2M; + int status; + + /* It's nothing to do without existent fdt and any callbacks */ + if (!initial_boot_params && kexec_fdt_notify_list_empty()) + return NULL; + + fdt = kzalloc(fdt_size, GFP_KERNEL); + if (!fdt) + return NULL; + + if (initial_boot_params) + status = fdt_open_into(initial_boot_params, fdt, fdt_size); + else + status = fdt_create_empty_tree(fdt, fdt_size); + if (status != 0) { + pr_err("failed to get fdt\n"); + goto free_fdt; + } + + status = kexec_fdt_notify(fdt); + if (status) { + pr_err("fdt notification failed\n"); + goto free_fdt; + } + + fdt_pack(fdt); + + return fdt; + +free_fdt: + kfree(fdt); + return NULL; +} +#else static void *fdt_get_runtime(void) { return initial_boot_params; } - +#endif static int kexec_setup_fdt(struct kexec_buf *kbuf, struct boot_params *params) { void *fdt;