Alex Bennée <alex.ben...@linaro.org> writes: > Pierrick Bouvier <pierrick.bouv...@linaro.org> writes: > >> This series adds a new thread-safe API to declare inline operation >> inside plugins. As well, it removes the existing non thread-safe API, >> and migrates all existing plugins to use it. > > I've cherry-picked 3 and 4 into plugins/next so I can re-base the > registers work. I'll have a look at the rest of the series once I'm back > at my desk.
Actually belay that, I'm caught in a circular dependency because this is based on the registers series. I'll sort it out tomorrow. > >> >> Tested on Linux (user, system) for i386, x86_64 and aarch64. >> >> To give some context, this a long term series of work around plugins, >> with the goal to be able to do basic operations in a more performant and >> accurate way. This will mean to add more inline operations and >> conditional callbacks. >> >> One final target of this work is to implement a plugin that implements >> the icount=auto feature, and allow QEMU to run at a given "frequency" >> based on number of instructions executed, without QEMU needing to keep >> track of this. >> >> Another final target is to be able to detect control flow changes in an >> efficient and elegant way, by combining inline operation and conditional >> callbacks. >> >> v2 >> -- >> >> Implement scoreboard API (cpu local storage), so plugins don't have to deal >> with how many cpus are used. >> >> Since plugins have been modified again, I didn't transfer any reviewed-by on >> those commits. >> >> v3 >> -- >> >> - introduce qemu_plugin_num_vcpus (how many cpus were initialized) >> - fix order of plugin init/idle/resume callbacks >> - scoreboard: >> - renamed qemu_plugin_u64_t -> qemu_plugin_u64 >> - some functions rename for scoreboard api >> - qemu_plugin_u64 has only value based function (vs address before) >> - various cleanup thanks to review of previous series >> >> Based-on: 20240122145610.413836-1-alex.ben...@linaro.org >> >> Version number: 3 >> Branches: >> base: >> plugin_registers_v3_20240122145610.413836-1-alex.ben...@linaro.org >> topic: plugin_inline_per_vcpu >> >> To: qemu-devel@nongnu.org >> >> Pierrick Bouvier (17): >> plugins: remove previous n_vcpus functions from API >> plugins: add qemu_plugin_num_vcpus function >> plugins: fix order of init/idle/resume callback >> cpu: call plugin init hook asynchronously >> plugins: scoreboard API >> docs/devel: plugins can trigger a tb flush >> plugins: implement inline operation relative to cpu_index >> plugins: add inline operation per vcpu >> tests/plugin: add test plugin for inline operations >> tests/plugin/mem: migrate to new per_vcpu API >> tests/plugin/insn: migrate to new per_vcpu API >> tests/plugin/bb: migrate to new per_vcpu API >> contrib/plugins/hotblocks: migrate to new per_vcpu API >> contrib/plugins/howvec: migrate to new per_vcpu API >> plugins: remove non per_vcpu inline operation from API >> plugins: cleanup codepath for previous inline operation >> MAINTAINERS: Add myself as reviewer for TCG Plugins >> >> MAINTAINERS | 1 + >> docs/devel/multi-thread-tcg.rst | 1 + >> include/qemu/plugin.h | 6 ++ >> include/qemu/qemu-plugin.h | 151 ++++++++++++++++++++++++-------- >> plugins/plugin.h | 24 ++++-- >> accel/tcg/plugin-gen.c | 65 +++++++++++--- >> contrib/plugins/cache.c | 2 +- >> contrib/plugins/hotblocks.c | 50 ++++++----- >> contrib/plugins/howvec.c | 53 ++++++++---- >> hw/core/cpu-common.c | 9 +- >> plugins/api.c | 121 ++++++++++++++++---------- >> plugins/core.c | 104 +++++++++++++++++++--- >> tests/plugin/bb.c | 63 ++++++-------- >> tests/plugin/inline.c | 186 >> ++++++++++++++++++++++++++++++++++++++++ >> tests/plugin/insn.c | 106 +++++++++++------------ >> tests/plugin/mem.c | 40 +++++---- >> plugins/qemu-plugins.symbols | 16 ++-- >> tests/plugin/meson.build | 2 +- >> 18 files changed, 745 insertions(+), 255 deletions(-) >> >> Pierrick Bouvier (17): >> plugins: remove previous n_vcpus functions from API >> plugins: add qemu_plugin_num_vcpus function >> plugins: fix order of init/idle/resume callback >> cpu: call plugin init hook asynchronously >> plugins: scoreboard API >> docs/devel: plugins can trigger a tb flush >> plugins: implement inline operation relative to cpu_index >> plugins: add inline operation per vcpu >> tests/plugin: add test plugin for inline operations >> tests/plugin/mem: migrate to new per_vcpu API >> tests/plugin/insn: migrate to new per_vcpu API >> tests/plugin/bb: migrate to new per_vcpu API >> contrib/plugins/hotblocks: migrate to new per_vcpu API >> contrib/plugins/howvec: migrate to new per_vcpu API >> plugins: remove non per_vcpu inline operation from API >> plugins: cleanup codepath for previous inline operation >> MAINTAINERS: Add myself as reviewer for TCG Plugins >> >> MAINTAINERS | 1 + >> docs/devel/multi-thread-tcg.rst | 1 + >> include/qemu/plugin.h | 6 ++ >> include/qemu/qemu-plugin.h | 151 ++++++++++++++++++++------ >> plugins/plugin.h | 24 +++-- >> accel/tcg/plugin-gen.c | 65 +++++++++-- >> contrib/plugins/cache.c | 2 +- >> contrib/plugins/hotblocks.c | 50 +++++---- >> contrib/plugins/howvec.c | 53 ++++++--- >> hw/core/cpu-common.c | 9 +- >> plugins/api.c | 121 +++++++++++++-------- >> plugins/core.c | 104 ++++++++++++++++-- >> tests/plugin/bb.c | 63 +++++------ >> tests/plugin/inline.c | 186 ++++++++++++++++++++++++++++++++ >> tests/plugin/insn.c | 106 +++++++++--------- >> tests/plugin/mem.c | 40 ++++--- >> plugins/qemu-plugins.symbols | 16 ++- >> tests/plugin/meson.build | 2 +- >> 18 files changed, 745 insertions(+), 255 deletions(-) >> create mode 100644 tests/plugin/inline.c -- Alex Bennée Virtualisation Tech Lead @ Linaro