Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=39214915f50f6ac2350355f2db63910d968fa790
Commit:     39214915f50f6ac2350355f2db63910d968fa790
Parent:     b114b0804df7131cb6764b948c1c530c834fa3c0
Author:     Rusty Russell <[EMAIL PROTECTED]>
AuthorDate: Tue Jul 31 19:57:47 2007 +1000
Committer:  Avi Kivity <[EMAIL PROTECTED]>
CommitDate: Sat Oct 13 10:18:21 2007 +0200

    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
        90cb0529dd230548a7f0d6b315997be854caea1b 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 <[EMAIL PROTECTED]>
    Signed-off-by: Avi Kivity <[EMAIL PROTECTED]>
---
 drivers/kvm/kvm_main.c |   13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c
index bfb1b6d..5dee302 100644
--- a/drivers/kvm/kvm_main.c
+++ b/drivers/kvm/kvm_main.c
@@ -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;
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to