qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Liu Zhiwei" <zhiwei_liu@linux.alibaba.com>,
	"Alexandre Iooss" <erdnaxe@crans.org>,
	"Chinmay Rath" <rathc@linux.ibm.com>,
	qemu-arm@nongnu.org, "Peter Maydell" <peter.maydell@linaro.org>,
	"Nicholas Piggin" <npiggin@gmail.com>,
	"Ilya Leoshkevich" <iii@linux.ibm.com>,
	"David Hildenbrand" <david@redhat.com>,
	qemu-ppc@nongnu.org, "Paolo Bonzini" <pbonzini@redhat.com>,
	qemu-s390x@nongnu.org,
	"Pierrick Bouvier" <pierrick.bouvier@linaro.org>,
	"Bastian Koppelmann" <kbastian@mail.uni-paderborn.de>,
	"Helge Deller" <deller@gmx.de>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Stafford Horne" <shorne@gmail.com>,
	"Mahmoud Mandour" <ma.mandourr@gmail.com>,
	"Artyom Tarasenko" <atar4qemu@gmail.com>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	"Palmer Dabbelt" <palmer@dabbelt.com>,
	"Alistair Francis" <alistair.francis@wdc.com>,
	"Laurent Vivier" <laurent@vivier.eu>,
	"Weiwei Li" <liwei1518@gmail.com>,
	"Daniel Henrique Barboza" <dbarboza@ventanamicro.com>,
	"Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>,
	"Yoshinori Sato" <yoshinori.sato@nifty.com>,
	"Edgar E. Iglesias" <edgar.iglesias@gmail.com>,
	"Aurelien Jarno" <aurelien@aurel32.net>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Thomas Huth" <thuth@redhat.com>,
	"Max Filippov" <jcmvbkbc@gmail.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Jiaxun Yang" <jiaxun.yang@flygoat.com>,
	"Michael Rolnik" <mrolnik@gmail.com>,
	"Song Gao" <gaosong@loongson.cn>,
	qemu-riscv@nongnu.org, "Aleksandar Rikalo" <arikalo@gmail.com>,
	"Julian Ganz" <neither@nut.email>
Subject: [PATCH 07/35] plugins: add types for callbacks related to certain discontinuities
Date: Mon, 27 Oct 2025 11:03:14 +0000	[thread overview]
Message-ID: <20251027110344.2289945-8-alex.bennee@linaro.org> (raw)
In-Reply-To: <20251027110344.2289945-1-alex.bennee@linaro.org>

From: Julian Ganz <neither@nut.email>

The plugin API allows registration of callbacks for a variety of VCPU
related events, such as VCPU reset, idle and resume. However, traps of
any kind, i.e. interrupts or exceptions, were previously not covered.
These kinds of events are arguably quite significant and usually go hand
in hand with a PC discontinuity. On most platforms, the discontinuity
also includes a transition from some "mode" to another. Thus, plugins
for the analysis of (virtualized) embedded systems may benefit from or
even require the possiblity to perform work on the occurance of an
interrupt or exception.

This change introduces the concept of such a discontinuity event in the
form of an enumeration. Currently only traps are covered. Specifically
we (loosely) define interrupts, exceptions and host calls across all
platforms. In addition, this change introduces a type to use for
callback functions related to such events. Since possible modes and the
enumeration of interupts and exceptions vary greatly between different
architectures, the callback type only receives the VCPU id, the type of
event as well as the old and new PC.

Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Julian Ganz <neither@nut.email>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 include/qemu/plugin.h      |  1 +
 include/qemu/qemu-plugin.h | 44 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+)

