From: Takuya Yoshikawa Date: Wed, 23 Jun 2010 05:59:29 +0000 (+0900) Subject: KVM: ia64: fix dirty_log_lock spin_lock section not to include get_dirty_log() X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=4482b06c0459469c101a1da3f4b24594da557f99;p=deliverable%2Flinux.git KVM: ia64: fix dirty_log_lock spin_lock section not to include get_dirty_log() kvm_get_dirty_log() calls copy_to_user(). So we need to narrow the dirty_log_lock spin_lock section not to include this. Signed-off-by: Takuya Yoshikawa Signed-off-by: Avi Kivity --- diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c index bd510beb43af..d85b5d2d52d1 100644 --- a/arch/ia64/kvm/kvm-ia64.c +++ b/arch/ia64/kvm/kvm-ia64.c @@ -1817,10 +1817,12 @@ static int kvm_ia64_sync_dirty_log(struct kvm *kvm, n = kvm_dirty_bitmap_bytes(memslot); base = memslot->base_gfn / BITS_PER_LONG; + spin_lock(&kvm->arch.dirty_log_lock); for (i = 0; i < n/sizeof(long); ++i) { memslot->dirty_bitmap[i] = dirty_bitmap[base + i]; dirty_bitmap[base + i] = 0; } + spin_unlock(&kvm->arch.dirty_log_lock); r = 0; out: return r; @@ -1835,7 +1837,6 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, int is_dirty = 0; mutex_lock(&kvm->slots_lock); - spin_lock(&kvm->arch.dirty_log_lock); r = kvm_ia64_sync_dirty_log(kvm, log); if (r) @@ -1855,7 +1856,6 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, r = 0; out: mutex_unlock(&kvm->slots_lock); - spin_unlock(&kvm->arch.dirty_log_lock); return r; }