On 12.05.25 10:43, Julian Ganz wrote:
From: Julian Ganz <neither@nut.email>

Hi David,

It appears you only replied to the qemu-devel list? I just saw this when
informing a co-worker about this series.

Yeah, sorry for that. My tired mind clicked the wrong button (reply to sender only ...)


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.

Ah, again ... need more coffee :)


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.


Okay, thanks for the clarification!

Acked-by: David Hildenbrand <da...@redhat.com>

--
Cheers,

David / dhildenb


Reply via email to