diff options
| author | Marcelo Tosatti <mtosatti@redhat.com> | 2009-05-12 17:55:44 -0400 |
|---|---|---|
| committer | Avi Kivity <avi@redhat.com> | 2009-06-10 04:48:54 -0400 |
| commit | b43b1901ad282aeb74161837fb403927102687a1 (patch) | |
| tree | 43b1b4537e620ce5c148e739c7588a279e76d7a5 /virt | |
| parent | 7c8a83b75a38a807d37f5a4398eca2a42c8cf513 (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')
| -rw-r--r-- | virt/kvm/kvm_main.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 687d113a3e5..5fed9bfc3cf 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); |
