s390/kvm: Interrupt injection bugfix
EXTERNAL_CALL and EMERGENCY type interrupts need to preserve their interrupt code parameter when being injected from user space. Signed-off-by: Jason J. Herne <jjherne@us.ibm.com> Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
d151f63f20
commit
82a1273713
|
@ -629,11 +629,28 @@ int kvm_s390_inject_vcpu(struct kvm_vcpu *vcpu,
|
||||||
break;
|
break;
|
||||||
case KVM_S390_SIGP_STOP:
|
case KVM_S390_SIGP_STOP:
|
||||||
case KVM_S390_RESTART:
|
case KVM_S390_RESTART:
|
||||||
case KVM_S390_INT_EXTERNAL_CALL:
|
|
||||||
case KVM_S390_INT_EMERGENCY:
|
|
||||||
VCPU_EVENT(vcpu, 3, "inject: type %x", s390int->type);
|
VCPU_EVENT(vcpu, 3, "inject: type %x", s390int->type);
|
||||||
inti->type = s390int->type;
|
inti->type = s390int->type;
|
||||||
break;
|
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:
|
||||||
|
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_VIRTIO:
|
||||||
case KVM_S390_INT_SERVICE:
|
case KVM_S390_INT_SERVICE:
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue