diff options
author | Paul Gortmaker <paul.gortmaker@windriver.com> | 2017-05-21 00:53:35 -0400 |
---|---|---|
committer | Paul Gortmaker <paul.gortmaker@windriver.com> | 2017-05-21 00:54:32 -0400 |
commit | 157a28c94c1380fedd232fe63fb666d76f0d5c32 (patch) | |
tree | d94a525895b26cafaa25666c4d384f8ec8f88645 | |
parent | 6e5813e7ba51b41d483730fead002c94b77a4b8d (diff) | |
download | longterm-queue-4.8-157a28c94c1380fedd232fe63fb666d76f0d5c32.tar.gz |
arm64: remove KVM patch not applicable to 4.8.x baseline
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
-rw-r--r-- | queue/arm64-KVM-VHE-Clear-HCR_TGE-when-invalidating-guest-.patch | 137 | ||||
-rw-r--r-- | queue/series | 1 |
2 files changed, 0 insertions, 138 deletions
diff --git a/queue/arm64-KVM-VHE-Clear-HCR_TGE-when-invalidating-guest-.patch b/queue/arm64-KVM-VHE-Clear-HCR_TGE-when-invalidating-guest-.patch deleted file mode 100644 index d886d79..0000000 --- a/queue/arm64-KVM-VHE-Clear-HCR_TGE-when-invalidating-guest-.patch +++ /dev/null @@ -1,137 +0,0 @@ -From 68925176296a8b995e503349200e256674bfe5ac Mon Sep 17 00:00:00 2001 -From: Marc Zyngier <marc.zyngier@arm.com> -Date: Fri, 17 Feb 2017 14:32:18 +0000 -Subject: [PATCH] arm64: KVM: VHE: Clear HCR_TGE when invalidating guest TLBs - -commit 68925176296a8b995e503349200e256674bfe5ac upstream. - -When invalidating guest TLBs, special care must be taken to -actually shoot the guest TLBs and not the host ones if we're -running on a VHE system. This is controlled by the HCR_EL2.TGE -bit, which we forget to clear before invalidating TLBs. - -Address the issue by introducing two wrappers (__tlb_switch_to_guest -and __tlb_switch_to_host) that take care of both the VTTBR_EL2 -and HCR_EL2.TGE switching. - -Reported-by: Tomasz Nowicki <tnowicki@caviumnetworks.com> -Tested-by: Tomasz Nowicki <tnowicki@caviumnetworks.com> -Reviewed-by: Christoffer Dall <cdall@linaro.org> -Cc: stable@vger.kernel.org -Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> - -diff --git a/arch/arm64/kvm/hyp/tlb.c b/arch/arm64/kvm/hyp/tlb.c -index e8e7ba2bc11f..9e1d2b75eecd 100644 ---- a/arch/arm64/kvm/hyp/tlb.c -+++ b/arch/arm64/kvm/hyp/tlb.c -@@ -18,14 +18,62 @@ - #include <asm/kvm_hyp.h> - #include <asm/tlbflush.h> - -+static void __hyp_text __tlb_switch_to_guest_vhe(struct kvm *kvm) -+{ -+ u64 val; -+ -+ /* -+ * With VHE enabled, we have HCR_EL2.{E2H,TGE} = {1,1}, and -+ * most TLB operations target EL2/EL0. In order to affect the -+ * guest TLBs (EL1/EL0), we need to change one of these two -+ * bits. Changing E2H is impossible (goodbye TTBR1_EL2), so -+ * let's flip TGE before executing the TLB operation. -+ */ -+ write_sysreg(kvm->arch.vttbr, vttbr_el2); -+ val = read_sysreg(hcr_el2); -+ val &= ~HCR_TGE; -+ write_sysreg(val, hcr_el2); -+ isb(); -+} -+ -+static void __hyp_text __tlb_switch_to_guest_nvhe(struct kvm *kvm) -+{ -+ write_sysreg(kvm->arch.vttbr, vttbr_el2); -+ isb(); -+} -+ -+static hyp_alternate_select(__tlb_switch_to_guest, -+ __tlb_switch_to_guest_nvhe, -+ __tlb_switch_to_guest_vhe, -+ ARM64_HAS_VIRT_HOST_EXTN); -+ -+static void __hyp_text __tlb_switch_to_host_vhe(struct kvm *kvm) -+{ -+ /* -+ * We're done with the TLB operation, let's restore the host's -+ * view of HCR_EL2. -+ */ -+ write_sysreg(0, vttbr_el2); -+ write_sysreg(HCR_HOST_VHE_FLAGS, hcr_el2); -+} -+ -+static void __hyp_text __tlb_switch_to_host_nvhe(struct kvm *kvm) -+{ -+ write_sysreg(0, vttbr_el2); -+} -+ -+static hyp_alternate_select(__tlb_switch_to_host, -+ __tlb_switch_to_host_nvhe, -+ __tlb_switch_to_host_vhe, -+ ARM64_HAS_VIRT_HOST_EXTN); -+ - void __hyp_text __kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa) - { - dsb(ishst); - - /* Switch to requested VMID */ - kvm = kern_hyp_va(kvm); -- write_sysreg(kvm->arch.vttbr, vttbr_el2); -- isb(); -+ __tlb_switch_to_guest()(kvm); - - /* - * We could do so much better if we had the VA as well. -@@ -46,7 +94,7 @@ void __hyp_text __kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa) - dsb(ish); - isb(); - -- write_sysreg(0, vttbr_el2); -+ __tlb_switch_to_host()(kvm); - } - - void __hyp_text __kvm_tlb_flush_vmid(struct kvm *kvm) -@@ -55,14 +103,13 @@ void __hyp_text __kvm_tlb_flush_vmid(struct kvm *kvm) - - /* Switch to requested VMID */ - kvm = kern_hyp_va(kvm); -- write_sysreg(kvm->arch.vttbr, vttbr_el2); -- isb(); -+ __tlb_switch_to_guest()(kvm); - - __tlbi(vmalls12e1is); - dsb(ish); - isb(); - -- write_sysreg(0, vttbr_el2); -+ __tlb_switch_to_host()(kvm); - } - - void __hyp_text __kvm_tlb_flush_local_vmid(struct kvm_vcpu *vcpu) -@@ -70,14 +117,13 @@ void __hyp_text __kvm_tlb_flush_local_vmid(struct kvm_vcpu *vcpu) - struct kvm *kvm = kern_hyp_va(kern_hyp_va(vcpu)->kvm); - - /* Switch to requested VMID */ -- write_sysreg(kvm->arch.vttbr, vttbr_el2); -- isb(); -+ __tlb_switch_to_guest()(kvm); - - __tlbi(vmalle1); - dsb(nsh); - isb(); - -- write_sysreg(0, vttbr_el2); -+ __tlb_switch_to_host()(kvm); - } - - void __hyp_text __kvm_flush_vm_context(void) --- -2.12.0 - diff --git a/queue/series b/queue/series index d110223..907a442 100644 --- a/queue/series +++ b/queue/series @@ -156,7 +156,6 @@ usb-gadget-udc-atmel-remove-memory-leak.patch clk-bcm2835-Fix-fixed_divider-of-pllh_aux.patch drm-vc4-Fix-race-between-page-flip-completion-event-.patch drm-vc4-Fix-clock_select-setting-for-the-VEC-encoder.patch -arm64-KVM-VHE-Clear-HCR_TGE-when-invalidating-guest-.patch irqchip-gicv3-its-Add-workaround-for-QDF2400-ITS-err.patch x86-tsc-Fix-ART-for-TSC_KNOWN_FREQ.patch x86-kasan-Fix-boot-with-KASAN-y-and-PROFILE_ANNOTATE.patch |