diff options
author | Richard Henderson <richard.henderson@linaro.org> | 2024-03-14 14:09:33 -1000 |
---|---|---|
committer | Richard Henderson <richard.henderson@linaro.org> | 2024-04-30 16:12:05 -0700 |
commit | aff56de576c949880d674d37b82bdc97841107fb (patch) | |
tree | 4f1feaef020cbec695caf0c79d5f079c736cc8fe | |
parent | 25875fe92eb55e905655dcdf5f06f89ef2c1f404 (diff) | |
download | qemu-aff56de576c949880d674d37b82bdc97841107fb.zip qemu-aff56de576c949880d674d37b82bdc97841107fb.tar.gz qemu-aff56de576c949880d674d37b82bdc97841107fb.tar.bz2 |
plugins: Move function pointer in qemu_plugin_dyn_cb
The out-of-line function pointer is mutually exclusive
with inline expansion, so move it into the union.
Wrap the pointer in a structure named 'regular' to match
PLUGIN_CB_REGULAR.
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
-rw-r--r-- | accel/tcg/plugin-gen.c | 4 | ||||
-rw-r--r-- | include/qemu/plugin.h | 4 | ||||
-rw-r--r-- | plugins/core.c | 8 |
3 files changed, 9 insertions, 7 deletions
diff --git a/accel/tcg/plugin-gen.c b/accel/tcg/plugin-gen.c index cd78ef9..4b48894 100644 --- a/accel/tcg/plugin-gen.c +++ b/accel/tcg/plugin-gen.c @@ -425,7 +425,7 @@ static TCGOp *append_udata_cb(const struct qemu_plugin_dyn_cb *cb, } /* call */ - op = copy_call(&begin_op, op, cb->f.vcpu_udata, cb_idx); + op = copy_call(&begin_op, op, cb->regular.f.vcpu_udata, cb_idx); return op; } @@ -473,7 +473,7 @@ static TCGOp *append_mem_cb(const struct qemu_plugin_dyn_cb *cb, if (type == PLUGIN_GEN_CB_MEM) { /* call */ - op = copy_call(&begin_op, op, cb->f.vcpu_udata, cb_idx); + op = copy_call(&begin_op, op, cb->regular.f.vcpu_udata, cb_idx); } return op; diff --git a/include/qemu/plugin.h b/include/qemu/plugin.h index 41db748..5676ab5 100644 --- a/include/qemu/plugin.h +++ b/include/qemu/plugin.h @@ -85,7 +85,6 @@ enum plugin_dyn_cb_subtype { * instance of a callback to be called upon the execution of a particular TB. */ struct qemu_plugin_dyn_cb { - union qemu_plugin_cb_sig f; void *userp; enum plugin_dyn_cb_subtype type; /* @rw applies to mem callbacks only (both regular and inline) */ @@ -93,6 +92,9 @@ struct qemu_plugin_dyn_cb { /* fields specific to each dyn_cb type go here */ union { struct { + union qemu_plugin_cb_sig f; + } regular; + struct { qemu_plugin_u64 entry; enum qemu_plugin_op op; uint64_t imm; diff --git a/plugins/core.c b/plugins/core.c index 4487cb7..837c373 100644 --- a/plugins/core.c +++ b/plugins/core.c @@ -342,7 +342,7 @@ void plugin_register_dyn_cb__udata(GArray **arr, dyn_cb->userp = udata; /* Note flags are discarded as unused. */ - dyn_cb->f.vcpu_udata = cb; + dyn_cb->regular.f.vcpu_udata = cb; dyn_cb->type = PLUGIN_CB_REGULAR; } @@ -359,7 +359,7 @@ void plugin_register_vcpu_mem_cb(GArray **arr, /* Note flags are discarded as unused. */ dyn_cb->type = PLUGIN_CB_REGULAR; dyn_cb->rw = rw; - dyn_cb->f.generic = cb; + dyn_cb->regular.f.vcpu_mem = cb; } /* @@ -511,8 +511,8 @@ void qemu_plugin_vcpu_mem_cb(CPUState *cpu, uint64_t vaddr, } switch (cb->type) { case PLUGIN_CB_REGULAR: - cb->f.vcpu_mem(cpu->cpu_index, make_plugin_meminfo(oi, rw), - vaddr, cb->userp); + cb->regular.f.vcpu_mem(cpu->cpu_index, make_plugin_meminfo(oi, rw), + vaddr, cb->userp); break; case PLUGIN_CB_INLINE: exec_inline_op(cb, cpu->cpu_index); |