diff --git a/include/qemu/plugin.h b/include/qemu/plugin.h
index f355c7cb8ab..8cf20cd96f7 100644
--- a/include/qemu/plugin.h
+++ b/include/qemu/plugin.h
@@ -59,6 +59,7 @@ union qemu_plugin_cb_sig {
     qemu_plugin_udata_cb_t           udata;
     qemu_plugin_vcpu_simple_cb_t     vcpu_simple;
     qemu_plugin_vcpu_udata_cb_t      vcpu_udata;
+    qemu_plugin_vcpu_discon_cb_t     vcpu_discon;
     qemu_plugin_vcpu_tb_trans_cb_t   vcpu_tb_trans;
     qemu_plugin_vcpu_mem_cb_t        vcpu_mem;
     qemu_plugin_vcpu_syscall_cb_t    vcpu_syscall;
diff --git a/include/qemu/qemu-plugin.h b/include/qemu/qemu-plugin.h
index c450106af18..08bf366e363 100644
--- a/include/qemu/qemu-plugin.h
+++ b/include/qemu/qemu-plugin.h
@@ -161,6 +161,50 @@ typedef void (*qemu_plugin_vcpu_simple_cb_t)(qemu_plugin_id_t id,
 typedef void (*qemu_plugin_vcpu_udata_cb_t)(unsigned int vcpu_index,
                                             void *userdata);
 
+
+/**
+ * enum qemu_plugin_discon_type - type of a (potential) PC discontinuity
+ *
+ * @QEMU_PLUGIN_DISCON_INTERRUPT: an interrupt, defined across all architectures
+ *                                as an asynchronous event, usually originating
+ *                                from outside the CPU
+ * @QEMU_PLUGIN_DISCON_EXCEPTION: an exception, defined across all architectures
+ *                                as a synchronous event in response to a
+ *                                specific instruction being executed
+ * @QEMU_PLUGIN_DISCON_HOSTCALL: a host call, functionally a special kind of
+ *                               exception that is not handled by code run by
+ *                               the vCPU but machinery outside the vCPU
+ * @QEMU_PLUGIN_DISCON_ALL: all types of disconinuity events currently covered
+ */
+enum qemu_plugin_discon_type {
+    QEMU_PLUGIN_DISCON_INTERRUPT = 1 << 0,
+    QEMU_PLUGIN_DISCON_EXCEPTION = 1 << 1,
+    QEMU_PLUGIN_DISCON_HOSTCALL = 1 << 2,
+    QEMU_PLUGIN_DISCON_ALL = -1
+};
+
+/**
+ * typedef qemu_plugin_vcpu_discon_cb_t - vcpu discontinuity callback
+ * @id: plugin ID
+ * @vcpu_index: the current vcpu context
+ * @type: the type of discontinuity
+ * @from_pc: the source of the discontinuity, e.g. the PC before the
+ *           transition
+ * @to_pc: the PC pointing to the next instruction to be executed
+ *
+ * The exact semantics of @from_pc depends on the @type of discontinuity. For
+ * interrupts, @from_pc will point to the next instruction which would have
+ * been executed. For exceptions and host calls, @from_pc will point to the
+ * instruction that caused the exception or issued the host call. Note that
+ * in the case of exceptions, the instruction may not be retired and thus not
+ * observable via general instruction exec callbacks. The same may be the case
+ * for some host calls such as hypervisor call "exceptions".
+ */
+typedef void (*qemu_plugin_vcpu_discon_cb_t)(qemu_plugin_id_t id,
+                                             unsigned int vcpu_index,
+                                             enum qemu_plugin_discon_type type,
+                                             uint64_t from_pc, uint64_t to_pc);
+
 /**
  * qemu_plugin_uninstall() - Uninstall a plugin
  * @id: this plugin's opaque ID
-- 
2.47.3



  parent reply	other threads:[~2025-10-27 11:10 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-27 11:03 [PATCH 00/35] maintainer updates for 8.2 softfeeeze (ci, plugins, semihosting) pre-PR Alex Bennée
2025-10-27 11:03 ` [PATCH 01/35] ci: clean-up remaining bits of armhf builds Alex Bennée
2025-10-27 11:20   ` Philippe Mathieu-Daudé
2025-10-28 12:38   ` Richard Henderson
2025-10-27 11:03 ` [PATCH 02/35] scripts/ci/setup: regenerate yaml Alex Bennée
2025-10-29  8:13   ` Manos Pitsidianakis
2025-10-27 11:03 ` [PATCH 03/35] scripts/ci: move build-environment.yaml up a level Alex Bennée
2025-10-29  8:11   ` Manos Pitsidianakis
2025-10-27 11:03 ` [PATCH 04/35] scripts/ci: allow both Ubuntu or Debian to run upgrade Alex Bennée
2025-10-29  8:18   ` Manos Pitsidianakis
2025-10-27 11:03 ` [PATCH 05/35] tests/lcitool: generate a yaml file for the ppc64le runner Alex Bennée
2025-10-29  8:14   ` Manos Pitsidianakis
2025-10-27 11:03 ` [PATCH 06/35] scripts/ci: modify gitlab runner deb setup Alex Bennée
2025-10-29  8:10   ` Manos Pitsidianakis
2025-10-27 11:03 ` Alex Bennée [this message]
2025-10-27 11:03 ` [PATCH 08/35] plugins: add API for registering discontinuity callbacks Alex Bennée
2025-10-27 11:03 ` [PATCH 09/35] plugins: add hooks for new discontinuity related callbacks Alex Bennée
2025-10-27 11:03 ` [PATCH 10/35] contrib/plugins: add plugin showcasing new dicontinuity related API Alex Bennée
2025-10-27 11:03 ` [PATCH 11/35] target/alpha: call plugin trap callbacks Alex Bennée
2025-10-27 11:03 ` [PATCH 12/35] target/arm: " Alex Bennée
2025-10-27 11:03 ` [PATCH 13/35] target/avr: " Alex Bennée
2025-10-27 11:03 ` [PATCH 14/35] target/hppa: " Alex Bennée
2025-10-27 11:03 ` [PATCH 15/35] target/i386: " Alex Bennée
2025-10-27 11:03 ` [PATCH 16/35] target/loongarch: " Alex Bennée
2025-10-27 11:03 ` [PATCH 17/35] target/m68k: " Alex Bennée
2025-10-27 11:03 ` [PATCH 18/35] target/microblaze: " Alex Bennée
2025-10-27 11:03 ` [PATCH 19/35] target/mips: " Alex Bennée
2025-10-27 11:03 ` [PATCH 20/35] target/openrisc: " Alex Bennée
2025-10-27 11:03 ` [PATCH 21/35] target/ppc: " Alex Bennée
2025-10-27 11:03 ` [PATCH 22/35] target/riscv: " Alex Bennée
2025-10-27 11:03 ` [PATCH 23/35] target/rx: " Alex Bennée
2025-10-27 11:03 ` [PATCH 24/35] target/s390x: " Alex Bennée
2025-10-27 11:03 ` [PATCH 25/35] target/sh4: " Alex Bennée
2025-10-27 11:03 ` [PATCH 26/35] target/sparc: " Alex Bennée
2025-10-27 11:03 ` [PATCH 27/35] target/tricore: " Alex Bennée
2025-10-27 11:03 ` [PATCH 28/35] target/xtensa: " Alex Bennée
2025-10-27 11:03 ` [PATCH 29/35] tests: add plugin asserting correctness of discon event's to_pc Alex Bennée
2025-10-27 11:03 ` [PATCH 30/35] tests: add test for double-traps on rv64 Alex Bennée
2025-10-27 11:03 ` [PATCH 31/35] tests: add test with interrupted memory accesses " Alex Bennée
2025-10-27 11:03 ` [PATCH 32/35] plugins/core: add missing QEMU_DISABLE_CFI annotations Alex Bennée
2025-10-27 11:03 ` [PATCH 33/35] configs: drop SBSA_REF from minimal specification Alex Bennée
2025-10-27 11:03 ` [PATCH 34/35] gdbstub: Fix %s formatting Alex Bennée
2025-10-27 11:18   ` Philippe Mathieu-Daudé
2025-10-27 11:03 ` [PATCH 35/35] semihosting: Fix GDB File-I/O FLEN Alex Bennée
2025-10-27 11:29 ` [PATCH 00/35] maintainer updates for 10.2 softfeeeze (ci, plugins, semihosting) pre-PR Alex Bennée

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20251027110344.2289945-8-alex.bennee@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=alistair.francis@wdc.com \
    --cc=arikalo@gmail.com \
    --cc=atar4qemu@gmail.com \
    --cc=aurelien@aurel32.net \
    --cc=david@redhat.com \
    --cc=dbarboza@ventanamicro.com \
    --cc=deller@gmx.de \
    --cc=edgar.iglesias@gmail.com \
    --cc=eduardo@habkost.net \
    --cc=erdnaxe@crans.org \
    --cc=gaosong@loongson.cn \
    --cc=iii@linux.ibm.com \
    --cc=jcmvbkbc@gmail.com \
    --cc=jiaxun.yang@flygoat.com \
    --cc=kbastian@mail.uni-paderborn.de \
    --cc=laurent@vivier.eu \
    --cc=liwei1518@gmail.com \
    --cc=ma.mandourr@gmail.com \
    --cc=mark.cave-ayland@ilande.co.uk \
    --cc=mrolnik@gmail.com \
    --cc=neither@nut.email \
    --cc=npiggin@gmail.com \
    --cc=palmer@dabbelt.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@linaro.org \
    --cc=pierrick.bouvier@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=qemu-riscv@nongnu.org \
    --cc=qemu-s390x@nongnu.org \
    --cc=rathc@linux.ibm.com \
    --cc=richard.henderson@linaro.org \
    --cc=shorne@gmail.com \
    --cc=thuth@redhat.com \
    --cc=yoshinori.sato@nifty.com \
    --cc=zhiwei_liu@linux.alibaba.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).