diff options
author | Marcelo Tosatti <mtosatti@redhat.com> | 2007-12-20 19:18:26 -0500 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2008-01-30 11:01:21 -0500 |
commit | aaee2c94f7a1f7726e360a6cfb40173bd552bcff (patch) | |
tree | e9066ae5509c349bfd6a187e85d52cc476e16a12 /virt | |
parent | d7824fff896a1698a07a8046dc362f4500c302f7 (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')
-rw-r--r-- | virt/kvm/kvm_main.c | 3 |
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; |