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 2F310C433ED for ; Thu, 8 Apr 2021 04:06:05 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id D1CC5611C0 for ; Thu, 8 Apr 2021 04:06:04 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D1CC5611C0 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=soleen.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 9C2D86B0092; Thu, 8 Apr 2021 00:05:56 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 925666B0093; Thu, 8 Apr 2021 00:05:56 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 641846B0095; Thu, 8 Apr 2021 00:05:56 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0044.hostedemail.com [216.40.44.44]) by kanga.kvack.org (Postfix) with ESMTP id 3C2736B0092 for ; Thu, 8 Apr 2021 00:05:56 -0400 (EDT) Received: from smtpin25.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id F2D338778 for ; Thu, 8 Apr 2021 04:05:55 +0000 (UTC) X-FDA: 78007861470.25.576B582 Received: from mail-qv1-f48.google.com (mail-qv1-f48.google.com [209.85.219.48]) by imf26.hostedemail.com (Postfix) with ESMTP id E9DBC40002CF for ; Thu, 8 Apr 2021 04:05:52 +0000 (UTC) Received: by mail-qv1-f48.google.com with SMTP id fn8so261930qvb.5 for ; Wed, 07 Apr 2021 21:05:55 -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=ATHDsIlQRij0i8p3z1/oZchje9DfRT1VSEQgV22ghC4=; b=cZfP06UdFwUbDXzsBkl1RZmPvCxQFFD555CU5BZSd+vAYM+/Oe+q5LF6b+AeDb3hx2 LFsT7XpzjiKY3Si2YsqeQ/IsmJpOiDmMG/HNxXKVtP9KTMFFrpTt/zWcuY6K4+nYd9LP 9ZKSsnmvV+2+q+Pmt93pKHZ0lgdpVdpMXDll0Wv1hibDF4r0T45CgLAGXvLMQJPDkBFz 9IzjdkP1g6YNXrx/gkwrI/Ofe/tf10DE04Grydz47vkZEbw+ldvrJuhINzXNy4tlgWG7 P+aKh8JBXoF2aRQrMgr5pwbBamx/FerBKZ1ntwmSE4A+0xIGTTmKGW08lsKS3Z2H1qJG Decw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ATHDsIlQRij0i8p3z1/oZchje9DfRT1VSEQgV22ghC4=; b=O1tEB87CS2Vze+wZLHJaZ2fbnnTjosbyH3vaEYoatS+gHYtsD9OsURBY947T3BKpEN PHOjg1HyCeudpPbts53nxzU8enXUq4B9oBQ6dcdolKyfHwEgFhVcFKOoSu2Y7mzeKwIq 2syEh9a4IAgGKXeeyb+NQE3RWSr7xqJPlmVfrD686fD3tyJtbARad/bF/r+1Mg+nCHdp ZQEUNZ2iJ6pPSTGC6K0lR7LxDaLIC+5xfkdXURzsm5izMghUAH/0HNrrUpKXLJ4BBppB 6ZqpfFu235jHVJIfBlWXvxjRdJmpI8dOzGgXVdeOmJP/7ceOOqVOeNCznlyeyswmr6fg SEkw== X-Gm-Message-State: AOAM533sJyE6+2aDRQqmUlSewydxxUBsb5YNoNv7zWgBGcxsKCv4JHP9 +7pKg+pLucgq3DABwPvtjOXPRA== X-Google-Smtp-Source: ABdhPJyQo5a7wag6qg1KfAN2lYACfcQS04kFQ7QD+1uKAF30/6EW8kWHUAmbTGpYPmRfnaUQw+xfFQ== X-Received: by 2002:a0c:e2cd:: with SMTP id t13mr7015227qvl.21.1617854754850; Wed, 07 Apr 2021 21:05:54 -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 207sm18177874qkl.125.2021.04.07.21.05.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Apr 2021 21:05:54 -0700 (PDT) From: Pavel 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 Subject: [PATCH v13 12/18] arm64: kexec: relocate in EL1 mode Date: Thu, 8 Apr 2021 00:05:31 -0400 Message-Id: <20210408040537.2703241-13-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210408040537.2703241-1-pasha.tatashin@soleen.com> References: <20210408040537.2703241-1-pasha.tatashin@soleen.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: E9DBC40002CF X-Stat-Signature: 4dr61fpjjtcaf44jqwhpftun5ad14acq X-Rspamd-Server: rspam02 Received-SPF: none (soleen.com>: No applicable sender policy available) receiver=imf26; identity=mailfrom; envelope-from=""; helo=mail-qv1-f48.google.com; client-ip=209.85.219.48 X-HE-DKIM-Result: pass/pass X-HE-Tag: 1617854752-819939 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: Since we are going to keep MMU enabled during relocation, we need to keep EL1 mode throughout the relocation. Keep EL1 enabled, and switch EL2 only before enterying the new world. Suggested-by: James Morse Signed-off-by: Pavel Tatashin --- arch/arm64/kernel/cpu-reset.h | 3 +-- arch/arm64/kernel/machine_kexec.c | 4 ++-- arch/arm64/kernel/relocate_kernel.S | 13 +++++++++++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/arch/arm64/kernel/cpu-reset.h b/arch/arm64/kernel/cpu-reset.= h index 1922e7a690f8..f6d95512fec6 100644 --- a/arch/arm64/kernel/cpu-reset.h +++ b/arch/arm64/kernel/cpu-reset.h @@ -20,11 +20,10 @@ static inline void __noreturn cpu_soft_restart(unsign= ed long entry, { typeof(__cpu_soft_restart) *restart; =20 - unsigned long el2_switch =3D is_hyp_callable(); restart =3D (void *)__pa_symbol(__cpu_soft_restart); =20 cpu_install_idmap(); - restart(el2_switch, entry, arg0, arg1, arg2); + restart(0, entry, arg0, arg1, arg2); unreachable(); } =20 diff --git a/arch/arm64/kernel/machine_kexec.c b/arch/arm64/kernel/machin= e_kexec.c index fb03b6676fb9..d5940b7889f8 100644 --- a/arch/arm64/kernel/machine_kexec.c +++ b/arch/arm64/kernel/machine_kexec.c @@ -231,8 +231,8 @@ void machine_kexec(struct kimage *kimage) } else { if (is_hyp_callable()) __hyp_set_vectors(kimage->arch.el2_vectors); - cpu_soft_restart(kimage->arch.kern_reloc, virt_to_phys(kimage), - 0, 0); + cpu_soft_restart(kimage->arch.kern_reloc, + virt_to_phys(kimage), 0, 0); } =20 BUG(); /* Should never get here. */ diff --git a/arch/arm64/kernel/relocate_kernel.S b/arch/arm64/kernel/relo= cate_kernel.S index 36b4496524c3..df023b82544b 100644 --- a/arch/arm64/kernel/relocate_kernel.S +++ b/arch/arm64/kernel/relocate_kernel.S @@ -13,6 +13,7 @@ #include #include #include +#include =20 /* * arm64_relocate_new_kernel - Put a 2nd stage image in place and boot i= t. @@ -61,12 +62,20 @@ SYM_CODE_START(arm64_relocate_new_kernel) isb =20 /* Start new image. */ + ldr x1, [x0, #KIMAGE_ARCH_EL2_VECTORS] /* relocation start */ + cbz x1, .Lel1 + ldr x1, [x0, #KIMAGE_START] /* relocation start */ + ldr x2, [x0, #KIMAGE_ARCH_DTB_MEM] /* dtb address */ + mov x3, xzr + mov x4, xzr + mov x0, #HVC_SOFT_RESTART + hvc #0 /* Jumps from el2 */ +.Lel1: ldr x4, [x0, #KIMAGE_START] /* relocation start */ ldr x0, [x0, #KIMAGE_ARCH_DTB_MEM] /* dtb address */ - mov x1, xzr mov x2, xzr mov x3, xzr - br x4 + br x4 /* Jumps from el1 */ SYM_CODE_END(arm64_relocate_new_kernel) =20 .align 3 /* To keep the 64-bit values below naturally aligned. */ --=20 2.25.1