|
@@ -3169,10 +3169,6 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
|
|
|
struct kvm_memslots *slots, *old_slots;
|
|
|
unsigned long *dirty_bitmap;
|
|
|
|
|
|
- spin_lock(&kvm->mmu_lock);
|
|
|
- kvm_mmu_slot_remove_write_access(kvm, log->slot);
|
|
|
- spin_unlock(&kvm->mmu_lock);
|
|
|
-
|
|
|
r = -ENOMEM;
|
|
|
dirty_bitmap = vmalloc(n);
|
|
|
if (!dirty_bitmap)
|
|
@@ -3194,6 +3190,10 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
|
|
|
dirty_bitmap = old_slots->memslots[log->slot].dirty_bitmap;
|
|
|
kfree(old_slots);
|
|
|
|
|
|
+ spin_lock(&kvm->mmu_lock);
|
|
|
+ kvm_mmu_slot_remove_write_access(kvm, log->slot);
|
|
|
+ spin_unlock(&kvm->mmu_lock);
|
|
|
+
|
|
|
r = -EFAULT;
|
|
|
if (copy_to_user(log->dirty_bitmap, dirty_bitmap, n)) {
|
|
|
vfree(dirty_bitmap);
|