aboutsummaryrefslogtreecommitdiffstats
path: root/virt/kvm
diff options
context:
space:
mode:
authorTakuya Yoshikawa <yoshikawa_takuya_b1@lab.ntt.co.jp>2015-03-17 03:19:58 -0400
committerMarcelo Tosatti <mtosatti@redhat.com>2015-03-18 21:23:33 -0400
commit58d2930f4ee335ab703d768cb0318331fc1bb62c (patch)
tree8fa1d0537279336dac5e862b2bfe421ee7191a69 /virt/kvm
parentfaac2458518e20130664d77b657303758f1aaf5a (diff)
KVM: Eliminate extra function calls in kvm_get_dirty_log_protect()
When all bits in mask are not set, kvm_arch_mmu_enable_log_dirty_pt_masked() has nothing to do. But since it needs to be called from the generic code, it cannot be inlined, and a few function calls, two when PML is enabled, are wasted. Since it is common to see many pages remain clean, e.g. framebuffers can stay calm for a long time, it is worth eliminating this overhead. Signed-off-by: Takuya Yoshikawa <yoshikawa_takuya_b1@lab.ntt.co.jp> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'virt/kvm')
-rw-r--r--virt/kvm/kvm_main.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 49900fc21f89..ce7888a15128 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1053,9 +1053,11 @@ int kvm_get_dirty_log_protect(struct kvm *kvm,
1053 mask = xchg(&dirty_bitmap[i], 0); 1053 mask = xchg(&dirty_bitmap[i], 0);
1054 dirty_bitmap_buffer[i] = mask; 1054 dirty_bitmap_buffer[i] = mask;
1055 1055
1056 offset = i * BITS_PER_LONG; 1056 if (mask) {
1057 kvm_arch_mmu_enable_log_dirty_pt_masked(kvm, memslot, offset, 1057 offset = i * BITS_PER_LONG;
1058 mask); 1058 kvm_arch_mmu_enable_log_dirty_pt_masked(kvm, memslot,
1059 offset, mask);
1060 }
1059 } 1061 }
1060 1062
1061 spin_unlock(&kvm->mmu_lock); 1063 spin_unlock(&kvm->mmu_lock);