Skip to content

Commit

Permalink
qapi: Add HV_BALLOON_STATUS_REPORT event and its QMP query command
Browse files Browse the repository at this point in the history
Used by the hv-balloon driver for (optional) guest memory status reports.

Acked-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
  • Loading branch information
maciejsszmigiero committed Nov 3, 2023
1 parent 09c8d68 commit 73c1706
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 1 deletion.
30 changes: 29 additions & 1 deletion hw/hyperv/hv-balloon.c
Original file line number Diff line number Diff line change
Expand Up @@ -1099,7 +1099,35 @@ static void hv_balloon_handle_status_report(HvBalloon *balloon,
balloon->status_report.available *= HV_BALLOON_PAGE_SIZE;
balloon->status_report.received = true;

/* report event */
qapi_event_send_hv_balloon_status_report(balloon->status_report.committed,
balloon->status_report.available);
}

HvBalloonInfo *qmp_query_hv_balloon_status_report(Error **errp)
{
HvBalloon *balloon;
HvBalloonInfo *info;

balloon = HV_BALLOON(object_resolve_path_type("", TYPE_HV_BALLOON, NULL));
if (!balloon) {
error_setg(errp, "no %s device present", TYPE_HV_BALLOON);
return NULL;
}

if (!balloon->status_report.enabled) {
error_setg(errp, "guest memory status reporting not enabled");
return NULL;
}

if (!balloon->status_report.received) {
error_setg(errp, "no guest memory status report received yet");
return NULL;
}

info = g_malloc0(sizeof(*info));
info->committed = balloon->status_report.committed;
info->available = balloon->status_report.available;
return info;
}

static void hv_balloon_handle_unballoon_response(HvBalloon *balloon,
Expand Down
1 change: 1 addition & 0 deletions monitor/monitor.c
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,7 @@ static MonitorQAPIEventConf monitor_qapi_event_conf[QAPI_EVENT__MAX] = {
[QAPI_EVENT_QUORUM_FAILURE] = { 1000 * SCALE_MS },
[QAPI_EVENT_VSERPORT_CHANGE] = { 1000 * SCALE_MS },
[QAPI_EVENT_MEMORY_DEVICE_SIZE_CHANGE] = { 1000 * SCALE_MS },
[QAPI_EVENT_HV_BALLOON_STATUS_REPORT] = { 1000 * SCALE_MS },
};

/*
Expand Down
62 changes: 62 additions & 0 deletions qapi/machine.json
Original file line number Diff line number Diff line change
Expand Up @@ -1137,6 +1137,68 @@
{ 'event': 'BALLOON_CHANGE',
'data': { 'actual': 'int' } }

##
# @HvBalloonInfo:
#
# hv-balloon guest-provided memory status information.
#
# @committed: the amount of memory in use inside the guest plus the
# amount of the memory unusable inside the guest (ballooned out,
# offline, etc.)
#
# @available: the amount of the memory inside the guest available for
# new allocations ("free")
#
# Since: 8.2
##
{ 'struct': 'HvBalloonInfo',
'data': { 'committed': 'size', 'available': 'size' } }

##
# @query-hv-balloon-status-report:
#
# Returns the hv-balloon driver data contained in the last received "STATUS"
# message from the guest.
#
# Returns:
# - @HvBalloonInfo on success
# - If no hv-balloon device is present, guest memory status reporting
# is not enabled or no guest memory status report received yet,
# GenericError
#
# Since: 8.2
#
# Example:
#
# -> { "execute": "query-hv-balloon-status-report" }
# <- { "return": {
# "committed": 816640000,
# "available": 3333054464
# }
# }
##
{ 'command': 'query-hv-balloon-status-report', 'returns': 'HvBalloonInfo' }

##
# @HV_BALLOON_STATUS_REPORT:
#
# Emitted when the hv-balloon driver receives a "STATUS" message from
# the guest.
#
# Note: this event is rate-limited.
#
# Since: 8.2
#
# Example:
#
# <- { "event": "HV_BALLOON_STATUS_REPORT",
# "data": { "committed": 816640000, "available": 3333054464 },
# "timestamp": { "seconds": 1600295492, "microseconds": 661044 } }
#
##
{ 'event': 'HV_BALLOON_STATUS_REPORT',
'data': 'HvBalloonInfo' }

##
# @MemoryInfo:
#
Expand Down

0 comments on commit 73c1706

Please sign in to comment.