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 | } |
