|
|
@@ -129,9 +129,19 @@ static inline void kvm_set_s2pmd_writable(pmd_t *pmd)
|
|
|
|
|
|
struct kvm;
|
|
|
|
|
|
+#define kvm_flush_dcache_to_poc(a,l) __cpuc_flush_dcache_area((a), (l))
|
|
|
+
|
|
|
+static inline bool vcpu_has_cache_enabled(struct kvm_vcpu *vcpu)
|
|
|
+{
|
|
|
+ return (vcpu->arch.cp15[c1_SCTLR] & 0b101) == 0b101;
|
|
|
+}
|
|
|
+
|
|
|
static inline void coherent_cache_guest_page(struct kvm_vcpu *vcpu, hva_t hva,
|
|
|
unsigned long size)
|
|
|
{
|
|
|
+ if (!vcpu_has_cache_enabled(vcpu))
|
|
|
+ kvm_flush_dcache_to_poc((void *)hva, size);
|
|
|
+
|
|
|
/*
|
|
|
* If we are going to insert an instruction page and the icache is
|
|
|
* either VIPT or PIPT, there is a potential problem where the host
|
|
|
@@ -152,7 +162,6 @@ static inline void coherent_cache_guest_page(struct kvm_vcpu *vcpu, hva_t hva,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-#define kvm_flush_dcache_to_poc(a,l) __cpuc_flush_dcache_area((a), (l))
|
|
|
#define kvm_virt_to_phys(x) virt_to_idmap((unsigned long)(x))
|
|
|
|
|
|
void stage2_flush_vm(struct kvm *kvm);
|