From patchwork Fri Apr 11 05:37:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Changyuan Lyu X-Patchwork-Id: 14047571 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 876DDC369A2 for ; Fri, 11 Apr 2025 05:38:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 99EBB280163; Fri, 11 Apr 2025 01:38:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9236628015B; Fri, 11 Apr 2025 01:38:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 75544280163; Fri, 11 Apr 2025 01:38:42 -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 446DB28015B for ; Fri, 11 Apr 2025 01:38:42 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 2AD50BA29E for ; Fri, 11 Apr 2025 05:38:43 +0000 (UTC) X-FDA: 83320658526.09.5B6BBA2 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) by imf30.hostedemail.com (Postfix) with ESMTP id 6897A80006 for ; Fri, 11 Apr 2025 05:38:41 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=gSTLbvpt; spf=pass (imf30.hostedemail.com: domain of 34Kr4ZwoKCF89E7KDVR7KIDLLDIB.9LJIFKRU-JJHS79H.LOD@flex--changyuanl.bounces.google.com designates 209.85.210.202 as permitted sender) smtp.mailfrom=34Kr4ZwoKCF89E7KDVR7KIDLLDIB.9LJIFKRU-JJHS79H.LOD@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=1744349921; 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=ZI11LMBEjiEIqA0HumHiypztcAsK57x8QNsaft7FaF0=; b=ksubsn/jIIQcq1aTwsFXR/4+bph1B8rYbEFr58BIYcTS66XXC/I9FvFACS9jtJRgKsaG/H 9pf9qOOV2WyM6N4J85SNaIcPV/T/5RSD+hgY1rqy5V0uvCTbSb6ux82nAGmVv+c90BYlll YsWI4BCrlAk6kXyPFGvMfhOntmsjbfs= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=gSTLbvpt; spf=pass (imf30.hostedemail.com: domain of 34Kr4ZwoKCF89E7KDVR7KIDLLDIB.9LJIFKRU-JJHS79H.LOD@flex--changyuanl.bounces.google.com designates 209.85.210.202 as permitted sender) smtp.mailfrom=34Kr4ZwoKCF89E7KDVR7KIDLLDIB.9LJIFKRU-JJHS79H.LOD@flex--changyuanl.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744349921; a=rsa-sha256; cv=none; b=JLoeF7KIoHjRUaEtMLDNvt2asy4BX5UqgE0LjZcDR8w1EewWXRa+WLBKlPHt6xsbSD1IVc r9hxXUOqeVO1OFEL3XaRaZwEJ6ZweyILSuTL+XViQmmOOK8yDpostLBLEODj0G8dkTCKNK 7AvccEqKvWRpgjMFiVcbsVuiRdmFaUg= Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-739515de999so1471747b3a.1 for ; Thu, 10 Apr 2025 22:38:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744349920; x=1744954720; 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=ZI11LMBEjiEIqA0HumHiypztcAsK57x8QNsaft7FaF0=; b=gSTLbvptBaCgRHk3Me+a8K0SegPvxS3xSm7AdyjXLjOBJixaJByfkJRMw/KSMUBeB7 P6nvMg3C6EddElCzfyqFM0Fla76ziaYm5UXC0tbkfcznDFFbUnRt/3ZoOEhrVHxsnx0h v3ee1jV0AzC1+0sg5EVuiFyaQ2Ye/Y+UznHfMz5qPe45T3zcvR3n4NGWqiucptu8KaA9 xrU7WE2YRTZqerUS/eH4VtGEsEn6AyssJK9JOHRV20QwrWK+Lg8vqX4OByOVtzAODowu DhsYL6Mxre6pdmo+7g/NIHH1VV3W7x3QawGDpAK8kthV+Ejx0obsys/EoYL7PS8Fw8Re lUsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744349920; x=1744954720; 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=ZI11LMBEjiEIqA0HumHiypztcAsK57x8QNsaft7FaF0=; b=bdAVjSdYdjdoNev7zQP8By5N++r0wbTjgxez7s5ToikMzzmdCfGRHBlkv4WGJo0uKP isndWwr4dLMqr66wxmHsD8comikCMTrphkwfgYB8J4UAl2TYM5k6PMrmqSUmU7c9TkMt uLZsdNM5dKqfkN7UI64wK77IteDiAI9OqRo40iOQCGDReHaX9nm9zhkqLcdhSWXsHQ+4 0d/R5+rH2QbxuWveAJSQ9k4WXOJs97QA7yLHmRqWYw52NGxJZR3DhmmZKCp0JwdPLF28 uY49E2AQALb7WEobczSRkJeApGEV/C1vW9jyb150kH/+tDPU73nMICaJXiFWhCHRJXDV Nyqw== X-Forwarded-Encrypted: i=1; AJvYcCW7UCQogVc+7AcaNKYgKKd86R3OgmE4pZy/X74Xq2xXPhDx23iHtCEFqAb5Nrq2hRbjkvfN7FnBVQ==@kvack.org X-Gm-Message-State: AOJu0YyA+A8kP+vdYjs1mj6p6sARTYieHdw2cwQSvj8ZaxsLuMg0VYr1 ghoehHQHVAmigboARpBqr8BDtXMwGgnyrvVJfdDZrVJeTesG2agN8cMtnxs0X+e2yG+qm0mg05B hkAGR1wpq3kETuh/41w== X-Google-Smtp-Source: AGHT+IGL9bShyIuFbehpqVS3P2jU3hH2DH9GD61wHNRFxBW3gbczYn8weYxBH/KHuEP/3fwm9Znlao4IefNW9iwc X-Received: from plbbf5.prod.google.com ([2002:a17:902:b905:b0:223:52c5:17f6]) (user=changyuanl job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2a86:b0:224:e33:8896 with SMTP id d9443c01a7336-22bea4934a1mr25148505ad.11.1744349920329; Thu, 10 Apr 2025 22:38:40 -0700 (PDT) Date: Thu, 10 Apr 2025 22:37:42 -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-12-changyuanl@google.com> Subject: [PATCH v6 11/14] x86: 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: 6897A80006 X-Rspamd-Server: rspam05 X-Rspam-User: X-Stat-Signature: gux3ekfoaqd6w8zxuifxhtg31i337n4h X-HE-Tag: 1744349921-806782 X-HE-Meta: U2FsdGVkX1/yGYWdfIgpbPbC5dhPw7HqDi3DE+SqU+LksDblvWWrCrnx+s6UZ7PQLwta53U0dxp6kKZGMKEZ/4TJFHJx57+/K+33C4I9AsqGXl24k6a64CXKoI4MA3RhLK73CUD0XGx5sxc6tSLi5NnAvIyDwkEqHQwDVRTkPPqkVQOnUJwH+aBE6/crJCWUQrPkZc2aQuma7ZXzsg+/xkCdS+8OJfF4eqGebNRRMXl5UByTiK2bqP2J7tVx4wNEKUrKjFEM/BfWvOoaFMsPnvw+JnBxkrgVewVkZPnouo7zmR64BYHVIAbfV9zQA38lOX66C+XV4HGsSrmucqHu1oxZNwoeCE2DQkqdx+jaJl/oCzcahuF2MhcSm7AerTu9zK6Nxn7K+sjsAU+shXtbf9YMzHdqHOKA0tZ7p9nVpmKvlilT7nCscv25qGVGpLXJPpMqu9lNVLAP44Hmg1jpxQHY6q4nf/c+somzJbpKfxOZkuOinj4QAodG9/MsHUn709bwCOx2DLviSib/V86vTDoozHG2KksOm2UtRpZ6OTJsC+6ad6A4vc9U/umyI7Slm2az4PuJ6xAyUCX22YnBeqyUrM8ncYP9wTPMK1AfeMVdMd9cMd0QeWCqZjDazV2FE+NJ1tDm4ZdHp8ZLLbRfgmfeNRVFXFVhkqpGdIhyOZv1in39CobfGES0YJOCEwl0yVQhwTwP4i08XEADoT6FWC1o4m0Ilmq41dEibKp9WPk6XEFHXraanPOv6PTsIiWgf5+X0Qlr4C9Vs78ZNBCW/bpHx0/EDTPX0Bg1TPdrzjjFjl/7o0fb7TN7PEc9FOBmXmxNZ8nItn355ubHMOJaHGKdn04eNJyjOqqnFukcUBiPDkyW6nZQd+/HHB4AQhgBHF1vFT400io2DVt35wkY/IYge3hEtKHEwXES14P7w7JlYadxnDi9HbS0w6aXNzVkUJlCxmp835KokA8+rS5 s3uxeF/8 war4ZlBLFC2MhVg9sRew7/WVuMOcQhqKRts9Ds8DQ3KNiRqf2LWNiHin7TE/Y1IKLKm/ZSrZBJlCi40/RtdDmAszbxvfZ7kEBqhIlcki6jgnLaFqo2PAKjTP4enTjAL/6RL1wFBnizxgYIXFq+cZXj2DkE9Pd9ix0Je7TJ9vp3dPaGYM/7/CRdNlyepNrKu5heDNomKwHaBr/2u5k949wspxORug20s8tDb3BcU5DKZgHbHs6OTLr+kDR0EYQJvr6Yod5FPvfJT3uaEnujmRlHisNEDkps0nfglu58ckT4nsBcd+l2QTX4bBLiXEdiu20f55YzusA93LQhA3uvWmFcQsaeOZdKZIphFVZQ2DactyUm3t/EqfG5I/vdOlb9V5dd6FHL6K5BQRU3TKCa14ZSVj3x4r7oafbc3g8EXM7jNrEIqbVEOJTvowTuoqDbmpOuwQFrnYzUlY/tvNne4YYkpORakJleNtG8MFqO4j/Bwgsv2JvPH85+pJw7SM5BZI/ghIoHPsGq3jVfYKRcoQ198f9FXV4MIlda0ez+C5bQH3ZvJ+5IT0X4w2k5ELsWCaGra6RZVeDf55n2M1QUAhLdUfD4BpcoIZC6jMFNlWCZSrfFw90h82y0PYj7Q== 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 x86 and adds the respective kconfig option to the architecture so that it can use KHO successfully. In addition, it enlightens it decompression code with KHO so that its KASLR location finder only considers memory regions that are not already occupied by KHO memory. 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/x86/Kconfig | 3 ++ arch/x86/boot/compressed/kaslr.c | 52 +++++++++++++++++++++++++- arch/x86/include/asm/setup.h | 4 ++ arch/x86/include/uapi/asm/setup_data.h | 13 ++++++- arch/x86/kernel/e820.c | 18 +++++++++ arch/x86/kernel/kexec-bzimage64.c | 36 ++++++++++++++++++ arch/x86/kernel/setup.c | 25 +++++++++++++ arch/x86/realmode/init.c | 2 + 8 files changed, 151 insertions(+), 2 deletions(-) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 4b9f378e05f6b..ae82a42ff70e7 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -2029,6 +2029,9 @@ config ARCH_SUPPORTS_KEXEC_BZIMAGE_VERIFY_SIG config ARCH_SUPPORTS_KEXEC_JUMP def_bool y +config ARCH_SUPPORTS_KEXEC_HANDOVER + def_bool y + config ARCH_SUPPORTS_CRASH_DUMP def_bool X86_64 || (X86_32 && HIGHMEM) diff --git a/arch/x86/boot/compressed/kaslr.c b/arch/x86/boot/compressed/kaslr.c index f03d59ea6e40f..ff11688810162 100644 --- a/arch/x86/boot/compressed/kaslr.c +++ b/arch/x86/boot/compressed/kaslr.c @@ -760,6 +760,55 @@ static void process_e820_entries(unsigned long minimum, } } +/* + * If KHO is active, only process its scratch areas to ensure we are not + * stepping onto preserved memory. + */ +#ifdef CONFIG_KEXEC_HANDOVER +static bool process_kho_entries(unsigned long minimum, unsigned long image_size) +{ + struct kho_scratch *kho_scratch; + struct setup_data *ptr; + int i, nr_areas = 0; + + ptr = (struct setup_data *)(unsigned long)boot_params_ptr->hdr.setup_data; + while (ptr) { + if (ptr->type == SETUP_KEXEC_KHO) { + struct kho_data *kho = (struct kho_data *)ptr->data; + + kho_scratch = (void *)kho->scratch_addr; + nr_areas = kho->scratch_size / sizeof(*kho_scratch); + + break; + } + + ptr = (struct setup_data *)(unsigned long)ptr->next; + } + + if (!nr_areas) + return false; + + for (i = 0; i < nr_areas; i++) { + struct kho_scratch *area = &kho_scratch[i]; + struct mem_vector region = { + .start = area->addr, + .size = area->size, + }; + + if (process_mem_region(®ion, minimum, image_size)) + break; + } + + return true; +} +#else +static inline bool process_kho_entries(unsigned long minimum, + unsigned long image_size) +{ + return false; +} +#endif + static unsigned long find_random_phys_addr(unsigned long minimum, unsigned long image_size) { @@ -775,7 +824,8 @@ static unsigned long find_random_phys_addr(unsigned long minimum, return 0; } - if (!process_efi_entries(minimum, image_size)) + if (!process_kho_entries(minimum, image_size) && + !process_efi_entries(minimum, image_size)) process_e820_entries(minimum, image_size); phys_addr = slots_fetch_random(); diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h index ad9212df0ec0c..906ab5e6d25fe 100644 --- a/arch/x86/include/asm/setup.h +++ b/arch/x86/include/asm/setup.h @@ -67,6 +67,10 @@ extern void x86_ce4100_early_setup(void); static inline void x86_ce4100_early_setup(void) { } #endif +#ifdef CONFIG_KEXEC_HANDOVER +#include +#endif + #ifndef _SETUP #include diff --git a/arch/x86/include/uapi/asm/setup_data.h b/arch/x86/include/uapi/asm/setup_data.h index 50c45ead4e7c9..2671c4e1b3a0b 100644 --- a/arch/x86/include/uapi/asm/setup_data.h +++ b/arch/x86/include/uapi/asm/setup_data.h @@ -13,7 +13,8 @@ #define SETUP_CC_BLOB 7 #define SETUP_IMA 8 #define SETUP_RNG_SEED 9 -#define SETUP_ENUM_MAX SETUP_RNG_SEED +#define SETUP_KEXEC_KHO 10 +#define SETUP_ENUM_MAX SETUP_KEXEC_KHO #define SETUP_INDIRECT (1<<31) #define SETUP_TYPE_MAX (SETUP_ENUM_MAX | SETUP_INDIRECT) @@ -78,6 +79,16 @@ struct ima_setup_data { __u64 size; } __attribute__((packed)); +/* + * Locations of kexec handover metadata + */ +struct kho_data { + __u64 fdt_addr; + __u64 fdt_size; + __u64 scratch_addr; + __u64 scratch_size; +} __attribute__((packed)); + #endif /* __ASSEMBLER__ */ #endif /* _UAPI_ASM_X86_SETUP_DATA_H */ diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c index 57120f0749cc3..c314212a5ecd5 100644 --- a/arch/x86/kernel/e820.c +++ b/arch/x86/kernel/e820.c @@ -1300,6 +1300,24 @@ void __init e820__memblock_setup(void) memblock_add(entry->addr, entry->size); } + /* + * At this point with KHO we only allocate from scratch memory. + * At the same time, we configure memblock to only allow + * allocations from memory below ISA_END_ADDRESS which is not + * a natural scratch region, because Linux ignores memory below + * ISA_END_ADDRESS at runtime. Beside very few (if any) early + * allocations, we must allocate real-mode trapoline below + * ISA_END_ADDRESS. + * + * To make sure that we can actually perform allocations during + * this phase, let's mark memory below ISA_END_ADDRESS as scratch + * so we can allocate from there in a scratch-only world. + * + * After real mode trampoline is allocated, we clear scratch + * marking from the memory below ISA_END_ADDRESS + */ + memblock_mark_kho_scratch(0, ISA_END_ADDRESS); + /* Throw away partial pages: */ memblock_trim_memory(PAGE_SIZE); diff --git a/arch/x86/kernel/kexec-bzimage64.c b/arch/x86/kernel/kexec-bzimage64.c index 68530fad05f74..518635cc0876c 100644 --- a/arch/x86/kernel/kexec-bzimage64.c +++ b/arch/x86/kernel/kexec-bzimage64.c @@ -233,6 +233,31 @@ setup_ima_state(const struct kimage *image, struct boot_params *params, #endif /* CONFIG_IMA_KEXEC */ } +static void setup_kho(const struct kimage *image, struct boot_params *params, + unsigned long params_load_addr, + unsigned int setup_data_offset) +{ +#ifdef CONFIG_KEXEC_HANDOVER + struct setup_data *sd = (void *)params + setup_data_offset; + struct kho_data *kho = (void *)sd + sizeof(*sd); + + sd->type = SETUP_KEXEC_KHO; + sd->len = sizeof(struct kho_data); + + /* Only add if we have all KHO images in place */ + if (!image->kho.fdt || !image->kho.scratch) + return; + + /* Add setup data */ + kho->fdt_addr = image->kho.fdt; + kho->fdt_size = PAGE_SIZE; + kho->scratch_addr = image->kho.scratch->mem; + kho->scratch_size = image->kho.scratch->bufsz; + sd->next = params->hdr.setup_data; + params->hdr.setup_data = params_load_addr + setup_data_offset; +#endif /* CONFIG_KEXEC_HANDOVER */ +} + static int setup_boot_parameters(struct kimage *image, struct boot_params *params, unsigned long params_load_addr, @@ -312,6 +337,13 @@ setup_boot_parameters(struct kimage *image, struct boot_params *params, sizeof(struct ima_setup_data); } + if (IS_ENABLED(CONFIG_KEXEC_HANDOVER)) { + /* Setup space to store preservation metadata */ + setup_kho(image, params, params_load_addr, setup_data_offset); + setup_data_offset += sizeof(struct setup_data) + + sizeof(struct kho_data); + } + /* Setup RNG seed */ setup_rng_seed(params, params_load_addr, setup_data_offset); @@ -479,6 +511,10 @@ static void *bzImage64_load(struct kimage *image, char *kernel, kbuf.bufsz += sizeof(struct setup_data) + sizeof(struct ima_setup_data); + if (IS_ENABLED(CONFIG_KEXEC_HANDOVER)) + kbuf.bufsz += sizeof(struct setup_data) + + sizeof(struct kho_data); + params = kzalloc(kbuf.bufsz, GFP_KERNEL); if (!params) return ERR_PTR(-ENOMEM); diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index 766176c4f5ee8..496dae89cf95d 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c @@ -451,6 +451,28 @@ int __init ima_get_kexec_buffer(void **addr, size_t *size) } #endif +static void __init add_kho(u64 phys_addr, u32 data_len) +{ +#ifdef CONFIG_KEXEC_HANDOVER + struct kho_data *kho; + u64 addr = phys_addr + sizeof(struct setup_data); + u64 size = data_len - sizeof(struct setup_data); + + kho = early_memremap(addr, size); + if (!kho) { + pr_warn("setup: failed to memremap kho data (0x%llx, 0x%llx)\n", + addr, size); + return; + } + + kho_populate(kho->fdt_addr, kho->fdt_size, kho->scratch_addr, kho->scratch_size); + + early_memunmap(kho, size); +#else + pr_warn("Passed KHO data, but CONFIG_KEXEC_HANDOVER not set. Ignoring.\n"); +#endif +} + static void __init parse_setup_data(void) { struct setup_data *data; @@ -479,6 +501,9 @@ static void __init parse_setup_data(void) case SETUP_IMA: add_early_ima_buffer(pa_data); break; + case SETUP_KEXEC_KHO: + add_kho(pa_data, data_len); + break; case SETUP_RNG_SEED: data = early_memremap(pa_data, data_len); add_bootloader_randomness(data->data, data->len); diff --git a/arch/x86/realmode/init.c b/arch/x86/realmode/init.c index f9bc444a3064d..9b9f4534086d2 100644 --- a/arch/x86/realmode/init.c +++ b/arch/x86/realmode/init.c @@ -65,6 +65,8 @@ void __init reserve_real_mode(void) * setup_arch(). */ memblock_reserve(0, SZ_1M); + + memblock_clear_kho_scratch(0, SZ_1M); } static void __init sme_sev_setup_real_mode(struct trampoline_header *th)