mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-26 20:03:54 -06:00
plugins: define qemu_plugin_u64
Additionally to the scoreboard, we define a qemu_plugin_u64, which is a simple struct holding a pointer to a scoreboard, and a given offset. This allows to have a scoreboard containing structs, without having to bring offset to operate on a specific field. Since most of the plugins are simply collecting a sum of per-cpu values, qemu_plugin_u64 directly support this operation as well. All inline operations defined later will use a qemu_plugin_u64 as input. New functions: - qemu_plugin_u64_add - qemu_plugin_u64_get - qemu_plugin_u64_set - qemu_plugin_u64_sum New macros: - qemu_plugin_scoreboard_u64 - qemu_plugin_scoreboard_u64_in_struct Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Message-Id: <20240304130036.124418-3-pierrick.bouvier@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20240305121005.3528075-16-alex.bennee@linaro.org>
This commit is contained in:
parent
a3c2cf0b89
commit
8042e2eadf
3 changed files with 90 additions and 0 deletions
|
@ -484,3 +484,37 @@ void *qemu_plugin_scoreboard_find(struct qemu_plugin_scoreboard *score,
|
|||
char *base_ptr = score->data->data;
|
||||
return base_ptr + vcpu_index * g_array_get_element_size(score->data);
|
||||
}
|
||||
|
||||
static uint64_t *plugin_u64_address(qemu_plugin_u64 entry,
|
||||
unsigned int vcpu_index)
|
||||
{
|
||||
char *ptr = qemu_plugin_scoreboard_find(entry.score, vcpu_index);
|
||||
return (uint64_t *)(ptr + entry.offset);
|
||||
}
|
||||
|
||||
void qemu_plugin_u64_add(qemu_plugin_u64 entry, unsigned int vcpu_index,
|
||||
uint64_t added)
|
||||
{
|
||||
*plugin_u64_address(entry, vcpu_index) += added;
|
||||
}
|
||||
|
||||
uint64_t qemu_plugin_u64_get(qemu_plugin_u64 entry,
|
||||
unsigned int vcpu_index)
|
||||
{
|
||||
return *plugin_u64_address(entry, vcpu_index);
|
||||
}
|
||||
|
||||
void qemu_plugin_u64_set(qemu_plugin_u64 entry, unsigned int vcpu_index,
|
||||
uint64_t val)
|
||||
{
|
||||
*plugin_u64_address(entry, vcpu_index) = val;
|
||||
}
|
||||
|
||||
uint64_t qemu_plugin_u64_sum(qemu_plugin_u64 entry)
|
||||
{
|
||||
uint64_t total = 0;
|
||||
for (int i = 0, n = qemu_plugin_num_vcpus(); i < n; ++i) {
|
||||
total += qemu_plugin_u64_get(entry, i);
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue