mirror of https://github.com/xemu-project/xemu.git
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>
This commit is contained in:
parent
e763953a24
commit
34e5e1dde5
|
@ -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 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)) {
|
if (!test_bit(QEMU_PLUGIN_EV_VCPU_TB_TRANS,
|
||||||
struct qemu_plugin_tb *ptb = tcg_ctx->plugin_tb;
|
cpu->plugin_state->event_mask)) {
|
||||||
|
return false;
|
||||||
/* 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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tcg_ctx->plugin_db = db;
|
tcg_ctx->plugin_db = db;
|
||||||
tcg_ctx->plugin_insn = NULL;
|
tcg_ctx->plugin_insn = NULL;
|
||||||
|
ptb = tcg_ctx->plugin_tb;
|
||||||
|
|
||||||
return ret;
|
if (ptb) {
|
||||||
|
/* Reset callbacks */
|
||||||
|
if (ptb->cbs) {
|
||||||
|
g_array_set_size(ptb->cbs, 0);
|
||||||
|
}
|
||||||
|
ptb->n = 0;
|
||||||
|
ptb->mem_helper = false;
|
||||||
|
} else {
|
||||||
|
ptb = g_new0(struct qemu_plugin_tb, 1);
|
||||||
|
tcg_ctx->plugin_tb = ptb;
|
||||||
|
ptb->insns = g_ptr_array_new();
|
||||||
|
}
|
||||||
|
|
||||||
|
tcg_gen_plugin_cb(PLUGIN_GEN_FROM_TB);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void plugin_gen_insn_start(CPUState *cpu, const DisasContextBase *db)
|
void plugin_gen_insn_start(CPUState *cpu, const DisasContextBase *db)
|
||||||
|
|
11
tcg/tcg.c
11
tcg/tcg.c
|
@ -761,14 +761,6 @@ QEMU_BUILD_BUG_ON((int)(offsetof(CPUNegativeOffsetState, tlb.f[0]) -
|
||||||
< MIN_TLB_MASK_TABLE_OFS);
|
< MIN_TLB_MASK_TABLE_OFS);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void alloc_tcg_plugin_context(TCGContext *s)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_PLUGIN
|
|
||||||
s->plugin_tb = g_new0(struct qemu_plugin_tb, 1);
|
|
||||||
s->plugin_tb->insns = g_ptr_array_new();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* All TCG threads except the parent (i.e. the one that called tcg_context_init
|
* All TCG threads except the parent (i.e. the one that called tcg_context_init
|
||||||
* and registered the target's TCG globals) must register with this function
|
* and registered the target's TCG globals) must register with this function
|
||||||
|
@ -813,7 +805,6 @@ void tcg_register_thread(void)
|
||||||
qatomic_set(&tcg_ctxs[n], s);
|
qatomic_set(&tcg_ctxs[n], s);
|
||||||
|
|
||||||
if (n > 0) {
|
if (n > 0) {
|
||||||
alloc_tcg_plugin_context(s);
|
|
||||||
tcg_region_initial_alloc(s);
|
tcg_region_initial_alloc(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1360,8 +1351,6 @@ static void tcg_context_init(unsigned max_cpus)
|
||||||
indirect_reg_alloc_order[i] = tcg_target_reg_alloc_order[i];
|
indirect_reg_alloc_order[i] = tcg_target_reg_alloc_order[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
alloc_tcg_plugin_context(s);
|
|
||||||
|
|
||||||
tcg_ctx = s;
|
tcg_ctx = s;
|
||||||
/*
|
/*
|
||||||
* In user-mode we simply share the init context among threads, since we
|
* In user-mode we simply share the init context among threads, since we
|
||||||
|
|
Loading…
Reference in New Issue