qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
To: Richard Henderson <richard.henderson@linaro.org>, qemu-devel@nongnu.org
Cc: alex.bennee@linaro.org
Subject: Re: [PATCH 22/22] plugins: Update the documentation block for plugin-gen.c
Date: Tue, 19 Mar 2024 16:56:43 +0400	[thread overview]
Message-ID: <78dc8b48-cf8f-470b-96ba-ea39b699a8ba@linaro.org> (raw)
In-Reply-To: <20240316015720.3661236-23-richard.henderson@linaro.org>

On 3/16/24 05:57, Richard Henderson wrote:
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>   accel/tcg/plugin-gen.c | 31 ++++---------------------------
>   1 file changed, 4 insertions(+), 27 deletions(-)
> 
> diff --git a/accel/tcg/plugin-gen.c b/accel/tcg/plugin-gen.c
> index fd52ea3987..c354825779 100644
> --- a/accel/tcg/plugin-gen.c
> +++ b/accel/tcg/plugin-gen.c
> @@ -14,33 +14,10 @@
>    * Injecting the desired instrumentation could be done with a second
>    * translation pass that combined the instrumentation requests, but that
>    * would be ugly and inefficient since we would decode the guest code twice.
> - * Instead, during TB translation we add "empty" instrumentation calls for all
> - * possible instrumentation events, and then once we collect the instrumentation
> - * requests from plugins, we either "fill in" those empty events or remove them
> - * if they have no requests.
> - *
> - * When "filling in" an event we first copy the empty callback's TCG ops. This
> - * might seem unnecessary, but it is done to support an arbitrary number
> - * of callbacks per event. Take for example a regular instruction callback.
> - * We first generate a callback to an empty helper function. Then, if two
> - * plugins register one callback each for this instruction, we make two copies
> - * of the TCG ops generated for the empty callback, substituting the function
> - * pointer that points to the empty helper function with the plugins' desired
> - * callback functions. After that we remove the empty callback's ops.
> - *
> - * Note that the location in TCGOp.args[] of the pointer to a helper function
> - * varies across different guest and host architectures. Instead of duplicating
> - * the logic that figures this out, we rely on the fact that the empty
> - * callbacks point to empty functions that are unique pointers in the program.
> - * Thus, to find the right location we just have to look for a match in
> - * TCGOp.args[]. This is the main reason why we first copy an empty callback's
> - * TCG ops and then fill them in; regardless of whether we have one or many
> - * callbacks for that event, the logic to add all of them is the same.
> - *
> - * When generating more than one callback per event, we make a small
> - * optimization to avoid generating redundant operations. For instance, for the
> - * second and all subsequent callbacks of an event, we do not need to reload the
> - * CPU's index into a TCG temp, since the first callback did it already.
> + * Instead, during TB translation we add "plugin_cb" marker opcodes
> + * for all possible instrumentation events, and then once we collect the
> + * instrumentation requests from plugins, we generate code for those markers
> + * or remove them if they have no requests.
>    */
>   #include "qemu/osdep.h"
>   #include "qemu/plugin.h"

Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>


  reply	other threads:[~2024-03-19 12:57 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-16  1:56 [PATCH 00/22] plugins: Rewrite plugin code generation Richard Henderson
2024-03-16  1:56 ` [PATCH 01/22] tcg: Add TCGContext.emit_before_op Richard Henderson
2024-03-19 10:55   ` Pierrick Bouvier
2024-03-19 14:04   ` Alex Bennée
2024-03-19 21:23     ` Richard Henderson
2024-03-16  1:57 ` [PATCH 02/22] tcg: Make tcg/helper-info.h self-contained Richard Henderson
2024-03-18 10:01   ` Alex Bennée
2024-03-18 10:03   ` Alex Bennée
2024-03-16  1:57 ` [PATCH 03/22] tcg: Pass function pointer to tcg_gen_call* Richard Henderson
2024-03-18 10:02   ` Alex Bennée
2024-03-16  1:57 ` [PATCH 04/22] plugins: Zero new qemu_plugin_dyn_cb entries Richard Henderson
2024-03-18 10:03   ` Alex Bennée
2024-03-16  1:57 ` [PATCH 05/22] plugins: Move function pointer in qemu_plugin_dyn_cb Richard Henderson
2024-03-18 10:04   ` Alex Bennée
2024-03-19 13:18   ` Pierrick Bouvier
2024-03-19 21:30     ` Richard Henderson
2024-03-20  5:31       ` Pierrick Bouvier
2024-03-16  1:57 ` [PATCH 06/22] plugins: Create TCGHelperInfo for all out-of-line callbacks Richard Henderson
2024-03-19 13:12   ` Pierrick Bouvier
2024-03-19 19:51     ` Richard Henderson
2024-03-20  5:22       ` Pierrick Bouvier
2024-03-16  1:57 ` [PATCH 07/22] plugins: Use emit_before_op for PLUGIN_GEN_AFTER_INSN Richard Henderson
2024-03-19 13:32   ` Pierrick Bouvier
2024-03-19 19:56     ` Richard Henderson
2024-03-20  5:36       ` Pierrick Bouvier
2024-03-16  1:57 ` [PATCH 08/22] plugins: Use emit_before_op for PLUGIN_GEN_FROM_TB Richard Henderson
2024-03-19 13:22   ` Pierrick Bouvier
2024-03-19 19:57     ` Richard Henderson
2024-03-16  1:57 ` [PATCH 09/22] plugins: Add PLUGIN_GEN_AFTER_TB Richard Henderson
2024-03-19 13:33   ` Pierrick Bouvier
2024-03-16  1:57 ` [PATCH 10/22] plugins: Use emit_before_op for PLUGIN_GEN_FROM_INSN Richard Henderson
2024-03-19 13:34   ` Pierrick Bouvier
2024-03-16  1:57 ` [PATCH 11/22] plugins: Use emit_before_op for PLUGIN_GEN_FROM_MEM Richard Henderson
2024-03-19 13:35   ` Pierrick Bouvier
2024-03-16  1:57 ` [PATCH 12/22] plugins: Remove plugin helpers Richard Henderson
2024-03-18 16:38   ` Alex Bennée
2024-03-16  1:57 ` [PATCH 13/22] tcg: Remove TCG_CALL_PLUGIN Richard Henderson
2024-03-19 13:06   ` Pierrick Bouvier
2024-03-16  1:57 ` [PATCH 14/22] tcg: Remove INDEX_op_plugin_cb_{start,end} Richard Henderson
2024-03-19 13:04   ` Pierrick Bouvier
2024-03-16  1:57 ` [PATCH 15/22] plugins: Simplify callback queues Richard Henderson
2024-03-19 13:28   ` Pierrick Bouvier
2024-03-16  1:57 ` [PATCH 16/22] plugins: Introduce PLUGIN_CB_MEM_REGULAR Richard Henderson
2024-03-19 13:28   ` Pierrick Bouvier
2024-03-16  1:57 ` [PATCH 17/22] plugins: Replace pr_ops with a proper debug dump flag Richard Henderson
2024-03-19 12:59   ` Pierrick Bouvier
2024-03-16  1:57 ` [PATCH 18/22] plugins: Split out common cb expanders Richard Henderson
2024-03-19 13:29   ` Pierrick Bouvier
2024-03-16  1:57 ` [PATCH 19/22] plugins: Merge qemu_plugin_tb_insn_get to plugin-gen.c Richard Henderson
2024-03-19 13:30   ` Pierrick Bouvier
2024-03-16  1:57 ` [PATCH 20/22] plugins: Move qemu_plugin_insn_cleanup_fn to tcg.c Richard Henderson
2024-03-18 17:44   ` Alex Bennée
2024-03-16  1:57 ` [PATCH 21/22] plugins: Inline plugin_gen_empty_callback Richard Henderson
2024-03-18 19:09   ` Alex Bennée
2024-03-16  1:57 ` [PATCH 22/22] plugins: Update the documentation block for plugin-gen.c Richard Henderson
2024-03-19 12:56   ` Pierrick Bouvier [this message]
2024-03-19 13:38 ` [PATCH 00/22] plugins: Rewrite plugin code generation Pierrick Bouvier

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=78dc8b48-cf8f-470b-96ba-ea39b699a8ba@linaro.org \
    --to=pierrick.bouvier@linaro.org \
    --cc=alex.bennee@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /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).