KVM: MMU: add kvm_mmu_get_spte_hierarchy helper
[firefly-linux-kernel-4.4.55.git] / arch / x86 / kvm / mmu.c
index e18f65bf2de79812ef759ddd6ac423a75be9ce3e..12974de88aa5c0864bf8ea0e43185aca8621b42f 100644 (file)
@@ -3038,6 +3038,24 @@ out:
        return r;
 }
 
+int kvm_mmu_get_spte_hierarchy(struct kvm_vcpu *vcpu, u64 addr, u64 sptes[4])
+{
+       struct kvm_shadow_walk_iterator iterator;
+       int nr_sptes = 0;
+
+       spin_lock(&vcpu->kvm->mmu_lock);
+       for_each_shadow_entry(vcpu, addr, iterator) {
+               sptes[iterator.level-1] = *iterator.sptep;
+               nr_sptes++;
+               if (!is_shadow_present_pte(*iterator.sptep))
+                       break;
+       }
+       spin_unlock(&vcpu->kvm->mmu_lock);
+
+       return nr_sptes;
+}
+EXPORT_SYMBOL_GPL(kvm_mmu_get_spte_hierarchy);
+
 #ifdef AUDIT
 
 static const char *audit_msg;