From patchwork Tue Jul 18 16:58:56 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jintack Lim X-Patchwork-Id: 108149 Delivered-To: patch@linaro.org Received: by 10.182.45.195 with SMTP id p3csp6149220obm; Tue, 18 Jul 2017 10:00:45 -0700 (PDT) X-Received: by 10.84.232.133 with SMTP id i5mr2808305plk.240.1500397244993; Tue, 18 Jul 2017 10:00:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1500397244; cv=none; d=google.com; s=arc-20160816; b=yWppAC3Eu/4967OEY63TUpeHI8GAGPzXc3O5BNv8wqw4GegPhhsiX/AfUGOz2x+UnN 8W+ZvahHKVOgoVqILaQeijtECpAZsFzbfQa0TMvaSDTV+ZmqDbG1/IxIlk1E0nuv7Dlg KO0FDgG4CFnkAUgKUhiXKYlI/diM2Duh97Y7bdCLkIsQt8oKYGB5PXCF9fIurLNwvZzp ynHIA5D22VJL6F3H9yb+n3ma8I4feEV3hwA07qe6gIhuBFazfj14pqXjvyjYBh7WOzdv VjacJNCbpDSWE4731D5PlWXahHoMhVq0N/1Sx3fko9Pg0JvQf/EvRI8ImaycX1oUqUcX /C7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=A5YKrD4BtfvlL3J+aGGhT8lU0VAdDRDlOkZU8kaE8W0=; b=Ua2bJ4c0yRdsqeVs6TWocZgJmDfL/tZF1Y1l9i+MhqLzdEsummnsLsVpvb6ZKQJx+1 +0CXywntxDkK59mDQIuSlC77Z5ffgXBsqliIfoZz7jYQ5hzXfOnKlgKPFaLjrz2TtfUn N1kkq2AxqnvDV5SOwasCEXfWefStbNopZ731AM5DjYcvg7C8ZaNCaWoRCygjUXemF2PT z7JNawEX4XiaXJA6OneuTKMFLpFhpZPUajxLRpw9MKCKdopKT6WLmvJrTpKecxSzsH8Q T32vAc1oT8mwtGRWLYU/PLdvOWcZx68hiWfAh4zuYoMNsIHwijzmuAAj17iNLsRnLl1p eRfA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.b=RRIsYyXZ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c13si1938721pfl.475.2017.07.18.10.00.44; Tue, 18 Jul 2017 10:00:44 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.b=RRIsYyXZ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752531AbdGRRAj (ORCPT + 25 others); Tue, 18 Jul 2017 13:00:39 -0400 Received: from mail-it0-f50.google.com ([209.85.214.50]:35983 "EHLO mail-it0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752422AbdGRRA2 (ORCPT ); Tue, 18 Jul 2017 13:00:28 -0400 Received: by mail-it0-f50.google.com with SMTP id a62so23802095itd.1 for ; Tue, 18 Jul 2017 10:00:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=A5YKrD4BtfvlL3J+aGGhT8lU0VAdDRDlOkZU8kaE8W0=; b=RRIsYyXZk0ZaC61bIj5a7z1oKwvvUJszTVEwlkcVnk39LamkoxelynQ28vW/RYbMdg +JXXSQarnXBbqjH1uvCdX+804N6HAJUt+ieOSJX6TiyqMKXFR2BW1FJ4JgWC7EzqBM/b /51qfbOqbkuTTkpRYuQqICwWWbeOvuFFLRrJI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=A5YKrD4BtfvlL3J+aGGhT8lU0VAdDRDlOkZU8kaE8W0=; b=oIiJ+hF+dKgHXYkVkYXR2aQTEDoPTDwX7qvsvNL9gPcCJ3YBWg9AjthjN9Qo0zqtjx w15G22+w8DITBJJv/GMjtBMCObZ6g8MNfr4URs+c/QnkvwVwlRDHD8EcTVE92XYoQ8Et WLRNEqj96RPQj6PeM8JH/sktM8DDlkFM3L83c5cXHMPTWhdZYslWiEJyE+cjGLBPvp09 MYs1ITcS5mCk6dxFwNaqplVDhN+50rFEHJ+TLuK/RlWJ0F3B76PA/Q4bKsqsaJpYLpwv wfevLDfD0HO/4PbY62i8YfmaECM+kaSuBrPYFidFHPcSf3ZyMoy5AnV+tiL1AnWcMezm qgOg== X-Gm-Message-State: AIVw111Y0XkrgYOea33rSz8yAWesUcGHoa76EHr70rZnMgr7Qc1YG9UQ pBqGvllLNxbUv/Dq X-Received: by 10.36.129.2 with SMTP id q2mr3548517itd.80.1500397228232; Tue, 18 Jul 2017 10:00:28 -0700 (PDT) Received: from node.jintackl-qv26972.kvmarm-pg0.wisc.cloudlab.us (c220g1-030822.wisc.cloudlab.us. [128.104.222.82]) by smtp.gmail.com with ESMTPSA id j96sm1413075ioo.49.2017.07.18.10.00.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 18 Jul 2017 10:00:26 -0700 (PDT) From: Jintack Lim To: kvmarm@lists.cs.columbia.edu, christoffer.dall@linaro.org, marc.zyngier@arm.com Cc: corbet@lwn.net, pbonzini@redhat.com, rkrcmar@redhat.com, linux@armlinux.org.uk, catalin.marinas@arm.com, will.deacon@arm.com, akpm@linux-foundation.org, mchehab@kernel.org, cov@codeaurora.org, daniel.lezcano@linaro.org, david.daney@cavium.com, mark.rutland@arm.com, suzuki.poulose@arm.com, stefan@hello-penguin.com, andy.gross@linaro.org, wcohen@redhat.com, ard.biesheuvel@linaro.org, shankerd@codeaurora.org, vladimir.murzin@arm.com, james.morse@arm.com, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Jintack Lim Subject: [RFC PATCH v2 30/38] KVM: arm64: Allow the virtual EL2 to access EL2 states without trap Date: Tue, 18 Jul 2017 11:58:56 -0500 Message-Id: <1500397144-16232-31-git-send-email-jintack.lim@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1500397144-16232-1-git-send-email-jintack.lim@linaro.org> References: <1500397144-16232-1-git-send-email-jintack.lim@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When the virtual E2H bit is set, we can support EL2 register accesses via EL1 registers from the virtual EL2 by doing trap-and-emulate. A better alternative, however, is to allow the virtual EL2 to access EL2 register states without trap. This can be easily achieved by not traping EL1 registers since those registers already have EL2 register states. Signed-off-by: Jintack Lim --- arch/arm64/kvm/hyp/switch.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) -- 1.9.1 diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c index d513da9..fffd0c7 100644 --- a/arch/arm64/kvm/hyp/switch.c +++ b/arch/arm64/kvm/hyp/switch.c @@ -74,6 +74,7 @@ static hyp_alternate_select(__activate_traps_arch, static void __hyp_text __activate_traps(struct kvm_vcpu *vcpu) { u64 val; + u64 vhcr_el2; /* * We are about to set CPTR_EL2.TFP to trap all floating point @@ -89,8 +90,26 @@ static void __hyp_text __activate_traps(struct kvm_vcpu *vcpu) write_sysreg(1 << 30, fpexc32_el2); isb(); } - if (vcpu_mode_el2(vcpu)) - val |= HCR_TVM | HCR_TRVM; + + if (is_hyp_ctxt(vcpu)) { + /* + * For a guest hypervisor on v8.0, trap and emulate the EL1 + * virtual memory control register accesses. + */ + if (!vcpu_el2_e2h_is_set(vcpu)) + val |= HCR_TVM | HCR_TRVM; + /* + * For a guest hypervisor on v8.1 (VHE), allow to access the + * EL1 virtual memory control registers natively. These accesses + * are to access EL2 register states. + * Note that we stil need to respect the virtual HCR_EL2 state. + */ + else { + vhcr_el2 = vcpu_sys_reg(vcpu, HCR_EL2); + val |= vhcr_el2 & (HCR_TVM | HCR_TRVM); + } + } + write_sysreg(val, hcr_el2); /* Trap on AArch32 cp15 c15 accesses (EL1 or EL0) */ write_sysreg(1 << 15, hstr_el2);