* Boolean statistics for KVM

* Fix build on Haiku
 -----BEGIN PGP SIGNATURE-----
 
 iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmLWejIUHHBib256aW5p
 QHJlZGhhdC5jb20ACgkQv/vSX3jHroOrhggArpe2oZHD0Bi+toGOu4wg0zq9PKZJ
 Mj8v2hjPHbVU0yj1vXbO4skm6OggcH1JgktNZb8vd5QJBiCZorSIR2FPyuTk677U
 tHrOyzw/r+zPk43bEb/r/O4uGCFmlQUYiesayUKViJVqcF3sUGvBS4dMBKiGnPi7
 hyVLelnXqotcQYsURAXVYuVChDVMZs8ACa7vP9WKGEYWEkVdQRSlk9VMmssan0dD
 Ly+Ikw0FPENJYkNHT8+tM6VYv+Fpsi+PBcijUKRyfsfU5qmPm53rZKEAIhw0jCCV
 PsEZhzvAdU+frfOscuYkaUUgCYxy7dnXm90W7uMpLJYMECJgVuYoL4IKNQ==
 =AFZi
 -----END PGP SIGNATURE-----

Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging

* Boolean statistics for KVM
* Fix build on Haiku

# gpg: Signature made Tue 19 Jul 2022 10:32:34 BST
# gpg:                using RSA key F13338574B662389866C7682BFFBD25F78C7AE83
# gpg:                issuer "pbonzini@redhat.com"
# gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full]
# gpg:                 aka "Paolo Bonzini <pbonzini@redhat.com>" [full]
# Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4  E2F7 7E15 100C CD36 69B1
#      Subkey fingerprint: F133 3857 4B66 2389 866C  7682 BFFB D25F 78C7 AE83

* tag 'for-upstream' of https://gitlab.com/bonzini/qemu:
  util: Fix broken build on Haiku
  kvm: add support for boolean statistics
  monitor: add support for boolean statistics

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2022-07-21 11:13:01 +01:00
commit 5288bee45f
4 changed files with 15 additions and 2 deletions

View file

@ -3769,6 +3769,7 @@ static StatsList *add_kvmstat_entry(struct kvm_stats_desc *pdesc,
case KVM_STATS_UNIT_BYTES: case KVM_STATS_UNIT_BYTES:
case KVM_STATS_UNIT_CYCLES: case KVM_STATS_UNIT_CYCLES:
case KVM_STATS_UNIT_SECONDS: case KVM_STATS_UNIT_SECONDS:
case KVM_STATS_UNIT_BOOLEAN:
break; break;
default: default:
return stats_list; return stats_list;
@ -3787,7 +3788,10 @@ static StatsList *add_kvmstat_entry(struct kvm_stats_desc *pdesc,
stats->name = g_strdup(pdesc->name); stats->name = g_strdup(pdesc->name);
stats->value = g_new0(StatsValue, 1);; stats->value = g_new0(StatsValue, 1);;
if (pdesc->size == 1) { if ((pdesc->flags & KVM_STATS_UNIT_MASK) == KVM_STATS_UNIT_BOOLEAN) {
stats->value->u.boolean = *stats_data;
stats->value->type = QTYPE_QBOOL;
} else if (pdesc->size == 1) {
stats->value->u.scalar = *stats_data; stats->value->u.scalar = *stats_data;
stats->value->type = QTYPE_QNUM; stats->value->type = QTYPE_QNUM;
} else { } else {
@ -3835,6 +3839,10 @@ static StatsSchemaValueList *add_kvmschema_entry(struct kvm_stats_desc *pdesc,
switch (pdesc->flags & KVM_STATS_UNIT_MASK) { switch (pdesc->flags & KVM_STATS_UNIT_MASK) {
case KVM_STATS_UNIT_NONE: case KVM_STATS_UNIT_NONE:
break; break;
case KVM_STATS_UNIT_BOOLEAN:
schema_entry->value->has_unit = true;
schema_entry->value->unit = STATS_UNIT_BOOLEAN;
break;
case KVM_STATS_UNIT_BYTES: case KVM_STATS_UNIT_BYTES:
schema_entry->value->has_unit = true; schema_entry->value->has_unit = true;
schema_entry->value->unit = STATS_UNIT_BYTES; schema_entry->value->unit = STATS_UNIT_BYTES;

View file

@ -2031,6 +2031,7 @@ struct kvm_stats_header {
#define KVM_STATS_UNIT_BYTES (0x1 << KVM_STATS_UNIT_SHIFT) #define KVM_STATS_UNIT_BYTES (0x1 << KVM_STATS_UNIT_SHIFT)
#define KVM_STATS_UNIT_SECONDS (0x2 << KVM_STATS_UNIT_SHIFT) #define KVM_STATS_UNIT_SECONDS (0x2 << KVM_STATS_UNIT_SHIFT)
#define KVM_STATS_UNIT_CYCLES (0x3 << KVM_STATS_UNIT_SHIFT) #define KVM_STATS_UNIT_CYCLES (0x3 << KVM_STATS_UNIT_SHIFT)
#define KVM_STATS_UNIT_BOOLEAN (0x4 << KVM_STATS_UNIT_SHIFT)
#define KVM_STATS_UNIT_MAX KVM_STATS_UNIT_CYCLES #define KVM_STATS_UNIT_MAX KVM_STATS_UNIT_CYCLES
#define KVM_STATS_BASE_SHIFT 8 #define KVM_STATS_BASE_SHIFT 8

View file

@ -2342,6 +2342,8 @@ static void print_stats_results(Monitor *mon, StatsTarget target,
if (stats_value->type == QTYPE_QNUM) { if (stats_value->type == QTYPE_QNUM) {
monitor_printf(mon, ": %" PRId64 "\n", stats_value->u.scalar); monitor_printf(mon, ": %" PRId64 "\n", stats_value->u.scalar);
} else if (stats_value->type == QTYPE_QBOOL) {
monitor_printf(mon, ": %s\n", stats_value->u.boolean ? "yes" : "no");
} else if (stats_value->type == QTYPE_QLIST) { } else if (stats_value->type == QTYPE_QLIST) {
uint64List *list; uint64List *list;
int i; int i;

View file

@ -38,11 +38,12 @@
# @bytes: stat reported in bytes. # @bytes: stat reported in bytes.
# @seconds: stat reported in seconds. # @seconds: stat reported in seconds.
# @cycles: stat reported in clock cycles. # @cycles: stat reported in clock cycles.
# @boolean: stat is a boolean value.
# #
# Since: 7.1 # Since: 7.1
## ##
{ 'enum' : 'StatsUnit', { 'enum' : 'StatsUnit',
'data' : [ 'bytes', 'seconds', 'cycles' ] } 'data' : [ 'bytes', 'seconds', 'cycles', 'boolean' ] }
## ##
# @StatsProvider: # @StatsProvider:
@ -123,6 +124,7 @@
## ##
{ 'alternate': 'StatsValue', { 'alternate': 'StatsValue',
'data': { 'scalar': 'uint64', 'data': { 'scalar': 'uint64',
'boolean': 'bool',
'list': [ 'uint64' ] } } 'list': [ 'uint64' ] } }
## ##