aboutsummaryrefslogtreecommitdiffstats
path: root/virt/kvm/kvm_main.c
diff options
context:
space:
mode:
authorMarcelo Tosatti <mtosatti@redhat.com>2007-12-20 19:18:26 -0500
committerAvi Kivity <avi@qumranet.com>2008-01-30 11:01:21 -0500
commitaaee2c94f7a1f7726e360a6cfb40173bd552bcff (patch)
treee9066ae5509c349bfd6a187e85d52cc476e16a12 /virt/kvm/kvm_main.c
parentd7824fff896a1698a07a8046dc362f4500c302f7 (diff)
KVM: MMU: Switch to mmu spinlock
Convert the synchronization of the shadow handling to a separate mmu_lock spinlock. Also guard fetch() by mmap_sem in read-mode to protect against alias and memslot changes. Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'virt/kvm/kvm_main.c')
-rw-r--r--virt/kvm/kvm_main.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 8d0b7c16c2f7..3c4fe26096fc 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -165,6 +165,7 @@ static struct kvm *kvm_create_vm(void)
165 165
166 kvm->mm = current->mm; 166 kvm->mm = current->mm;
167 atomic_inc(&kvm->mm->mm_count); 167 atomic_inc(&kvm->mm->mm_count);
168 spin_lock_init(&kvm->mmu_lock);
168 kvm_io_bus_init(&kvm->pio_bus); 169 kvm_io_bus_init(&kvm->pio_bus);
169 mutex_init(&kvm->lock); 170 mutex_init(&kvm->lock);
170 kvm_io_bus_init(&kvm->mmio_bus); 171 kvm_io_bus_init(&kvm->mmio_bus);
@@ -552,9 +553,7 @@ int kvm_read_guest_atomic(struct kvm *kvm, gpa_t gpa, void *data,
552 addr = gfn_to_hva(kvm, gfn); 553 addr = gfn_to_hva(kvm, gfn);
553 if (kvm_is_error_hva(addr)) 554 if (kvm_is_error_hva(addr))
554 return -EFAULT; 555 return -EFAULT;
555 pagefault_disable();
556 r = __copy_from_user_inatomic(data, (void __user *)addr + offset, len); 556 r = __copy_from_user_inatomic(data, (void __user *)addr + offset, len);
557 pagefault_enable();
558 if (r) 557 if (r)
559 return -EFAULT; 558 return -EFAULT;
560 return 0; 559 return 0;