]> Pileus Git - ~andy/linux/blobdiff - arch/x86/kvm/mmu_audit.c
KVM: MMU: Improve iteration through sptes from rmap
[~andy/linux] / arch / x86 / kvm / mmu_audit.c
index 715da5a19a5b6cf8a6abec0a96fddf1d2260cc85..7d7d0b9e23eb2e3d7b256d74c58852c9f26e5772 100644 (file)
@@ -192,7 +192,8 @@ static void audit_write_protection(struct kvm *kvm, struct kvm_mmu_page *sp)
 {
        struct kvm_memory_slot *slot;
        unsigned long *rmapp;
-       u64 *spte;
+       u64 *sptep;
+       struct rmap_iterator iter;
 
        if (sp->role.direct || sp->unsync || sp->role.invalid)
                return;
@@ -200,13 +201,12 @@ static void audit_write_protection(struct kvm *kvm, struct kvm_mmu_page *sp)
        slot = gfn_to_memslot(kvm, sp->gfn);
        rmapp = &slot->rmap[sp->gfn - slot->base_gfn];
 
-       spte = rmap_next(rmapp, NULL);
-       while (spte) {
-               if (is_writable_pte(*spte))
+       for (sptep = rmap_get_first(*rmapp, &iter); sptep;
+            sptep = rmap_get_next(&iter)) {
+               if (is_writable_pte(*sptep))
                        audit_printk(kvm, "shadow page has writable "
                                     "mappings: gfn %llx role %x\n",
                                     sp->gfn, sp->role.word);
-               spte = rmap_next(rmapp, spte);
        }
 }