Pierrick Bouvier and Alex Bennée
a3c2cf0b89
plugins: scoreboard API
...
We introduce a cpu local storage, automatically managed (and extended)
by QEMU itself. Plugin allocate a scoreboard, and don't have to deal
with how many cpus are launched.
This API will be used by new inline functions but callbacks can benefit
from this as well. This way, they can operate without a global lock for
simple operations.
At any point during execution, any scoreboard will be dimensioned with
at least qemu_plugin_num_vcpus entries.
New functions:
- qemu_plugin_scoreboard_find
- qemu_plugin_scoreboard_free
- qemu_plugin_scoreboard_new
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-Id: <20240304130036.124418-2-pierrick.bouvier@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240305121005.3528075-15-alex.bennee@linaro.org >
2024-03-06 12:35:19 +00:00
Ilya Leoshkevich and Alex Bennée
e4e5cb4a54
{linux,bsd}-user: Introduce get_task_state()
...
A CPU's TaskState is stored in the CPUState's void *opaque field,
accessing which is somewhat awkward due to having to use a cast.
Introduce a wrapper and use it everywhere.
Suggested-by: Alex Bennée <alex.bennee@linaro.org >
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com >
Reviewed-by: Warner Losh <imp@bsdimp.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20240219141628.246823-3-iii@linux.ibm.com >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240305121005.3528075-4-alex.bennee@linaro.org >
2024-03-06 12:35:19 +00:00
Alex Bennée
8df5e27cf7
plugins: add an API to read registers
...
We can only request a list of registers once the vCPU has been
initialised so the user needs to use either call the get function on
vCPU initialisation or during the translation phase.
We don't expose the reg number to the plugin instead hiding it behind
an opaque handle. For now this is just the gdb_regnum encapsulated in
an anonymous GPOINTER but in future as we add more state for plugins
to track we can expand it.
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1706
Based-on: <20231025093128.33116-18-akihiko.odaki@daynix.com >
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240227144335.1196131-24-alex.bennee@linaro.org >
2024-02-28 09:11:42 +00:00
Alex Bennée
c006147122
plugins: create CPUPluginState and migrate plugin_mask
...
As we expand the per-vCPU data for plugins we don't want to pollute
CPUState. For now this just moves the plugin_mask (renamed to
event_mask) as the memory callbacks are accessed directly by TCG
generated code.
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240227144335.1196131-23-alex.bennee@linaro.org >
2024-02-28 09:11:42 +00:00
Akihiko Odaki and Alex Bennée
33a277fec0
plugins: Use different helpers when reading registers
...
This avoids optimizations incompatible when reading registers.
Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com >
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-Id: <20231213-gdb-v17-12-777047380591@daynix.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240227144335.1196131-21-alex.bennee@linaro.org >
2024-02-28 09:11:42 +00:00
Pierrick Bouvier and Alex Bennée
c490e681ec
plugins: fix order of init/idle/resume callback
...
We found that vcpu_init_hook was called *after* idle callback.
vcpu_init is called from cpu_realize_fn, while idle/resume cb are called
from qemu_wait_io_event (in vcpu thread).
This change ensures we only call idle and resume cb only once a plugin
was init for a given vcpu.
Next change in the series will run vcpu_init asynchronously, which will
make it run *after* resume callback as well. So we fix this now.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-Id: <20240213094009.150349-4-pierrick.bouvier@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240227144335.1196131-18-alex.bennee@linaro.org >
2024-02-28 09:11:38 +00:00
Pierrick Bouvier and Alex Bennée
4a448b148c
plugins: add qemu_plugin_num_vcpus function
...
We now keep track of how many vcpus were started. This way, a plugin can
easily query number of any vcpus at any point of execution, which
unifies user and system mode workflows.
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20240213094009.150349-3-pierrick.bouvier@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240227144335.1196131-17-alex.bennee@linaro.org >
2024-02-28 09:11:36 +00:00
Pierrick Bouvier and Alex Bennée
926e146eff
plugins: remove previous n_vcpus functions from API
...
This information is already accessible using qemu_info_t during plugin
install.
We will introduce another function (qemu_plugin_num_vcpus) which
represent how many cpus were enabled, by tracking new cpu indexes.
It's a breaking change, so we bump API version.
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20240213094009.150349-2-pierrick.bouvier@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240227144335.1196131-16-alex.bennee@linaro.org >
2024-02-28 09:11:34 +00:00
Peter Maydell and Michael Tokarev
493bc2dbc1
misc: Clean up includes
...
This commit was created with scripts/clean-includes:
./scripts/clean-includes --git misc net/af-xdp.c plugins/*.c audio/pwaudio.c util/userfaultfd.c
All .c should include qemu/osdep.h first. The script performs three
related cleanups:
* Ensure .c files include qemu/osdep.h first.
* Including it in a .h is redundant, since the .c already includes
it. Drop such inclusions.
* Likewise, including headers qemu/osdep.h includes is redundant.
Drop these, too.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org >
Reviewed-by: Zhao Liu <zhao1.liu@intel.com >
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru >
2024-01-30 21:20:20 +03:00
Paolo Bonzini
d0cda6f461
configure, meson: rename targetos to host_os
...
This variable is about the host OS, not the target. It is used a lot
more since the Meson conversion, but the original sin dates back to 2003.
Time to fix it.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com >
2023-12-31 09:11:29 +01:00
Greg Manning and Alex Bennée
4789f9d3a1
plugins: fix win plugin tests on cross compile
...
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1972
Cross compile gcc is more picky about argument order than msys. Changed
the meson command to take the (now renamed) libqemu_plugin_api.a as a
lib, rather than an object. This puts it in the right place on both
native and cross compile gcc commands
Reenable plugins on crossbuilds
Signed-off-by: Greg Manning <gmanning@rapitasystems.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Message-Id: <20231109124326.21106-2-gmanning@rapitasystems.com >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20231120150833.2552739-5-alex.bennee@linaro.org >
2023-11-23 14:10:04 +00:00
Greg Manning and Alex Bennée
330fe3b03f
plugins: make test/example plugins work on windows
...
Generate a qemu_plugin_api.lib delay import lib on windows, for
windows qemu plugins to link against.
Implement an example dll load fail hook to link up the API functions
correctly when a plugin is loaded on windows.
Update the build scripts for the test and example plugins to use these
things.
Signed-off-by: Greg Manning <gmanning@rapitasystems.com >
Acked-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20231102172053.17692-3-gmanning@rapitasystems.com >
[AJB: use find_program for dlltool, s/Windows/windows/]
Cc: Paolo Bonzini <pbonzini@redhat.com >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20231106185112.2755262-15-alex.bennee@linaro.org >
2023-11-08 15:15:23 +00:00
Philippe Mathieu-Daudé
f4f826c0e0
accel/tcg: Declare tcg_flush_jmp_cache() in 'exec/tb-flush.h'
...
"exec/cpu-common.h" is meant to contain the declarations
related to CPU usable with any accelerator / target
combination.
tcg_flush_jmp_cache() is specific to TCG, so restrict its
declaration by moving it to "exec/tb-flush.h".
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Reviewed-by: Anton Johansson <anjo@rev.ng >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230918104153.24433-2-philmd@linaro.org >
2023-11-07 12:13:27 +01:00
Akihiko Odaki and Alex Bennée
fb13735ab4
plugins: Check if vCPU is realized
...
The created member of CPUState tells if the vCPU thread is started, and
will be always false for the user space emulation that manages threads
independently. Use the realized member of DeviceState, which is valid
for both of the system and user space emulation.
Fixes: 54cb65d858 ("plugin: add core code")
Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com >
Message-Id: <20230912224107.29669-4-akihiko.odaki@daynix.com >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20231009164104.369749-11-alex.bennee@linaro.org >
2023-10-11 08:46:33 +01:00
Philippe Mathieu-Daudé and Markus Armbruster
82f3346ff4
plugins/loader: Clean up global variable shadowing
...
Fix:
include/qemu/plugin.h:245:54: error: declaration shadows a variable in the global scope [-Werror,-Wshadow]
static inline void qemu_plugin_opt_parse(const char *optarg,
^
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/getopt.h:77:14: note: previous declaration is here
extern char *optarg; /* getopt(3) external variables */
^
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Message-ID: <20231004120019.93101-6-philmd@linaro.org >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Markus Armbruster <armbru@redhat.com >
2023-10-06 13:27:48 +02:00
Richard Henderson
405c02d85d
plugin: Simplify struct qemu_plugin_hwaddr
...
Rather than saving MemoryRegionSection and offset,
save phys_addr and MemoryRegion. This matches up
much closer with the plugin api.
Reviewed-by: Alex Bennée <alex.bennee@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-16 14:57:15 +00:00
Paolo Bonzini
2c13c57441
configure, meson: move --enable-plugins to meson
...
While the option still needs to be parsed in the configure script
(it's needed by tests/tcg, and also to decide about recursing
into contrib/plugins), passing it to Meson can be done with -D
instead of using config-host.mak.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com >
2023-09-07 13:32:37 +02:00
Philippe Mathieu-Daudé and Richard Henderson
69a305eff4
plugins: Remove unused 'exec/helper-proto.h' header
...
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230611085846.21415-2-philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-06-20 10:01:30 +02:00
Richard Henderson and Alex Bennée
507271d468
include/qemu/plugin: Inline qemu_plugin_disable_mem_helpers
...
Now that we've broken the include loop with cpu.h,
we can bring this inline.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Message-Id: <20230310195252.210956-8-richard.henderson@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20230315174331.2959-18-alex.bennee@linaro.org >
Reviewed-by: Emilio Cota <cota@braap.org >
2023-03-22 15:06:57 +00:00
Alex Bennée
548c96095d
includes: move tb_flush into its own header
...
This aids subsystems (like gdbstub) that want to trigger a flush
without pulling target specific headers.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20230302190846.2593720-8-alex.bennee@linaro.org >
Message-Id: <20230303025805.625589-8-richard.henderson@linaro.org >
2023-03-07 17:06:33 +00:00
Richard Henderson and Alex Bennée
f45549233f
plugins: Iterate on cb_lists in qemu_plugin_user_exit
...
Rather than iterate over all plugins for all events,
iterate over plugins that have registered a given event.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230117035701.168514-4-richard.henderson@linaro.org >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20230124180127.1881110-36-alex.bennee@linaro.org >
2023-02-02 11:48:20 +00:00
Emilio Cota and Alex Bennée
2bbbc1be8d
plugins: make qemu_plugin_user_exit's locking order consistent with fork_start's
...
To fix potential deadlocks as reported by tsan.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Emilio Cota <cota@braap.org >
Message-Id: <20230111151628.320011-6-cota@braap.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20230124180127.1881110-31-alex.bennee@linaro.org >
2023-02-02 11:48:20 +00:00
Alex Bennée
f7e15affa8
plugins: add [pre|post]fork helpers to linux-user
...
Special care needs to be taken in ensuring locks are in a consistent
state across fork events. Add helpers so the plugin system can ensure
that.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Fixes: https://gitlab.com/qemu-project/qemu/-/issues/358
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com >
Tested-by: Daniel P. Berrangé <berrange@redhat.com >
Message-Id: <20221004115221.2174499-1-alex.bennee@linaro.org >
2022-10-06 11:53:41 +01:00
Richard Henderson and Alex Bennée
5413c37f3b
plugins: Assert mmu_idx in range before use in qemu_plugin_get_hwaddr
...
Coverity reports out-of-bound accesses here. This should be a
false positive due to how the index is decoded from MemOpIdx.
Fixes: Coverity CID 1487201
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Damien Hedde <damien.hedde@greensocs.com >
Message-Id: <20220401190233.329360-1-richard.henderson@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org >
Message-Id: <20220929114231.583801-37-alex.bennee@linaro.org >
2022-10-06 11:53:40 +01:00
Richard Henderson
a976a99a29
include/hw/core: Create struct CPUJumpCache
...
Wrap the bare TranslationBlock pointer into a structure.
Reviewed-by: Alex Bennée <alex.bennee@linaro.org >
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2022-10-04 12:13:12 -07:00