diff options
author | Marcelo Tosatti <mtosatti@redhat.com> | 2009-12-23 11:35:21 -0500 |
---|---|---|
committer | Marcelo Tosatti <mtosatti@redhat.com> | 2010-03-01 10:35:44 -0500 |
commit | bc6678a33d9b952981a8e44a4f876c3ad64ca4d8 (patch) | |
tree | e26027179eb0d76f234509145a395dd6e5910074 /arch/ia64 | |
parent | 3ad26d8139a82b0510b1e0435ee82ae461d33401 (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')
-rw-r--r-- | arch/ia64/kvm/kvm-ia64.c | 4 |
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; |
1858 | out: | 1859 | out: |
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 | } |