Hi Richard, Richard Henderson <richard.hender...@linaro.org> writes:
> When EXECUTE sets ex_value to interrupt the constructed instruction, > we implicitly disable interrupts so that the value is not corrupted. > Exit to the main loop after execution, so that we re-evaluate any > pending interrupts. > > Reported-by: Sven Schnelle <sv...@linux.ibm.com> > Signed-off-by: Richard Henderson <richard.hender...@linaro.org> > --- > > Hi Sven. Will you test this vs your testcase? Thanks, Of course, i'm happy if someone fixes this so i don't have to. :-) Unfortunately it doesn't fix the issue: exec_tb_exit tb:(nil) flags=0x0 exec_tb tb:0x3ff35c66f00 pc=0x400 exec_tb tb:0x3ff3410f300 pc=0x1edf7f8 tcg_handle_interrupt: 2 exec_tb_exit tb:0x3ff340d2d00 flags=0x3 ignoring irq during EX ignoring irq during EX exec_tb tb:0x3ff340d2d00 pc=0x1edf810 writing dc->base.is_jmp to the qemu log shows: s390x_tr_translate_insn: is_jmp: 3 s390x_tr_translate_insn: is_jmp: 3 s390x_tr_translate_insn: is_jmp: 3 s390x_tr_translate_insn: is_jmp: 3 s390x_tr_translate_insn: is_jmp: 3 s390x_tr_translate_insn: is_jmp: 3 [..] So is_jump is always 3, which is DISAS_TARGET_0. I think the if (dc->base.is_jmp == DISAS_NEXT) condition therefore never matches.