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

Commit e09fefde authored by David Hildenbrand's avatar David Hildenbrand Committed by Christian Borntraeger
Browse files

KVM: Use common function for VCPU lookup by id



Let's reuse the new common function for VPCU lookup by id.

Reviewed-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
Reviewed-by: default avatarDominik Dingel <dingel@linux.vnet.ibm.com>
Signed-off-by: default avatarDavid Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
[split out the new function into a separate patch]
parent bb11c6c9
Loading
Loading
Loading
Loading
+2 −8
Original line number Original line Diff line number Diff line
@@ -308,16 +308,10 @@ static void kvmppc_dump_regs(struct kvm_vcpu *vcpu)


static struct kvm_vcpu *kvmppc_find_vcpu(struct kvm *kvm, int id)
static struct kvm_vcpu *kvmppc_find_vcpu(struct kvm *kvm, int id)
{
{
	int r;
	struct kvm_vcpu *ret;
	struct kvm_vcpu *v, *ret = NULL;


	mutex_lock(&kvm->lock);
	mutex_lock(&kvm->lock);
	kvm_for_each_vcpu(r, v, kvm) {
	ret = kvm_get_vcpu_by_id(kvm, id);
		if (v->vcpu_id == id) {
			ret = v;
			break;
		}
	}
	mutex_unlock(&kvm->lock);
	mutex_unlock(&kvm->lock);
	return ret;
	return ret;
}
}
+3 −8
Original line number Original line Diff line number Diff line
@@ -155,10 +155,8 @@ static int __diag_time_slice_end(struct kvm_vcpu *vcpu)


static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
{
{
	struct kvm *kvm = vcpu->kvm;
	struct kvm_vcpu *tcpu;
	struct kvm_vcpu *tcpu;
	int tid;
	int tid;
	int i;


	tid = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4];
	tid = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4];
	vcpu->stat.diagnose_9c++;
	vcpu->stat.diagnose_9c++;
@@ -167,12 +165,9 @@ static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
	if (tid == vcpu->vcpu_id)
	if (tid == vcpu->vcpu_id)
		return 0;
		return 0;


	kvm_for_each_vcpu(i, tcpu, kvm)
	tcpu = kvm_get_vcpu_by_id(vcpu->kvm, tid);
		if (tcpu->vcpu_id == tid) {
	if (tcpu)
		kvm_vcpu_yield_to(tcpu);
		kvm_vcpu_yield_to(tcpu);
			break;
		}

	return 0;
	return 0;
}
}


+5 −7
Original line number Original line Diff line number Diff line
@@ -2257,7 +2257,7 @@ static int create_vcpu_fd(struct kvm_vcpu *vcpu)
static int kvm_vm_ioctl_create_vcpu(struct kvm *kvm, u32 id)
static int kvm_vm_ioctl_create_vcpu(struct kvm *kvm, u32 id)
{
{
	int r;
	int r;
	struct kvm_vcpu *vcpu, *v;
	struct kvm_vcpu *vcpu;


	if (id >= KVM_MAX_VCPUS)
	if (id >= KVM_MAX_VCPUS)
		return -EINVAL;
		return -EINVAL;
@@ -2281,9 +2281,7 @@ static int kvm_vm_ioctl_create_vcpu(struct kvm *kvm, u32 id)
		r = -EINVAL;
		r = -EINVAL;
		goto unlock_vcpu_destroy;
		goto unlock_vcpu_destroy;
	}
	}

	if (kvm_get_vcpu_by_id(kvm, id)) {
	kvm_for_each_vcpu(r, v, kvm)
		if (v->vcpu_id == id) {
		r = -EEXIST;
		r = -EEXIST;
		goto unlock_vcpu_destroy;
		goto unlock_vcpu_destroy;
	}
	}