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: "Richard Henderson" <richard.henderson@linaro.org>,
	aaron@os.amperecomputing.com, robhenry@microsoft.com,
	mahmoudabdalghany@outlook.com, minyihh@uci.edu, cota@braap.org,
	Luke.Craig@ll.mit.edu, "Paolo Bonzini" <pbonzini@redhat.com>,
	kuhn.chenqun@huawei.com, ma.mandourr@gmail.com,
	"Alex Bennée" <alex.bennee@linaro.org>
Subject: [PATCH  v1 22/22] plugins: move reset of plugin data to tb_start
Date: Mon, 24 Jan 2022 20:16:08 +0000	[thread overview]
Message-ID: <20220124201608.604599-23-alex.bennee@linaro.org> (raw)
In-Reply-To: <20220124201608.604599-1-alex.bennee@linaro.org>

We can't always guarantee we get to the end of a translator loop.
Although this can happen for a variety of reasons it does happen more
often on x86 system emulation when an instruction spans across to an
un-faulted page. This caused confusion of the instruction tracking
data resulting in apparent reverse execution (at least from the
plugins point of view).

Fix this by moving the reset code to plugin_gen_tb_start so we always
start with a clean slate.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/824
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 accel/tcg/plugin-gen.c | 29 ++++++++++++++++++-----------
 1 file changed, 18 insertions(+), 11 deletions(-)

