Merge tag 'virtio-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[cascardo/linux.git] / arch / s390 / kvm / interrupt.c
index ff1e2f8..c30615e 100644 (file)
@@ -629,10 +629,27 @@ int kvm_s390_inject_vcpu(struct kvm_vcpu *vcpu,
                break;
        case KVM_S390_SIGP_STOP:
        case KVM_S390_RESTART:
+               VCPU_EVENT(vcpu, 3, "inject: type %x", s390int->type);
+               inti->type = s390int->type;
+               break;
        case KVM_S390_INT_EXTERNAL_CALL:
+               if (s390int->parm & 0xffff0000) {
+                       kfree(inti);
+                       return -EINVAL;
+               }
+               VCPU_EVENT(vcpu, 3, "inject: external call source-cpu:%u",
+                          s390int->parm);
+               inti->type = s390int->type;
+               inti->extcall.code = s390int->parm;
+               break;
        case KVM_S390_INT_EMERGENCY:
-               VCPU_EVENT(vcpu, 3, "inject: type %x", s390int->type);
+               if (s390int->parm & 0xffff0000) {
+                       kfree(inti);
+                       return -EINVAL;
+               }
+               VCPU_EVENT(vcpu, 3, "inject: emergency %u\n", s390int->parm);
                inti->type = s390int->type;
+               inti->emerg.code = s390int->parm;
                break;
        case KVM_S390_INT_VIRTIO:
        case KVM_S390_INT_SERVICE: