Hi list, I messed up the last messages From-address when drafting the mail by hand. Sorry for the noise.
> Hi David, > > It appears you only replied to the qemu-devel list? I just saw this when > informing a co-worker about this series. > >> On 11.05.25 15:14, Julian Ganz wrote: >>> diff --git a/target/s390x/tcg/excp_helper.c b/target/s390x/tcg/excp_helper.c >>> index e4c75d0ce0..b7e7a4deff 100644 >>> --- a/target/s390x/tcg/excp_helper.c >>> +++ b/target/s390x/tcg/excp_helper.c >>> @@ -34,6 +34,7 @@ >>> #include "hw/s390x/s390_flic.h" >>> #include "hw/boards.h" >>> #endif >>> +#include "qemu/plugin.h" >>> >>> G_NORETURN void tcg_s390_program_interrupt(CPUS390XState *env, >>> uint32_t code, uintptr_t ra) >>> @@ -499,6 +500,7 @@ void s390_cpu_do_interrupt(CPUState *cs) >>> S390CPU *cpu = S390_CPU(cs); >>> CPUS390XState *env = &cpu->env; >>> bool stopped = false; >>> + uint64_t last_pc = cpu->env.psw.addr; >>> >>> qemu_log_mask(CPU_LOG_INT, "%s: %d at psw=%" PRIx64 ":%" PRIx64 "\n", >>> __func__, cs->exception_index, env->psw.mask, >>> env->psw.addr); >>> @@ -528,21 +530,27 @@ try_deliver: >>> switch (cs->exception_index) { >>> case EXCP_PGM: >>> do_program_interrupt(env); >>> + qemu_plugin_vcpu_exception_cb(cs, last_pc); >>> break; >>> case EXCP_SVC: >>> do_svc_interrupt(env); >>> + qemu_plugin_vcpu_exception_cb(cs, last_pc); >>> break; >>> case EXCP_EXT: >>> do_ext_interrupt(env); >>> + qemu_plugin_vcpu_interrupt_cb(cs, last_pc); >>> break; >>> case EXCP_IO: >>> do_io_interrupt(env); >>> + qemu_plugin_vcpu_interrupt_cb(cs, last_pc); >>> break; >>> case EXCP_MCHK: >>> do_mchk_interrupt(env); >>> + qemu_plugin_vcpu_interrupt_cb(cs, last_pc); >>> break; >>> case EXCP_RESTART: >>> do_restart_interrupt(env); >>> + qemu_plugin_vcpu_interrupt_cb(cs, last_pc); >> >> Might be easier to check for "if (cs->exception_index != EXCP_STOP)" >> after that switch-case. > > I still need to differentiate between exceptions and interrupts, which > would result in another switch-case. > >> But I'm curious about the semantics: are we supposed to call >> qemu_plugin_vcpu_interrupt_cb() just after an interrupt got delivered? > > `qemu_plugin_vcpu_interrupt_cb` or `qemu_plugin_vcpu_exception_cb` need > to be called after the CPU was set up (that is, after PC and any other > relevant register was set) and before the next instruction is executed. > So, yes, more or less. Regards, Julian