From patchwork Thu May 27 15:05:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pasha Tatashin X-Patchwork-Id: 12284549 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.5 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,URIBL_BLOCKED,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 8131AC47089 for ; Thu, 27 May 2021 15:05:58 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 2785A6128D for ; Thu, 27 May 2021 15:05:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2785A6128D 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 A591B6B0082; Thu, 27 May 2021 11:05:48 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A30716B0083; Thu, 27 May 2021 11:05:48 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 85C026B0085; Thu, 27 May 2021 11:05:48 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0202.hostedemail.com [216.40.44.202]) by kanga.kvack.org (Postfix) with ESMTP id 477AF6B0082 for ; Thu, 27 May 2021 11:05:48 -0400 (EDT) Received: from smtpin12.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id E1718AF6A for ; Thu, 27 May 2021 15:05:47 +0000 (UTC) X-FDA: 78187335534.12.FAA6DDF Received: from mail-qk1-f173.google.com (mail-qk1-f173.google.com [209.85.222.173]) by imf03.hostedemail.com (Postfix) with ESMTP id 7FE7CC0007C0 for ; Thu, 27 May 2021 15:05:39 +0000 (UTC) Received: by mail-qk1-f173.google.com with SMTP id j184so930934qkd.6 for ; Thu, 27 May 2021 08:05:47 -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=spq5ynnfnR8TM5XEPzllfdybPKsLwK1jYCVhSyBxi9M=; b=kEzFCK/OZq65q45023j25DBKIv6t/KPooiYfjWWPP3IJOjjHeRmCpQtuVLJkoQfk0m LLZVUvatSqsTefwkG844IqhjmqYz+eKjmIWMguCbE//G/PZilV1ovqWDnr3/kiQThoLe 8J5fE0vuDmRoHMifm12gmszoCPbgL/6vKPWVbsXnCVp6POQBaG8mMnHIcVImT2bPCI1y BV/yFm5eIJfxxYVdS1bcl46gMJrIytDeVhMlnOV5TIYrxeOwAZcaQxROJ+GyKDP9GrtS PtTEcv1/j/uuZXYBfqEmqGTXfvUSywNUrIEs2IE6VveTwxDnHBc/1L6sfb2iuapuRDjs +mIQ== 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=spq5ynnfnR8TM5XEPzllfdybPKsLwK1jYCVhSyBxi9M=; b=fSSTR6nISxMHvcS9ifxjdwf+IEjlLeqkhpfRdTQqCb6n/S+vhL8dqdtTrIKPkIUOZZ +tv15r8spQ6wBmh+H1ktjdWqMcPnX2YcgCBFS2wSfUUCOBXkQlUTzLWijjxoni83JO+u CHfIOG+0TN5QgVJ01xi+/xADmbRQsF3kX0HDIRs0cPSy5O9+EB+BBZnCWQZ5f3+Bpdry CzZ55v0kp0PjJZsl2v2iMnEFOvYlpEMPNGIA60UwT/epSF4U0l7oDzh0+0Hm1yF6z7hE kaqS7siEFx+DeGEJeJEAhTwE4vSM2mNMpzBoD+iWdNzJdW592V9SGI8Epn3aIXpJxjcm wCKg== X-Gm-Message-State: AOAM533wIGru+zbv7TMm6Ogfha98B790xkqtK03R80C7tq1vhmAL2TxR nMi7QcumEG5v8me5zPdkC7yu9A== X-Google-Smtp-Source: ABdhPJwCPp5AbyvNOecFI+FqtUWaR34fdNcgOcCR3qCe2Y2zX902CBP0VehAshlb1076RC/1us6hfg== X-Received: by 2002:a05:620a:2282:: with SMTP id o2mr3866648qkh.479.1622127946786; Thu, 27 May 2021 08:05:46 -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 x10sm1447468qkh.124.2021.05.27.08.05.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 May 2021 08:05:46 -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, akpm@linux-foundation.org, madvenka@linux.microsoft.com Subject: [PATCH 12/18] arm64: kexec: relocate in EL1 mode Date: Thu, 27 May 2021 11:05:20 -0400 Message-Id: <20210527150526.271941-13-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210527150526.271941-1-pasha.tatashin@soleen.com> References: <20210527150526.271941-1-pasha.tatashin@soleen.com> MIME-Version: 1.0 Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=soleen.com header.s=google header.b="kEzFCK/O"; dmarc=none; spf=pass (imf03.hostedemail.com: domain of pasha.tatashin@soleen.com designates 209.85.222.173 as permitted sender) smtp.mailfrom=pasha.tatashin@soleen.com X-Stat-Signature: 3pc7jgnfij4uke7ijjyn9dtj7rgtejb4 X-Rspamd-Queue-Id: 7FE7CC0007C0 X-Rspamd-Server: rspam02 X-HE-Tag: 1622127939-458569 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 48d0ed48c147..296abbac7192 100644 --- a/arch/arm64/kernel/cpu-reset.h +++ b/arch/arm64/kernel/cpu-reset.h @@ -20,11 +20,10 @@ static inline void __noreturn __nocfi cpu_soft_restart(unsigned long entry, { typeof(__cpu_soft_restart) *restart; - unsigned long el2_switch = is_hyp_callable(); restart = (void *)__pa_symbol(function_nocfi(__cpu_soft_restart)); cpu_install_idmap(); - restart(el2_switch, entry, arg0, arg1, arg2); + restart(0, entry, arg0, arg1, arg2); unreachable(); } diff --git a/arch/arm64/kernel/machine_kexec.c b/arch/arm64/kernel/machine_kexec.c index 9f74791cb1d0..c9993f029262 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); } BUG(); /* Should never get here. */ diff --git a/arch/arm64/kernel/relocate_kernel.S b/arch/arm64/kernel/relocate_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 /* * arm64_relocate_new_kernel - Put a 2nd stage image in place and boot it. @@ -61,12 +62,20 @@ SYM_CODE_START(arm64_relocate_new_kernel) isb /* 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) .align 3 /* To keep the 64-bit values below naturally aligned. */