diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 12cec63eda276734bb936e46f693ce2001861930..d0dcf73f36bcb46ecc3a7c7b145cf83058ac4c46 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -2181,9 +2181,17 @@ static int vcpu_post_run_fault_in_sie(struct kvm_vcpu *vcpu) * to be able to forward the PSW. */ rc = read_guest_instr(vcpu, &opcode, 1); - if (rc) - return kvm_s390_inject_prog_cond(vcpu, rc); ilen = insn_length(opcode); + if (rc < 0) { + return rc; + } else if (rc) { + /* Instruction-Fetching Exceptions - we can't detect the ilen. + * Forward by arbitrary ilc, injection will take care of + * nullification if necessary. + */ + pgm_info = vcpu->arch.pgm; + ilen = 4; + } pgm_info.flags = ilen | KVM_S390_PGM_FLAGS_ILC_VALID; kvm_s390_forward_psw(vcpu, ilen); return kvm_s390_inject_prog_irq(vcpu, &pgm_info);