Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a80cf7b5 authored by Christian Borntraeger's avatar Christian Borntraeger
Browse files

KVM: mark memory slots as rcu



we access the memslots array via srcu. Mark it as such and
use the right access functions also for the freeing of
memory slots.

Found by sparse:
./include/linux/kvm_host.h:565:16: error: incompatible types in
comparison expression (different address spaces)

Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
Reviewed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 4a12f951
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -390,7 +390,7 @@ struct kvm {
	spinlock_t mmu_lock;
	struct mutex slots_lock;
	struct mm_struct *mm; /* userspace tied to this vm */
	struct kvm_memslots *memslots[KVM_ADDRESS_SPACE_NUM];
	struct kvm_memslots __rcu *memslots[KVM_ADDRESS_SPACE_NUM];
	struct kvm_vcpu *vcpus[KVM_MAX_VCPUS];

	/*
+4 −2
Original line number Diff line number Diff line
@@ -707,7 +707,8 @@ static struct kvm *kvm_create_vm(unsigned long type)
	for (i = 0; i < KVM_NR_BUSES; i++)
		kfree(rcu_access_pointer(kvm->buses[i]));
	for (i = 0; i < KVM_ADDRESS_SPACE_NUM; i++)
		kvm_free_memslots(kvm, kvm->memslots[i]);
		kvm_free_memslots(kvm,
			rcu_dereference_protected(kvm->memslots[i], 1));
	kvm_arch_free_vm(kvm);
	mmdrop(current->mm);
	return ERR_PTR(r);
@@ -756,7 +757,8 @@ static void kvm_destroy_vm(struct kvm *kvm)
	kvm_arch_destroy_vm(kvm);
	kvm_destroy_devices(kvm);
	for (i = 0; i < KVM_ADDRESS_SPACE_NUM; i++)
		kvm_free_memslots(kvm, kvm->memslots[i]);
		kvm_free_memslots(kvm,
			rcu_dereference_protected(kvm->memslots[i], 1));
	cleanup_srcu_struct(&kvm->irq_srcu);
	cleanup_srcu_struct(&kvm->srcu);
	kvm_arch_free_vm(kvm);