[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] plugins: add two events for cpu_restore_state_from_tb() and
From: |
Alex Bennée |
Subject: |
Re: [PATCH] plugins: add two events for cpu_restore_state_from_tb() and cpu_io_recompile() |
Date: |
Tue, 03 Sep 2024 18:17:46 +0100 |
User-agent: |
mu4e 1.12.6; emacs 29.4 |
Richard Henderson <richard.henderson@linaro.org> writes:
> On 9/2/24 10:52, Alex Bennée wrote:
>> Pierrick Bouvier <pierrick.bouvier@linaro.org> writes:
>>
>>> Hi Xingran,
>>>
>>> On 9/2/24 03:42, Alex Bennée wrote:
>>>> Xingran Wang <wangxingran123456@outlook.com> writes:
>>>>
>>>>> Currently, the instruction count obtained by plugins using the translation
>>>>> block execution callback is larger than the actual value. Adding callbacks
>>>>> in cpu_restore_state_from_tb() and cpu_io_recompile() allows plugins to
>>>>> correct the instruction count when exiting a translation block
>>>>> mid-execution, properly subtracting the excess unexecuted
>>>>> instructions.
>>>> This smells like exposing two much of the TCG internals to the
>>>> plugin
>>>> mechanism. You can already detect when we don't reach the end of a block
>>>> of instructions by instrumentation as I did in:
>>>>
>>>
>>> I agree that this is definitely a QEMU implementation "detail", and
>>> should not be a concern for end users.
>>>
<snip>
>> /**
>> * qemu_plugin_register_vcpu_tb_exec_end_cb() - register execution
>> callback at end of TB
>> * @tb: the opaque qemu_plugin_tb handle for the translation
>> * @cb: callback function
>> * @flags: does the plugin read or write the CPU's registers?
>> * @userdata: any plugin data to pass to the @cb?
>> *
>> * The @cb function is called every time a translated unit executes.
>> */
>> QEMU_PLUGIN_API
>> void qemu_plugin_register_vcpu_tb_exec_end_cb(struct qemu_plugin_tb *tb,
>>
>> qemu_plugin_vcpu_tb_end_cb_t cb,
>> enum qemu_plugin_cb_flags
>> flags,
>> void *userdata);
>> I think the tricky bit would be getting TCG to emit the callback
>> code
>> for the last instruction before the
>> tcg_gen_exit_tb/tcg_gen_lookup_and_goto_ptr bits but after whatever else
>> it has done to execute the instruction.
>> I don't think we could easily support inline ops at tb end though.
>> Richard,
>> What do you think?
> I think this will miss all exceptions raised in the middle of the block.
> I don't think it will be reliable at all.
Ahh yes - I guess we can't fixup as we go through cpu_loop_exit() and
the restore code is only called from helpers. Oh well I think we can
make do with what we currently have.
>
>
> r~
--
Alex Bennée
Virtualisation Tech Lead @ Linaro