From f635fad1fcfc7e890d42f70508d423504292cf03 Mon Sep 17 00:00:00 2001 From: Quentin Perret Date: Thu, 6 Jan 2022 10:40:05 +0000 Subject: [PATCH] Revert "FROMLIST: KVM: arm64: Introduce kvm_share_hyp()" This reverts commit 7c979b82716cee91cae1b8aa0f8dc1c3ccd6ff73. This will be replaced by a FROMGIT patch shortly. Signed-off-by: Quentin Perret Change-Id: I710c31254ce80a5b1de5ced791ccaec1b0bebd64 --- arch/arm64/include/asm/kvm_mmu.h | 1 - arch/arm64/kvm/arm.c | 4 ++-- arch/arm64/kvm/fpsimd.c | 2 +- arch/arm64/kvm/mmu.c | 27 ++++++--------------------- arch/arm64/kvm/reset.c | 2 +- 5 files changed, 10 insertions(+), 26 deletions(-) diff --git a/arch/arm64/include/asm/kvm_mmu.h b/arch/arm64/include/asm/kvm_mmu.h index 185d0f62b724..02d378887743 100644 --- a/arch/arm64/include/asm/kvm_mmu.h +++ b/arch/arm64/include/asm/kvm_mmu.h @@ -150,7 +150,6 @@ static __always_inline unsigned long __kern_hyp_va(unsigned long v) #include #include -int kvm_share_hyp(void *from, void *to); int create_hyp_mappings(void *from, void *to, enum kvm_pgtable_prot prot); int create_hyp_io_mappings(phys_addr_t phys_addr, size_t size, void __iomem **kaddr, diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index fbb9b0d415e2..a0377e11d3a2 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -146,7 +146,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) if (ret) return ret; - ret = kvm_share_hyp(kvm, kvm + 1); + ret = create_hyp_mappings(kvm, kvm + 1, PAGE_HYP); if (ret) goto out_free_stage2_pgd; @@ -350,7 +350,7 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) if (err) return err; - return kvm_share_hyp(vcpu, vcpu + 1); + return create_hyp_mappings(vcpu, vcpu + 1, PAGE_HYP); } void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu) diff --git a/arch/arm64/kvm/fpsimd.c b/arch/arm64/kvm/fpsimd.c index 6f3f9ce29353..ee3291de04be 100644 --- a/arch/arm64/kvm/fpsimd.c +++ b/arch/arm64/kvm/fpsimd.c @@ -30,7 +30,7 @@ int kvm_arch_vcpu_run_map_fp(struct kvm_vcpu *vcpu) struct user_fpsimd_state *fpsimd = ¤t->thread.uw.fpsimd_state; /* Make sure the host task fpsimd state is visible to hyp: */ - ret = kvm_share_hyp(fpsimd, fpsimd + 1); + ret = create_hyp_mappings(fpsimd, fpsimd + 1, PAGE_HYP); if (ret) goto error; diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 359483235b8f..ea840fa223b5 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -299,25 +299,6 @@ static int pkvm_share_hyp(phys_addr_t start, phys_addr_t end) return 0; } -int kvm_share_hyp(void *from, void *to) -{ - if (is_kernel_in_hyp_mode()) - return 0; - - /* - * The share hcall maps things in the 'fixed-offset' region of the hyp - * VA space, so we can only share physically contiguous data-structures - * for now. - */ - if (is_vmalloc_addr(from) || is_vmalloc_addr(to)) - return -EINVAL; - - if (kvm_host_owns_hyp_mappings()) - return create_hyp_mappings(from, to, PAGE_HYP); - - return pkvm_share_hyp(__pa(from), __pa(to)); -} - /** * create_hyp_mappings - duplicate a kernel virtual address range in Hyp mode * @from: The virtual kernel start address of the range @@ -338,8 +319,12 @@ int create_hyp_mappings(void *from, void *to, enum kvm_pgtable_prot prot) if (is_kernel_in_hyp_mode()) return 0; - if (!kvm_host_owns_hyp_mappings()) - return -EPERM; + if (!kvm_host_owns_hyp_mappings()) { + if (WARN_ON(prot != PAGE_HYP)) + return -EPERM; + return pkvm_share_hyp(kvm_kaddr_to_phys(from), + kvm_kaddr_to_phys(to)); + } start = start & PAGE_MASK; end = PAGE_ALIGN(end); diff --git a/arch/arm64/kvm/reset.c b/arch/arm64/kvm/reset.c index 66b749c7212e..553334e59d1e 100644 --- a/arch/arm64/kvm/reset.c +++ b/arch/arm64/kvm/reset.c @@ -113,7 +113,7 @@ static int kvm_vcpu_finalize_sve(struct kvm_vcpu *vcpu) if (!buf) return -ENOMEM; - ret = kvm_share_hyp(buf, buf + reg_sz); + ret = create_hyp_mappings(buf, buf + reg_sz, PAGE_HYP); if (ret) { kfree(buf); return ret;