summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Bruning <max@joyent.com>2011-07-08 07:57:39 -0700
committerMax Bruning <max@joyent.com>2011-07-08 07:57:39 -0700
commit81ce4d6b18b89da85c986b24346f2191d5ad2b0e (patch)
treebb7532dddc64ce48d911e402b84617768aa76f87
parenta3988e79c12226cbd2833896be1a36328e59384c (diff)
downloadillumos-kvm-81ce4d6b18b89da85c986b24346f2191d5ad2b0e.tar.gz
HVM-472 panic in gfn_to_memslot_unaliased
-rw-r--r--kvm.c8
-rw-r--r--kvm_x86.c8
2 files changed, 4 insertions, 12 deletions
diff --git a/kvm.c b/kvm.c
index 7c7ade4..df30e5f 100644
--- a/kvm.c
+++ b/kvm.c
@@ -995,14 +995,10 @@ skip_lpage:
}
slots->memslots[mem->slot] = new;
+ mutex_enter(&kvmp->memslots_lock);
old_memslots = kvmp->memslots;
-#ifdef XXX
- rcu_assign_pointer(kvmp->memslots, slots);
- synchronize_srcu_expedited(&kvmp->srcu);
-#else
- XXX_KVM_SYNC_PROBE;
kvmp->memslots = slots;
-#endif
+ mutex_exit(&kvmp->memslots_lock);
kvm_arch_commit_memory_region(kvmp, mem, old, user_alloc);
diff --git a/kvm_x86.c b/kvm_x86.c
index d316864..5c78ad7 100644
--- a/kvm_x86.c
+++ b/kvm_x86.c
@@ -2314,14 +2314,10 @@ kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, struct kvm_dirty_log *log)
memcpy(slots, kvm->memslots, sizeof (struct kvm_memslots));
slots->memslots[log->slot].dirty_bitmap = dirty_bitmap;
+ mutex_enter(&kvm->memslots_lock);
old_slots = kvm->memslots;
-#ifdef XXX
- rcu_assign_pointer(kvm->memslots, slots);
- kvm_synchronize_srcu_expedited(&kvm->srcu);
-#else
kvm->memslots = slots;
- XXX_KVM_SYNC_PROBE;
-#endif
+ mutex_exit(&kvm->memslots_lock);
dirty_bitmap = old_slots->memslots[log->slot].dirty_bitmap;
kmem_free(old_slots, sizeof (struct kvm_memslots));
}