From: Dave Martin <Dave.Martin@arm.com>
To: linux-arm-kernel@lists.infradead.org
Cc: Marc Zyngier <marc.zyngier@arm.com>,
Okamoto Takayuki <tokamoto@jp.fujitsu.com>,
kvmarm@lists.cs.columbia.edu
Subject: [PATCH 1/3] arm64: KVM: Move CPU ID reg trap setup off the world switch path
Date: Fri, 1 Dec 2017 15:19:40 +0000 [thread overview]
Message-ID: <1512141582-17474-2-git-send-email-Dave.Martin@arm.com> (raw)
In-Reply-To: <1512141582-17474-1-git-send-email-Dave.Martin@arm.com>
The HCR_EL2.TID3 flag needs to be set when trapping guest access to
the CPU ID registers is required. However, the decision about
whether to set this bit does not need to be repeated at every
switch to the guest.
Instead, it's sufficient to make this decision once and record the
outcome.
This patch moves the decision to vcpu_reset_hcr() and records the
choice made in vcpu->arch.hcr_el2. The world switch code can then
load this directly when switching to the guest without the need for
conditional logic on the critical path.
Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Suggested-by: Christoffer Dall <christoffer.dall@linaro.org>
Cc: Marc Zyngier <marc.zyngier@arm.com>
---
Note to maintainers: this was discussed on-list [1] prior to the merge
window, but this patch implementing the agreed decision hasn't been
posted previously.
This should be considered a fix for v4.15.
[1] [PATCH v3 02/28] arm64: KVM: Hide unsupported AArch64 CPU features from guests
http://lists.infradead.org/pipermail/linux-arm-kernel/2017-October/537420.html
---
arch/arm64/include/asm/kvm_emulate.h | 8 ++++++++
arch/arm64/kvm/hyp/switch.c | 4 ----
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/include/asm/kvm_emulate.h
index 5f28dfa..8ff5aef 100644
--- a/arch/arm64/include/asm/kvm_emulate.h
+++ b/arch/arm64/include/asm/kvm_emulate.h
@@ -52,6 +52,14 @@ static inline void vcpu_reset_hcr(struct kvm_vcpu *vcpu)
vcpu->arch.hcr_el2 |= HCR_E2H;
if (test_bit(KVM_ARM_VCPU_EL1_32BIT, vcpu->arch.features))
vcpu->arch.hcr_el2 &= ~HCR_RW;
+
+ /*
+ * TID3: trap feature register accesses that we virtualise.
+ * For now this is conditional, since no AArch32 feature regs
+ * are currently virtualised.
+ */
+ if (vcpu->arch.hcr_el2 & HCR_RW)
+ vcpu->arch.hcr_el2 |= HCR_TID3;
}
static inline unsigned long vcpu_get_hcr(struct kvm_vcpu *vcpu)
diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c
index 525c01f..87fd590 100644
--- a/arch/arm64/kvm/hyp/switch.c
+++ b/arch/arm64/kvm/hyp/switch.c
@@ -86,10 +86,6 @@ static void __hyp_text __activate_traps(struct kvm_vcpu *vcpu)
write_sysreg(1 << 30, fpexc32_el2);
isb();
}
-
- if (val & HCR_RW) /* for AArch64 only: */
- val |= HCR_TID3; /* TID3: trap feature register accesses */
-
write_sysreg(val, hcr_el2);
/* Trap on AArch32 cp15 c15 accesses (EL1 or EL0) */
--
2.1.4
next prev parent reply other threads:[~2017-12-01 15:16 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-01 15:19 [PATCH 0/3] arm64: SVE fixes for v4.15-rc1 Dave Martin
2017-12-01 15:19 ` Dave Martin [this message]
2017-12-05 9:09 ` [PATCH 1/3] arm64: KVM: Move CPU ID reg trap setup off the world switch path Christoffer Dall
2017-12-05 12:31 ` Dave Martin
2017-12-06 10:53 ` Christoffer Dall
2017-12-06 11:55 ` Dave Martin
2017-12-01 15:19 ` [PATCH 2/3] arm64: fpsimd: Abstract out binding of task's fpsimd context to the cpu Dave Martin
2017-12-04 13:46 ` Ard Biesheuvel
2017-12-01 15:19 ` [PATCH 3/3] arm64/sve: KVM: Avoid dereference of dead task during guest entry Dave Martin
2017-12-04 13:53 ` Ard Biesheuvel
2017-12-04 15:36 ` Dave Martin
2017-12-05 9:43 ` Christoffer Dall
2017-12-05 12:40 ` Dave Martin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1512141582-17474-2-git-send-email-Dave.Martin@arm.com \
--to=dave.martin@arm.com \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=marc.zyngier@arm.com \
--cc=tokamoto@jp.fujitsu.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox