aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64/kvm
diff options
context:
space:
mode:
authorMarcelo Tosatti <mtosatti@redhat.com>2009-12-23 11:35:21 -0500
committerMarcelo Tosatti <mtosatti@redhat.com>2010-03-01 10:35:44 -0500
commitbc6678a33d9b952981a8e44a4f876c3ad64ca4d8 (patch)
treee26027179eb0d76f234509145a395dd6e5910074 /arch/ia64/kvm
parent3ad26d8139a82b0510b1e0435ee82ae461d33401 (diff)
KVM: introduce kvm->srcu and convert kvm_set_memory_region to SRCU update
Use two steps for memslot deletion: mark the slot invalid (which stops instantiation of new shadow pages for that slot, but allows destruction), then instantiate the new empty slot. Also simplifies kvm_handle_hva locking. Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'arch/ia64/kvm')
-rw-r--r--arch/ia64/kvm/kvm-ia64.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c
index 0757c7027986..b2e4d16dd39e 100644
--- a/arch/ia64/kvm/kvm-ia64.c
+++ b/arch/ia64/kvm/kvm-ia64.c
@@ -1382,7 +1382,7 @@ static void kvm_release_vm_pages(struct kvm *kvm)
1382 int i, j; 1382 int i, j;
1383 unsigned long base_gfn; 1383 unsigned long base_gfn;
1384 1384
1385 slots = kvm->memslots; 1385 slots = rcu_dereference(kvm->memslots);
1386 for (i = 0; i < slots->nmemslots; i++) { 1386 for (i = 0; i < slots->nmemslots; i++) {
1387 memslot = &slots->memslots[i]; 1387 memslot = &slots->memslots[i];
1388 base_gfn = memslot->base_gfn; 1388 base_gfn = memslot->base_gfn;
@@ -1837,6 +1837,7 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
1837 struct kvm_memory_slot *memslot; 1837 struct kvm_memory_slot *memslot;
1838 int is_dirty = 0; 1838 int is_dirty = 0;
1839 1839
1840 down_write(&kvm->slots_lock);
1840 spin_lock(&kvm->arch.dirty_log_lock); 1841 spin_lock(&kvm->arch.dirty_log_lock);
1841 1842
1842 r = kvm_ia64_sync_dirty_log(kvm, log); 1843 r = kvm_ia64_sync_dirty_log(kvm, log);
@@ -1856,6 +1857,7 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
1856 } 1857 }
1857 r = 0; 1858 r = 0;
1858out: 1859out:
1860 up_write(&kvm->slots_lock);
1859 spin_unlock(&kvm->arch.dirty_log_lock); 1861 spin_unlock(&kvm->arch.dirty_log_lock);
1860 return r; 1862 return r;
1861} 1863}