KVM: kvm_vm_ioctl_get_dirty_log restore "nothing dirty" optimization
kvm_vm_ioctl_get_dirty_log scans bitmap to see it it's all zero, but
doesn't use that information.
Avi says:
Looks like it was used to guard kvm_mmu_slot_remove_write_access();
optimizing the case where the guest just leaves the screen alone (which
it usually does, especially in benchmarks).
I'd rather reinstate that optimization. See
90cb0529dd
where the damage was done.
It's pretty simple: if the bitmap is all zero, we don't need to do anything to
clean it.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Avi Kivity <avi@qumranet.com>
This commit is contained in:
parent
b114b0804d
commit
39214915f5
1 changed files with 8 additions and 5 deletions
|
@ -803,11 +803,14 @@ static int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
|
|||
if (copy_to_user(log->dirty_bitmap, memslot->dirty_bitmap, n))
|
||||
goto out;
|
||||
|
||||
mutex_lock(&kvm->lock);
|
||||
kvm_mmu_slot_remove_write_access(kvm, log->slot);
|
||||
kvm_flush_remote_tlbs(kvm);
|
||||
memset(memslot->dirty_bitmap, 0, n);
|
||||
mutex_unlock(&kvm->lock);
|
||||
/* If nothing is dirty, don't bother messing with page tables. */
|
||||
if (any) {
|
||||
mutex_lock(&kvm->lock);
|
||||
kvm_mmu_slot_remove_write_access(kvm, log->slot);
|
||||
kvm_flush_remote_tlbs(kvm);
|
||||
memset(memslot->dirty_bitmap, 0, n);
|
||||
mutex_unlock(&kvm->lock);
|
||||
}
|
||||
|
||||
r = 0;
|
||||
|
||||
|
|
Loading…
Reference in a new issue