Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp2544586pxb; Sun, 24 Jan 2021 10:48:14 -0800 (PST) X-Google-Smtp-Source: ABdhPJxKVTZzq7AqwE++I2+WE480tf97UX8J0LIvaCHVmXu6RxatjcPeselmPSheLP/kcKbd90C4 X-Received: by 2002:a05:6402:31a4:: with SMTP id dj4mr196457edb.156.1611514093998; Sun, 24 Jan 2021 10:48:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611514093; cv=none; d=google.com; s=arc-20160816; b=egtqCmvfEz4mJuzQlZBaSvs4bGdmZ2PQ3bLECap3yKqRVPIq+rna0xdaeeNxZWu/DR 5MQWqEXQtOuKmClOXI/NdCsMMoq0s5YeO/IWd8l59J3IOD4gEFl0yYJgj1QYmC2K562n agYvlafh54D/9cYcVdYgm0yhu57oRo4V8OcokIXlrX/CHutRniRNMCoxveisvMwUT66O c4dmsg1eYIIvS49tS3HOcMa0QcbDlxZ5rHkfHpm2Bf30LTNBWz1WeEtxLBHUBK2KBpD6 Ni5gayeMKWoazMIPwu9v9tqiqub+rZsjx4V9sdppYCgbAqxgj/JpkY79xMUCliuZcXno ylow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent:references:in-reply-to :subject:cc:to:from:message-id:date; bh=RfpU3RNBWT5IazTz2YUnc0jX1fOXaavQ7hD1/Qfg8lI=; b=PW42XMdPjapI85L7HJq9BmdH+MLykgEj0JxYarXydjweNL/Z8y5++8T7SNwXe7BZNc DdSIpDs8c5DEQA1IqqCGBe9r0csblePkjmLf8hg3C0ZsEBeWUeUPDqZwYPBB8coeeGcj z3/IieO7k1GuI297NmaV0R94R3HrjZ5nttIJGHDyqTkhIkiloIY4b22eWCQU9v4DMkey RUEts3M/86vBdcfg2LGDONJTkvVhglwFhq89nlydaaAo48Pr7/OeAHWgfVPJbdR20Wqm A5604MRLc29UbUkJnqQao+Cclg11VVyqqMBym6Ye0NXOOISpzGkFiMKoP9D66exOKb8R vkgA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v2si5277363ejy.301.2021.01.24.10.47.49; Sun, 24 Jan 2021 10:48:13 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726177AbhAXSo5 (ORCPT + 99 others); Sun, 24 Jan 2021 13:44:57 -0500 Received: from mail.kernel.org ([198.145.29.99]:36128 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726007AbhAXSo4 (ORCPT ); Sun, 24 Jan 2021 13:44:56 -0500 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E98CE222BB; Sun, 24 Jan 2021 18:44:14 +0000 (UTC) Received: from 78.163-31-62.static.virginmediabusiness.co.uk ([62.31.163.78] helo=wait-a-minute.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94) (envelope-from ) id 1l3kMu-009lbm-U9; Sun, 24 Jan 2021 18:44:13 +0000 Date: Sun, 24 Jan 2021 18:44:11 +0000 Message-ID: <87sg6qjhtw.wl-maz@kernel.org> From: Marc Zyngier To: David Brazdil Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org, Catalin Marinas , Will Deacon , Mark Rutland , Alexandru Elisei , Ard Biesheuvel , Jing Zhang , Ajay Patil , Prasad Sodagudi , Srinivas Ramana , James Morse , Julien Thierry , Suzuki K Poulose , kernel-team@android.com Subject: Re: [PATCH v4 04/21] arm64: Provide an 'upgrade to VHE' stub hypercall In-Reply-To: <20210118112516.6a7lnrtbjvey4iiv@google.com> References: <20210118094533.2874082-1-maz@kernel.org> <20210118094533.2874082-5-maz@kernel.org> <20210118112516.6a7lnrtbjvey4iiv@google.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/27.1 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII X-SA-Exim-Connect-IP: 62.31.163.78 X-SA-Exim-Rcpt-To: dbrazdil@google.com, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org, catalin.marinas@arm.com, will@kernel.org, mark.rutland@arm.com, alexandru.elisei@arm.com, ardb@kernel.org, jingzhangos@google.com, pajay@qti.qualcomm.com, psodagud@codeaurora.org, sramana@codeaurora.org, james.morse@arm.com, julien.thierry.kdev@gmail.com, suzuki.poulose@arm.com, kernel-team@android.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 18 Jan 2021 11:25:16 +0000, David Brazdil wrote: > > On Mon, Jan 18, 2021 at 09:45:16AM +0000, Marc Zyngier wrote: > > As we are about to change the way a VHE system boots, let's > > provide the core helper, in the form of a stub hypercall that > > enables VHE and replicates the full EL1 context at EL2, thanks > > to EL1 and VHE-EL2 being extremely similar. > > > > On exception return, the kernel carries on at EL2. Fancy! > > > > Nothing calls this new hypercall yet, so no functional change. > > > > Signed-off-by: Marc Zyngier > > --- > > arch/arm64/include/asm/virt.h | 7 +++- > > arch/arm64/kernel/hyp-stub.S | 67 +++++++++++++++++++++++++++++++++-- > > 2 files changed, 71 insertions(+), 3 deletions(-) > > > > diff --git a/arch/arm64/include/asm/virt.h b/arch/arm64/include/asm/virt.h > > index ee6a48df89d9..7379f35ae2c6 100644 > > --- a/arch/arm64/include/asm/virt.h > > +++ b/arch/arm64/include/asm/virt.h > > @@ -35,8 +35,13 @@ > > */ > > #define HVC_RESET_VECTORS 2 > > > > +/* > > + * HVC_VHE_RESTART - Upgrade the CPU from EL1 to EL2, if possible > > + */ > > +#define HVC_VHE_RESTART 3 > > + > > /* Max number of HYP stub hypercalls */ > > -#define HVC_STUB_HCALL_NR 3 > > +#define HVC_STUB_HCALL_NR 4 > > > > /* Error returned when an invalid stub number is passed into x0 */ > > #define HVC_STUB_ERR 0xbadca11 > > diff --git a/arch/arm64/kernel/hyp-stub.S b/arch/arm64/kernel/hyp-stub.S > > index 160f5881a0b7..fb12398b5c28 100644 > > --- a/arch/arm64/kernel/hyp-stub.S > > +++ b/arch/arm64/kernel/hyp-stub.S > > @@ -8,9 +8,9 @@ > > > > #include > > #include > > -#include > > > > #include > > +#include > > #include > > #include > > #include > > @@ -47,10 +47,13 @@ SYM_CODE_END(__hyp_stub_vectors) > > > > SYM_CODE_START_LOCAL(el1_sync) > > cmp x0, #HVC_SET_VECTORS > > - b.ne 2f > > + b.ne 1f > > msr vbar_el2, x1 > > b 9f > > > > +1: cmp x0, #HVC_VHE_RESTART > > + b.eq mutate_to_vhe > > + > > 2: cmp x0, #HVC_SOFT_RESTART > > b.ne 3f > > mov x0, x2 > > @@ -70,6 +73,66 @@ SYM_CODE_START_LOCAL(el1_sync) > > eret > > SYM_CODE_END(el1_sync) > > > > +// nVHE? No way! Give me the real thing! > > +SYM_CODE_START_LOCAL(mutate_to_vhe) > > + // Sanity check: MMU *must* be off > > + mrs x0, sctlr_el2 > > + tbnz x0, #0, 1f > > + > > + // Needs to be VHE capable, obviously > > + mrs x0, id_aa64mmfr1_el1 > > + ubfx x0, x0, #ID_AA64MMFR1_VHE_SHIFT, #4 > > + cbz x0, 1f > > nit: There is a HVC_STUB_ERR that you could return if these sanity > checks fail. The documentation also states that it should be > returned on error. Good point. I've now added it, but how the error can be handled is still up in the air. For now, I've decided to let the kernel continue its (probably doomed) course. Thanks, M. -- Without deviation from the norm, progress is not possible.