mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-12-22 23:48:36 -07: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
|
|
@ -225,6 +225,17 @@ struct qemu_plugin_insn;
|
|||
/** struct qemu_plugin_scoreboard - Opaque handle for a scoreboard */
|
||||
struct qemu_plugin_scoreboard;
|
||||
|
||||
/**
|
||||
* typedef qemu_plugin_u64 - uint64_t member of an entry in a scoreboard
|
||||
*
|
||||
* This field allows to access a specific uint64_t member in one given entry,
|
||||
* located at a specified offset. Inline operations expect this as entry.
|
||||
*/
|
||||
typedef struct {
|
||||
struct qemu_plugin_scoreboard *score;
|
||||
size_t offset;
|
||||
} qemu_plugin_u64;
|
||||
|
||||
/**
|
||||
* enum qemu_plugin_cb_flags - type of callback
|
||||
*
|
||||
|
|
@ -784,4 +795,45 @@ QEMU_PLUGIN_API
|
|||
void *qemu_plugin_scoreboard_find(struct qemu_plugin_scoreboard *score,
|
||||
unsigned int vcpu_index);
|
||||
|
||||
/* Macros to define a qemu_plugin_u64 */
|
||||
#define qemu_plugin_scoreboard_u64(score) \
|
||||
(qemu_plugin_u64) {score, 0}
|
||||
#define qemu_plugin_scoreboard_u64_in_struct(score, type, member) \
|
||||
(qemu_plugin_u64) {score, offsetof(type, member)}
|
||||
|
||||
/**
|
||||
* qemu_plugin_u64_add() - add a value to a qemu_plugin_u64 for a given vcpu
|
||||
* @entry: entry to query
|
||||
* @vcpu_index: entry index
|
||||
* @added: value to add
|
||||
*/
|
||||
QEMU_PLUGIN_API
|
||||
void qemu_plugin_u64_add(qemu_plugin_u64 entry, unsigned int vcpu_index,
|
||||
uint64_t added);
|
||||
|
||||
/**
|
||||
* qemu_plugin_u64_get() - get value of a qemu_plugin_u64 for a given vcpu
|
||||
* @entry: entry to query
|
||||
* @vcpu_index: entry index
|
||||
*/
|
||||
QEMU_PLUGIN_API
|
||||
uint64_t qemu_plugin_u64_get(qemu_plugin_u64 entry, unsigned int vcpu_index);
|
||||
|
||||
/**
|
||||
* qemu_plugin_u64_set() - set value of a qemu_plugin_u64 for a given vcpu
|
||||
* @entry: entry to query
|
||||
* @vcpu_index: entry index
|
||||
* @val: new value
|
||||
*/
|
||||
QEMU_PLUGIN_API
|
||||
void qemu_plugin_u64_set(qemu_plugin_u64 entry, unsigned int vcpu_index,
|
||||
uint64_t val);
|
||||
|
||||
/**
|
||||
* qemu_plugin_u64_sum() - return sum of all vcpu entries in a scoreboard
|
||||
* @entry: entry to sum
|
||||
*/
|
||||
QEMU_PLUGIN_API
|
||||
uint64_t qemu_plugin_u64_sum(qemu_plugin_u64 entry);
|
||||
|
||||
#endif /* QEMU_QEMU_PLUGIN_H */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue