From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Alistair Francis" <alistair.francis@wdc.com>,
"Cédric Le Goater" <clg@kaod.org>,
"Marcin Juszkiewicz" <marcin.juszkiewicz@linaro.org>,
"John Snow" <jsnow@redhat.com>,
libvir-list@redhat.com,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
qemu-s390x@nongnu.org, "Song Gao" <gaosong@loongson.cn>,
"Daniel Henrique Barboza" <danielhb413@gmail.com>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Bastian Koppelmann" <kbastian@mail.uni-paderborn.de>,
"Liu Zhiwei" <zhiwei_liu@linux.alibaba.com>,
"Weiwei Li" <liweiwei@iscas.ac.cn>,
"Nicholas Piggin" <npiggin@gmail.com>,
"Radoslaw Biernacki" <rad@semihalf.com>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Eduardo Habkost" <eduardo@habkost.net>,
"Cleber Rosa" <crosa@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Mahmoud Mandour" <ma.mandourr@gmail.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Thomas Huth" <thuth@redhat.com>,
"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Bin Meng" <bin.meng@windriver.com>,
"Alexandre Iooss" <erdnaxe@crans.org>,
"Xiaojuan Yang" <yangxiaojuan@loongson.cn>,
qemu-ppc@nongnu.org, "David Hildenbrand" <david@redhat.com>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Yanan Wang" <wangyanan55@huawei.com>,
"Peter Maydell" <peter.maydell@linaro.org>,
qemu-riscv@nongnu.org, qemu-arm@nongnu.org,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Ilya Leoshkevich" <iii@linux.ibm.com>,
"Laurent Vivier" <lvivier@redhat.com>,
"Yoshinori Sato" <ysato@users.sourceforge.jp>,
"Leif Lindholm" <quic_llindhol@quicinc.com>,
"Beraldo Leal" <bleal@redhat.com>,
"Matt Borgerson" <contact@mborgerson.com>
Subject: [PATCH 23/31] plugins: Set final instruction count in plugin_gen_tb_end
Date: Mon, 25 Sep 2023 15:48:46 +0100 [thread overview]
Message-ID: <20230925144854.1872513-24-alex.bennee@linaro.org> (raw)
In-Reply-To: <20230925144854.1872513-1-alex.bennee@linaro.org>
From: Matt Borgerson <contact@mborgerson.com>
Translation logic may partially decode an instruction, then abort and
remove the instruction from the TB. This can happen for example when an
instruction spans two pages. In this case, plugins may get an incorrect
result when calling qemu_plugin_tb_n_insns to query for the number of
instructions in the TB. This patch updates plugin_gen_tb_end to set the
final instruction count.
Signed-off-by: Matt Borgerson <contact@mborgerson.com>
[AJB: added g_assert to defed API]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <CADc=-s5RwGViNTR-h5cq3np673W3RRFfhr4vCGJp0EoDUxvhog@mail.gmail.com>
---
include/exec/plugin-gen.h | 4 ++--
accel/tcg/plugin-gen.c | 6 +++++-
accel/tcg/translator.c | 2 +-
3 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/include/exec/plugin-gen.h b/include/exec/plugin-gen.h
index 52828781bc..c4552b5061 100644
--- a/include/exec/plugin-gen.h
+++ b/include/exec/plugin-gen.h
@@ -20,7 +20,7 @@ struct DisasContextBase;
bool plugin_gen_tb_start(CPUState *cpu, const struct DisasContextBase *db,
bool supress);
-void plugin_gen_tb_end(CPUState *cpu);
+void plugin_gen_tb_end(CPUState *cpu, size_t num_insns);
void plugin_gen_insn_start(CPUState *cpu, const struct DisasContextBase *db);
void plugin_gen_insn_end(void);
@@ -42,7 +42,7 @@ void plugin_gen_insn_start(CPUState *cpu, const struct DisasContextBase *db)
static inline void plugin_gen_insn_end(void)
{ }
-static inline void plugin_gen_tb_end(CPUState *cpu)
+static inline void plugin_gen_tb_end(CPUState *cpu, size_t num_insns)
{ }
static inline void plugin_gen_disable_mem_helpers(void)
diff --git a/accel/tcg/plugin-gen.c b/accel/tcg/plugin-gen.c
index 5c13615112..c0adc9f4b7 100644
--- a/accel/tcg/plugin-gen.c
+++ b/accel/tcg/plugin-gen.c
@@ -866,10 +866,14 @@ void plugin_gen_insn_end(void)
* do any clean-up here and make sure things are reset in
* plugin_gen_tb_start.
*/
-void plugin_gen_tb_end(CPUState *cpu)
+void plugin_gen_tb_end(CPUState *cpu, size_t num_insns)
{
struct qemu_plugin_tb *ptb = tcg_ctx->plugin_tb;
+ /* translator may have removed instructions, update final count */
+ g_assert(num_insns <= ptb->n);
+ ptb->n = num_insns;
+
/* collect instrumentation requests */
qemu_plugin_tb_trans_cb(cpu, ptb);
diff --git a/accel/tcg/translator.c b/accel/tcg/translator.c
index 37f8dadbbd..ff84282fe5 100644
--- a/accel/tcg/translator.c
+++ b/accel/tcg/translator.c
@@ -212,7 +212,7 @@ void translator_loop(CPUState *cpu, TranslationBlock *tb, int *max_insns,
gen_tb_end(tb, cflags, icount_start_insn, db->num_insns);
if (plugin_enabled) {
- plugin_gen_tb_end(cpu);
+ plugin_gen_tb_end(cpu, db->num_insns);
}
/* The disas_log hook may use these values rather than recompute. */
--
2.39.2
next prev parent reply other threads:[~2023-09-25 14:53 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-25 14:48 [PATCH 00/31] September maintainer omnibus (tests, gdbstub, plugins) Alex Bennée
2023-09-25 14:48 ` [PATCH 01/31] tests/avocado: update firmware to enable sbsa-ref/neoverse-v1 Alex Bennée
2023-09-25 14:48 ` [PATCH 02/31] tests/lcitool: add swtpm to the package list Alex Bennée
2023-09-25 15:25 ` Daniel P. Berrangé
2023-09-25 14:48 ` [PATCH 03/31] gitlab: shuffle some targets and reduce avocado noise Alex Bennée
2023-09-25 14:48 ` [PATCH 04/31] docs: mark CRIS support as deprecated Alex Bennée
2023-09-25 16:28 ` Daniel P. Berrangé
2023-09-25 16:29 ` Daniel P. Berrangé
2023-09-25 16:50 ` Alex Bennée
2023-09-25 17:17 ` Edgar E. Iglesias
2024-01-24 11:06 ` Philippe Mathieu-Daudé
2024-01-24 13:59 ` Edgar E. Iglesias
2023-09-25 17:01 ` Alex Bennée
2023-09-25 14:48 ` [PATCH 05/31] tests/docker: make docker engine choice entirely configure driven Alex Bennée
2023-09-25 16:08 ` Paolo Bonzini
2023-09-25 14:48 ` [PATCH 06/31] configure: allow user to override docker engine Alex Bennée
2023-09-25 14:48 ` [PATCH 07/31] configure: remove gcc version suffixes Alex Bennée
2023-09-25 14:48 ` [PATCH 08/31] configure: ensure dependency for cross-compile setup Alex Bennée
2023-09-25 16:14 ` Paolo Bonzini
2023-09-25 16:42 ` Alex Bennée
2023-09-25 17:06 ` Paolo Bonzini
2023-09-25 17:09 ` Peter Maydell
2023-09-25 14:48 ` [PATCH 09/31] gdbstub: Fix target_xml initialization Alex Bennée
2023-09-25 14:48 ` [PATCH 10/31] gdbstub: Fix target.xml response Alex Bennée
2023-09-25 14:48 ` [PATCH 11/31] plugins: Check if vCPU is realized Alex Bennée
2023-09-25 14:48 ` [PATCH 12/31] contrib/plugins: Use GRWLock in execlog Alex Bennée
2023-09-25 14:48 ` [PATCH 13/31] gdbstub: Introduce GDBFeature structure Alex Bennée
2023-09-25 14:48 ` [PATCH 14/31] target/arm: Move the reference to arm-core.xml Alex Bennée
2023-09-25 14:48 ` [PATCH 15/31] hw/core/cpu: Return static value with gdb_arch_name() Alex Bennée
2023-09-25 14:48 ` [PATCH 16/31] gdbstub: Use g_markup_printf_escaped() Alex Bennée
2023-09-25 14:48 ` [PATCH 17/31] target/arm: Remove references to gdb_has_xml Alex Bennée
2023-09-25 14:48 ` [PATCH 18/31] target/ppc: " Alex Bennée
2023-09-25 14:48 ` [PATCH 19/31] gdbstub: Remove gdb_has_xml variable Alex Bennée
2023-09-25 14:48 ` [PATCH 20/31] gdbstub: Replace gdb_regs with an array Alex Bennée
2023-09-25 14:48 ` [PATCH 21/31] accel/tcg: Add plugin_enabled to DisasContextBase Alex Bennée
2023-09-25 14:48 ` [PATCH 22/31] target/sh4: Disable decode_gusa when plugins enabled Alex Bennée
2023-09-25 14:48 ` Alex Bennée [this message]
2023-09-25 14:48 ` [PATCH 24/31] contrib/plugins: fix coverity warning in cache Alex Bennée
2023-09-25 14:48 ` [PATCH 25/31] contrib/plugins: fix coverity warning in lockstep Alex Bennée
2023-09-25 14:48 ` [PATCH 26/31] contrib/plugins: fix coverity warning in hotblocks Alex Bennée
2023-09-25 14:48 ` [RFC PATCH 27/31] sysemu: add set_virtual_time to accel ops Alex Bennée
2023-09-25 14:48 ` [RFC PATCH 28/31] qtest: use cpu interface in qtest_clock_warp Alex Bennée
2023-09-25 14:48 ` [RFC PATCH 29/31] sysemu: generalise qtest_warp_clock as qemu_clock_advance_virtual_time Alex Bennée
2023-09-25 14:48 ` [RFC PATCH 30/31] plugins: add time control API Alex Bennée
2023-09-25 14:48 ` [RFC PATCH 31/31] contrib/plugins: add iops plugin example for cost modelling 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=20230925144854.1872513-24-alex.bennee@linaro.org \
--to=alex.bennee@linaro.org \
--cc=alistair.francis@wdc.com \
--cc=berrange@redhat.com \
--cc=bin.meng@windriver.com \
--cc=bleal@redhat.com \
--cc=clg@kaod.org \
--cc=contact@mborgerson.com \
--cc=crosa@redhat.com \
--cc=danielhb413@gmail.com \
--cc=david@redhat.com \
--cc=eduardo@habkost.net \
--cc=erdnaxe@crans.org \
--cc=gaosong@loongson.cn \
--cc=iii@linux.ibm.com \
--cc=jsnow@redhat.com \
--cc=kbastian@mail.uni-paderborn.de \
--cc=libvir-list@redhat.com \
--cc=liweiwei@iscas.ac.cn \
--cc=lvivier@redhat.com \
--cc=ma.mandourr@gmail.com \
--cc=marcandre.lureau@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=marcin.juszkiewicz@linaro.org \
--cc=npiggin@gmail.com \
--cc=palmer@dabbelt.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@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=quic_llindhol@quicinc.com \
--cc=rad@semihalf.com \
--cc=richard.henderson@linaro.org \
--cc=thuth@redhat.com \
--cc=wainersm@redhat.com \
--cc=wangyanan55@huawei.com \
--cc=yangxiaojuan@loongson.cn \
--cc=ysato@users.sourceforge.jp \
--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).