aboutsummaryrefslogtreecommitdiff
path: root/accel
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2024-04-04 13:35:43 -1000
committerRichard Henderson <richard.henderson@linaro.org>2024-05-15 08:55:18 +0200
commit34e5e1dde5b9760936a6e2426f5ff0d55a0695b0 (patch)
treef40673b5cb1d8250690d594bf20b666011c5af64 /accel
parente763953a2445770bb5d1653d0c258dca5a6de5e2 (diff)
plugins: Merge alloc_tcg_plugin_context into plugin_gen_tb_start
We don't need to allocate plugin context at startup, we can wait until we actually use it. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'accel')
-rw-r--r--accel/tcg/plugin-gen.c30
1 files changed, 17 insertions, 13 deletions
diff --git a/accel/tcg/plugin-gen.c b/accel/tcg/plugin-gen.c
index b54494712a..54b08ffc9e 100644
--- a/accel/tcg/plugin-gen.c
+++ b/accel/tcg/plugin-gen.c
@@ -305,28 +305,32 @@ static void plugin_gen_inject(struct qemu_plugin_tb *plugin_tb)
bool plugin_gen_tb_start(CPUState *cpu, const DisasContextBase *db)
{
- bool ret = false;
+ struct qemu_plugin_tb *ptb;
- if (test_bit(QEMU_PLUGIN_EV_VCPU_TB_TRANS, cpu->plugin_state->event_mask)) {
- struct qemu_plugin_tb *ptb = tcg_ctx->plugin_tb;
+ if (!test_bit(QEMU_PLUGIN_EV_VCPU_TB_TRANS,
+ cpu->plugin_state->event_mask)) {
+ return false;
+ }
+
+ tcg_ctx->plugin_db = db;
+ tcg_ctx->plugin_insn = NULL;
+ ptb = tcg_ctx->plugin_tb;
- /* reset callbacks */
+ if (ptb) {
+ /* Reset callbacks */
if (ptb->cbs) {
g_array_set_size(ptb->cbs, 0);
}
ptb->n = 0;
-
- ret = true;
-
ptb->mem_helper = false;
-
- tcg_gen_plugin_cb(PLUGIN_GEN_FROM_TB);
+ } else {
+ ptb = g_new0(struct qemu_plugin_tb, 1);
+ tcg_ctx->plugin_tb = ptb;
+ ptb->insns = g_ptr_array_new();
}
- tcg_ctx->plugin_db = db;
- tcg_ctx->plugin_insn = NULL;
-
- return ret;
+ tcg_gen_plugin_cb(PLUGIN_GEN_FROM_TB);
+ return true;
}
void plugin_gen_insn_start(CPUState *cpu, const DisasContextBase *db)