aboutsummaryrefslogtreecommitdiffstats
path: root/virt/kvm/kvm_main.c
diff options
context:
space:
mode:
authorMarcelo Tosatti <mtosatti@redhat.com>2009-05-12 17:55:44 -0400
committerAvi Kivity <avi@redhat.com>2009-06-10 04:48:54 -0400
commitb43b1901ad282aeb74161837fb403927102687a1 (patch)
tree43b1b4537e620ce5c148e739c7588a279e76d7a5 /virt/kvm/kvm_main.c
parent7c8a83b75a38a807d37f5a4398eca2a42c8cf513 (diff)
KVM: take mmu_lock when updating a deleted slot
kvm_handle_hva relies on mmu_lock protection to safely access the memslot structures. Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'virt/kvm/kvm_main.c')
-rw-r--r--virt/kvm/kvm_main.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 687d113a3e5e..5fed9bfc3cf5 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1210,8 +1210,10 @@ int __kvm_set_memory_region(struct kvm *kvm,
1210 1210
1211 kvm_free_physmem_slot(&old, npages ? &new : NULL); 1211 kvm_free_physmem_slot(&old, npages ? &new : NULL);
1212 /* Slot deletion case: we have to update the current slot */ 1212 /* Slot deletion case: we have to update the current slot */
1213 spin_lock(&kvm->mmu_lock);
1213 if (!npages) 1214 if (!npages)
1214 *memslot = old; 1215 *memslot = old;
1216 spin_unlock(&kvm->mmu_lock);
1215#ifdef CONFIG_DMAR 1217#ifdef CONFIG_DMAR
1216 /* map the pages in iommu page table */ 1218 /* map the pages in iommu page table */
1217 r = kvm_iommu_map_pages(kvm, base_gfn, npages); 1219 r = kvm_iommu_map_pages(kvm, base_gfn, npages);