aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kvm
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2014-11-10 03:33:55 -0500
committerPaolo Bonzini <pbonzini@redhat.com>2014-11-26 08:40:45 -0500
commitbb55e9b131d70ab9e30d73ab1342ad4907f9e0de (patch)
treee916db821effc07fd1da1bf20c28048d5987c743 /arch/arm/kvm
parent6b50f54064a02b77a7b990032b80234fee59bcd6 (diff)
arm/arm64: kvm: drop inappropriate use of kvm_is_mmio_pfn()
Instead of using kvm_is_mmio_pfn() to decide whether a host region should be stage 2 mapped with device attributes, add a new static function kvm_is_device_pfn() that disregards RAM pages with the reserved bit set, as those should usually not be mapped as device memory. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/arm/kvm')
-rw-r--r--arch/arm/kvm/mmu.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
index 79d3fbfb5b0e..8664ff17cbbe 100644
--- a/arch/arm/kvm/mmu.c
+++ b/arch/arm/kvm/mmu.c
@@ -835,6 +835,11 @@ static bool kvm_is_write_fault(struct kvm_vcpu *vcpu)
835 return kvm_vcpu_dabt_iswrite(vcpu); 835 return kvm_vcpu_dabt_iswrite(vcpu);
836} 836}
837 837
838static bool kvm_is_device_pfn(unsigned long pfn)
839{
840 return !pfn_valid(pfn);
841}
842
838static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, 843static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
839 struct kvm_memory_slot *memslot, unsigned long hva, 844 struct kvm_memory_slot *memslot, unsigned long hva,
840 unsigned long fault_status) 845 unsigned long fault_status)
@@ -905,7 +910,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
905 if (is_error_pfn(pfn)) 910 if (is_error_pfn(pfn))
906 return -EFAULT; 911 return -EFAULT;
907 912
908 if (kvm_is_mmio_pfn(pfn)) 913 if (kvm_is_device_pfn(pfn))
909 mem_type = PAGE_S2_DEVICE; 914 mem_type = PAGE_S2_DEVICE;
910 915
911 spin_lock(&kvm->mmu_lock); 916 spin_lock(&kvm->mmu_lock);