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 X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6E651C433EF for ; Thu, 16 Sep 2021 23:13:49 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 19AEE61207 for ; Thu, 16 Sep 2021 23:13:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 19AEE61207 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=soleen.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id F1BE0940010; Thu, 16 Sep 2021 19:13:43 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E7B7F940007; Thu, 16 Sep 2021 19:13:43 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B92DD940010; Thu, 16 Sep 2021 19:13:43 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id A9AB2940007 for ; Thu, 16 Sep 2021 19:13:43 -0400 (EDT) Received: from smtpin16.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 710E71803377E for ; Thu, 16 Sep 2021 23:13:43 +0000 (UTC) X-FDA: 78594990726.16.EAB6E59 Received: from mail-qv1-f43.google.com (mail-qv1-f43.google.com [209.85.219.43]) by imf23.hostedemail.com (Postfix) with ESMTP id 3080090000B8 for ; Thu, 16 Sep 2021 23:13:43 +0000 (UTC) Received: by mail-qv1-f43.google.com with SMTP id 62so5290959qvb.11 for ; Thu, 16 Sep 2021 16:13:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Ax+khFLMo4ZiuU9FVutUfzu+NTMgGKavPhnStp8tBHw=; b=PbkZVHKG1lzCk69ODfdNdcgHyqZquLzFuzVT6KKZbcORyICTzwb+CxRxFl+5dybvEe z5P1PAlMuXnW8gDxKtYN+y0VFpBI/4JZD836aPq+Utuovdu67emLZ1VcVCUaMdzpSVz+ jfj3a0cCtAqkUVzTY2rw6CsM66A1xZIFxR2KsV+OEVGs9vK9lgMNVT10JUej/4xxxlV+ MkUCl6eEpYQ6ZYv2h2qH8N3xLG7l1HWudXMoAu5ghDCXRUhezxdJzB9CtCgdQJo7XP9Q PyP3+Hp2uq7may6hJyp/yc2W8oIDztRnQWLXlPgBjWkE8QqDyv86IlK99GHbmABoXA1f Gl8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Ax+khFLMo4ZiuU9FVutUfzu+NTMgGKavPhnStp8tBHw=; b=5U5oldBeemp/DJUQTI5j78cbQYroQBzmrl2ye2wUXQ6xFED5oPF0Qi/vjtM/aAee59 09tja5fg4cAZ1iwWGnoAKt2zZfkCqXWtvVR824ibQIHs40FsxMvS/BE79JH72yoAZ2lE R5dT6awbpuLOMNi0nfSIfYKOyYPKl4R0fjdUeA12S+6Wao5w4bkqKZtpQ/mLT8Dv5LHY Easl+EAFus6C3+JQp3H4DId2VLDWFnDDfrHm7/vbcg476CWuNsQfkp+WJHJfIICxprzb sop6EenN5tMmNNb627h+0uAFmJT+ORJKIixQpdfmoNQyCZxly2jeilMAPucfyl1LSoku sgRA== X-Gm-Message-State: AOAM533lq84mVa3UdXak+TqUd3cuLWJfykkCb4vwMNi2FiXJqQ6HI4cA t+hS4Vw4Hq1g9mz9fDoJ86ABEA== X-Google-Smtp-Source: ABdhPJxdt0Gno/JIaUtNR1NRx65yQhLTr3uYqpdqpaJPl0uNatREDKubCc3nBMJAWCg6/G4DMYc9CQ== X-Received: by 2002:ad4:5583:: with SMTP id e3mr8239009qvx.42.1631834022594; Thu, 16 Sep 2021 16:13:42 -0700 (PDT) Received: from localhost.localdomain (c-73-69-118-222.hsd1.nh.comcast.net. [73.69.118.222]) by smtp.gmail.com with ESMTPSA id az6sm3312891qkb.70.2021.09.16.16.13.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Sep 2021 16:13:42 -0700 (PDT) From: Pasha Tatashin To: pasha.tatashin@soleen.com, jmorris@namei.org, sashal@kernel.org, ebiederm@xmission.com, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, corbet@lwn.net, catalin.marinas@arm.com, will@kernel.org, linux-arm-kernel@lists.infradead.org, maz@kernel.org, james.morse@arm.com, vladimir.murzin@arm.com, matthias.bgg@gmail.com, linux-mm@kvack.org, mark.rutland@arm.com, steve.capper@arm.com, rfontana@redhat.com, tglx@linutronix.de, selindag@gmail.com, tyhicks@linux.microsoft.com, kernelfans@gmail.com, akpm@linux-foundation.org, madvenka@linux.microsoft.com Subject: [PATCH v17 10/15] arm64: kexec: use ld script for relocation function Date: Thu, 16 Sep 2021 19:13:20 -0400 Message-Id: <20210916231325.125533-11-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210916231325.125533-1-pasha.tatashin@soleen.com> References: <20210916231325.125533-1-pasha.tatashin@soleen.com> MIME-Version: 1.0 X-Stat-Signature: kpwjm8p9b3qxmk6ze6n13qazgue8f7e3 Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=soleen.com header.s=google header.b=PbkZVHKG; dmarc=none; spf=pass (imf23.hostedemail.com: domain of pasha.tatashin@soleen.com designates 209.85.219.43 as permitted sender) smtp.mailfrom=pasha.tatashin@soleen.com X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 3080090000B8 X-HE-Tag: 1631834023-987147 Content-Transfer-Encoding: quoted-printable 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: Currently, relocation code declares start and end variables which are used to compute its size. The better way to do this is to use ld script incited, and put relocation function in its own section. Signed-off-by: Pasha Tatashin --- arch/arm64/include/asm/sections.h | 1 + arch/arm64/kernel/machine_kexec.c | 16 ++++++---------- arch/arm64/kernel/relocate_kernel.S | 15 ++------------- arch/arm64/kernel/vmlinux.lds.S | 19 +++++++++++++++++++ 4 files changed, 28 insertions(+), 23 deletions(-) diff --git a/arch/arm64/include/asm/sections.h b/arch/arm64/include/asm/s= ections.h index e4ad9db53af1..152cb35bf9df 100644 --- a/arch/arm64/include/asm/sections.h +++ b/arch/arm64/include/asm/sections.h @@ -21,5 +21,6 @@ extern char __exittext_begin[], __exittext_end[]; extern char __irqentry_text_start[], __irqentry_text_end[]; extern char __mmuoff_data_start[], __mmuoff_data_end[]; extern char __entry_tramp_text_start[], __entry_tramp_text_end[]; +extern char __relocate_new_kernel_start[], __relocate_new_kernel_end[]; =20 #endif /* __ASM_SECTIONS_H */ diff --git a/arch/arm64/kernel/machine_kexec.c b/arch/arm64/kernel/machin= e_kexec.c index cf5d6f22a041..83da6045cd45 100644 --- a/arch/arm64/kernel/machine_kexec.c +++ b/arch/arm64/kernel/machine_kexec.c @@ -21,14 +21,11 @@ #include #include #include +#include #include =20 #include "cpu-reset.h" =20 -/* Global variables for the arm64_relocate_new_kernel routine. */ -extern const unsigned char arm64_relocate_new_kernel[]; -extern const unsigned long arm64_relocate_new_kernel_size; - /** * kexec_image_info - For debugging output. */ @@ -163,6 +160,7 @@ static void *kexec_page_alloc(void *arg) int machine_kexec_post_load(struct kimage *kimage) { void *reloc_code =3D page_to_virt(kimage->control_code_page); + long reloc_size; struct trans_pgd_info info =3D { .trans_alloc_page =3D kexec_page_alloc, .trans_alloc_arg =3D kimage, @@ -183,17 +181,15 @@ int machine_kexec_post_load(struct kimage *kimage) return rc; } =20 - memcpy(reloc_code, arm64_relocate_new_kernel, - arm64_relocate_new_kernel_size); + reloc_size =3D __relocate_new_kernel_end - __relocate_new_kernel_start; + memcpy(reloc_code, __relocate_new_kernel_start, reloc_size); kimage->arch.kern_reloc =3D __pa(reloc_code); =20 /* Flush the reloc_code in preparation for its execution. */ dcache_clean_inval_poc((unsigned long)reloc_code, - (unsigned long)reloc_code + - arm64_relocate_new_kernel_size); + (unsigned long)reloc_code + reloc_size); icache_inval_pou((uintptr_t)reloc_code, - (uintptr_t)reloc_code + - arm64_relocate_new_kernel_size); + (uintptr_t)reloc_code + reloc_size); kexec_list_flush(kimage); kexec_image_info(kimage); =20 diff --git a/arch/arm64/kernel/relocate_kernel.S b/arch/arm64/kernel/relo= cate_kernel.S index b4fb97312a80..9d2400855ee4 100644 --- a/arch/arm64/kernel/relocate_kernel.S +++ b/arch/arm64/kernel/relocate_kernel.S @@ -15,6 +15,7 @@ #include #include =20 +.pushsection ".kexec_relocate.text", "ax" /* * arm64_relocate_new_kernel - Put a 2nd stage image in place and boot i= t. * @@ -77,16 +78,4 @@ SYM_CODE_START(arm64_relocate_new_kernel) mov x3, xzr br x4 /* Jumps from el1 */ SYM_CODE_END(arm64_relocate_new_kernel) - -.align 3 /* To keep the 64-bit values below naturally aligned. */ - -.Lcopy_end: -.org KEXEC_CONTROL_PAGE_SIZE - -/* - * arm64_relocate_new_kernel_size - Number of bytes to copy to the - * control_code_page. - */ -.globl arm64_relocate_new_kernel_size -arm64_relocate_new_kernel_size: - .quad .Lcopy_end - arm64_relocate_new_kernel +.popsection diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.= lds.S index f6b1a88245db..ab457b609e69 100644 --- a/arch/arm64/kernel/vmlinux.lds.S +++ b/arch/arm64/kernel/vmlinux.lds.S @@ -63,6 +63,7 @@ #include #include #include +#include #include #include =20 @@ -100,6 +101,16 @@ jiffies =3D jiffies_64; #define HIBERNATE_TEXT #endif =20 +#ifdef CONFIG_KEXEC_CORE +#define KEXEC_TEXT \ + . =3D ALIGN(SZ_4K); \ + __relocate_new_kernel_start =3D .; \ + *(.kexec_relocate.text) \ + __relocate_new_kernel_end =3D .; +#else +#define KEXEC_TEXT +#endif + #ifdef CONFIG_UNMAP_KERNEL_AT_EL0 #define TRAMP_TEXT \ . =3D ALIGN(PAGE_SIZE); \ @@ -160,6 +171,7 @@ SECTIONS HYPERVISOR_TEXT IDMAP_TEXT HIBERNATE_TEXT + KEXEC_TEXT TRAMP_TEXT *(.fixup) *(.gnu.warning) @@ -348,3 +360,10 @@ ASSERT(swapper_pg_dir - reserved_pg_dir =3D=3D RESER= VED_SWAPPER_OFFSET, ASSERT(swapper_pg_dir - tramp_pg_dir =3D=3D TRAMP_SWAPPER_OFFSET, "TRAMP_SWAPPER_OFFSET is wrong!") #endif + +#ifdef CONFIG_KEXEC_CORE +/* kexec relocation code should fit into one KEXEC_CONTROL_PAGE_SIZE */ +ASSERT(__relocate_new_kernel_end - (__relocate_new_kernel_start & ~(SZ_4= K - 1)) + <=3D SZ_4K, "kexec relocation code is too big or misaligned") +ASSERT(KEXEC_CONTROL_PAGE_SIZE >=3D SZ_4K, "KEXEC_CONTROL_PAGE_SIZE is b= rokern") +#endif --=20 2.25.1