aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/kvm_host.h
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2016-06-13 08:48:25 -0400
committerPaolo Bonzini <pbonzini@redhat.com>2016-06-15 18:05:00 -0400
commit6c7caebc26c5f0b618f0ef6b851e9f5f27c3812f (patch)
tree0d804b1b15e565ca3286f82a6cd219e9e3d00828 /include/linux/kvm_host.h
parent682a8108872f78560c891cf30c7d08aa01dac943 (diff)
KVM: introduce kvm->created_vcpus
The race between creating the irqchip and the first VCPU is currently fixed by checking the presence of an irqchip before updating kvm->online_vcpus, and undoing the whole VCPU creation if someone created the irqchip in the meanwhile. Instead, introduce a new field in struct kvm that will count VCPUs under a mutex, without the atomic access and memory ordering that we need elsewhere to protect the vcpus array. This also plugs the race and is more easily applicable in all similar circumstances. Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'include/linux/kvm_host.h')
-rw-r--r--include/linux/kvm_host.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index 1c9c973a7dd9..63c6ab30bc81 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -371,7 +371,15 @@ struct kvm {
371 struct srcu_struct srcu; 371 struct srcu_struct srcu;
372 struct srcu_struct irq_srcu; 372 struct srcu_struct irq_srcu;
373 struct kvm_vcpu *vcpus[KVM_MAX_VCPUS]; 373 struct kvm_vcpu *vcpus[KVM_MAX_VCPUS];
374
375 /*
376 * created_vcpus is protected by kvm->lock, and is incremented
377 * at the beginning of KVM_CREATE_VCPU. online_vcpus is only
378 * incremented after storing the kvm_vcpu pointer in vcpus,
379 * and is accessed atomically.
380 */
374 atomic_t online_vcpus; 381 atomic_t online_vcpus;
382 int created_vcpus;
375 int last_boosted_vcpu; 383 int last_boosted_vcpu;
376 struct list_head vm_list; 384 struct list_head vm_list;
377 struct mutex lock; 385 struct mutex lock;