KVM: PPC: Book3S HV: Implement H_CONFER
authorPaul Mackerras <paulus@samba.org>
Fri, 6 Sep 2013 03:23:21 +0000 (13:23 +1000)
committerAlexander Graf <agraf@suse.de>
Thu, 17 Oct 2013 12:45:00 +0000 (14:45 +0200)
The H_CONFER hypercall is used when a guest vcpu is spinning on a lock
held by another vcpu which has been preempted, and the spinning vcpu
wishes to give its timeslice to the lock holder.  We implement this
in the straightforward way using kvm_vcpu_yield_to().

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
arch/powerpc/kvm/book3s_hv.c

index 56f57af7e73877703fdc8daff09f125568da7b05..a010aa4cd02670e9f237f45a7f776e277bf9f123 100644 (file)
@@ -538,6 +538,15 @@ int kvmppc_pseries_do_hcall(struct kvm_vcpu *vcpu)
                }
                break;
        case H_CONFER:
+               target = kvmppc_get_gpr(vcpu, 4);
+               if (target == -1)
+                       break;
+               tvcpu = kvmppc_find_vcpu(vcpu->kvm, target);
+               if (!tvcpu) {
+                       ret = H_PARAMETER;
+                       break;
+               }
+               kvm_vcpu_yield_to(tvcpu);
                break;
        case H_REGISTER_VPA:
                ret = do_h_register_vpa(vcpu, kvmppc_get_gpr(vcpu, 4),