diff --git a/accel/tcg/plugin-gen.c b/accel/tcg/plugin-gen.c
index 22d95fe1c3..ae70e4a5b0 100644
--- a/accel/tcg/plugin-gen.c
+++ b/accel/tcg/plugin-gen.c
@@ -854,10 +854,21 @@ static void plugin_gen_inject(const struct qemu_plugin_tb *plugin_tb)
 
 bool plugin_gen_tb_start(CPUState *cpu, const TranslationBlock *tb, bool mem_only)
 {
-    struct qemu_plugin_tb *ptb = tcg_ctx->plugin_tb;
     bool ret = false;
 
     if (test_bit(QEMU_PLUGIN_EV_VCPU_TB_TRANS, cpu->plugin_mask)) {
+        struct qemu_plugin_tb *ptb = tcg_ctx->plugin_tb;
+        int i;
+
+        /* reset callbacks */
+        for (i = 0; i < PLUGIN_N_CB_SUBTYPES; i++) {
+            if (ptb->cbs[i]) {
+                g_array_set_size(ptb->cbs[i], 0);
+            }
+        }
+        ptb->n = 0;
+        tcg_ctx->plugin_insn = NULL;
+
         ret = true;
 
         ptb->vaddr = tb->pc;
@@ -904,23 +915,19 @@ void plugin_gen_insn_end(void)
     plugin_gen_empty_callback(PLUGIN_GEN_AFTER_INSN);
 }
 
+/*
+ * There are cases where we never get to finalise a translation - for
+ * example a page fault during translation. As a result we shouldn't
+ * do any clean-up here and make sure things are reset in
+ * plugin_gen_tb_start.
+ */
 void plugin_gen_tb_end(CPUState *cpu)
 {
     struct qemu_plugin_tb *ptb = tcg_ctx->plugin_tb;
-    int i;
 
     /* collect instrumentation requests */
     qemu_plugin_tb_trans_cb(cpu, ptb);
 
     /* inject the instrumentation at the appropriate places */
     plugin_gen_inject(ptb);
-
-    /* clean up */
-    for (i = 0; i < PLUGIN_N_CB_SUBTYPES; i++) {
-        if (ptb->cbs[i]) {
-            g_array_set_size(ptb->cbs[i], 0);
-        }
-    }
-    ptb->n = 0;
-    tcg_ctx->plugin_insn = NULL;
 }
-- 
2.30.2



      parent reply	other threads:[~2022-01-24 20:34 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
2022-01-24 20:15 ` [PATCH v1 01/22] tests/Makefile.include: clean-up old code Alex Bennée
2022-01-24 20:38   ` Philippe Mathieu-Daudé via
2022-01-24 20:15 ` [PATCH v1 02/22] tests/qtest: enable more vhost-user tests by default Alex Bennée
2022-01-25  8:18   ` Thomas Huth
2022-01-24 20:15 ` [PATCH v1 03/22] Makefile: also remove .gcno files when cleaning Alex Bennée
2022-01-25  7:40   ` Thomas Huth
2022-01-24 20:15 ` [PATCH v1 04/22] .gitignore: add .gcov pattern Alex Bennée
2022-01-24 20:38   ` Philippe Mathieu-Daudé via
2022-01-24 20:15 ` [PATCH v1 05/22] MAINTAINERS: Cover lcitool submodule with build test / automation Alex Bennée
2022-01-24 20:15 ` [PATCH v1 06/22] gitmodules: Correct libvirt-ci submodule URL Alex Bennée
2022-01-24 20:15 ` [PATCH v1 07/22] tests/lcitool: Include local qemu.yml when refreshing cirrus-ci files Alex Bennée
2022-01-24 20:15 ` [PATCH v1 08/22] drop libxml2 checks since libxml is not actually used (for parallels) Alex Bennée
2022-01-25 21:29   ` Vladimir Sementsov-Ogievskiy
2022-01-24 20:15 ` [PATCH v1 09/22] tests/lcitool: Refresh submodule and remove libxml2 Alex Bennée
2022-01-25 10:23   ` Thomas Huth
2022-01-25 10:48     ` Philippe Mathieu-Daudé via
2022-01-24 20:15 ` [PATCH v1 10/22] tests: Manually remove libxml2 on MSYS2 runners Alex Bennée
2022-01-24 20:15 ` [PATCH v1 11/22] tests/lcitool: Install libibumad to cover RDMA on Debian based distros Alex Bennée
2022-01-24 20:15 ` [PATCH v1 12/22] plugins: stxp test case from Aaron (!upstream) Alex Bennée
2022-01-25  8:17   ` Thomas Huth
2022-02-01 14:58     ` Aaron Lindsay via
2022-02-01 15:00   ` Aaron Lindsay via
2022-02-01 15:29     ` Alex Bennée
2022-02-02 14:17       ` Aaron Lindsay via
2022-01-24 20:15 ` [PATCH v1 13/22] docs: remove references to TCG tracing Alex Bennée
2022-01-24 20:16 ` [PATCH v1 14/22] tracing: remove TCG memory access tracing Alex Bennée
2022-01-24 22:06   ` Philippe Mathieu-Daudé via
2022-01-24 20:16 ` [PATCH v1 15/22] tracing: remove the trace-tcg includes from the build Alex Bennée
2022-01-24 22:07   ` Philippe Mathieu-Daudé via
2022-01-24 20:16 ` [PATCH v1 16/22] tracing: excise the tcg related from tracetool Alex Bennée
2022-01-24 20:16 ` [PATCH v1 17/22] plugins: add helper functions for coverage plugins Alex Bennée
2022-01-24 20:16 ` [PATCH v1 18/22] contrib/plugins: add a drcov plugin Alex Bennée
2022-01-24 20:16 ` [PATCH v1 19/22] tests/plugin: allow libinsn.so per-CPU counts Alex Bennée
2022-01-24 20:16 ` [PATCH v1 20/22] tests/plugins: add instruction matching to libinsn.so Alex Bennée
2022-01-24 22:13   ` Philippe Mathieu-Daudé via
2022-01-24 20:16 ` [PATCH v1 21/22] target/i386: use CPU_LOG_INT for IRQ servicing Alex Bennée
2022-01-24 22:14   ` Philippe Mathieu-Daudé via
2022-01-26 21:33   ` Richard Henderson
2022-01-24 20:16 ` Alex Bennée [this message]

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=20220124201608.604599-23-alex.bennee@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=Luke.Craig@ll.mit.edu \
    --cc=aaron@os.amperecomputing.com \
    --cc=cota@braap.org \
    --cc=kuhn.chenqun@huawei.com \
    --cc=ma.mandourr@gmail.com \
    --cc=mahmoudabdalghany@outlook.com \
    --cc=minyihh@uci.edu \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=robhenry@microsoft.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).