mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 02:03:56 -06:00
qapi: Add HV_BALLOON_STATUS_REPORT event and its QMP query command
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>
This commit is contained in:
parent
16dff2f9bb
commit
259ebed45a
6 changed files with 113 additions and 2 deletions
19
hw/hyperv/hv-balloon-stub.c
Normal file
19
hw/hyperv/hv-balloon-stub.c
Normal file
|
@ -0,0 +1,19 @@
|
|||
/*
|
||||
* QEMU Hyper-V Dynamic Memory Protocol driver
|
||||
*
|
||||
* Copyright (C) 2023 Oracle and/or its affiliates.
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||
* See the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qapi/qapi-commands-machine.h"
|
||||
#include "qapi/qapi-types-machine.h"
|
||||
|
||||
HvBalloonInfo *qmp_query_hv_balloon_status_report(Error **errp)
|
||||
{
|
||||
error_setg(errp, "hv-balloon device not enabled in this build");
|
||||
return NULL;
|
||||
}
|
|
@ -1102,7 +1102,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,
|
||||
|
|
|
@ -2,4 +2,4 @@ specific_ss.add(when: 'CONFIG_HYPERV', if_true: files('hyperv.c'))
|
|||
specific_ss.add(when: 'CONFIG_HYPERV_TESTDEV', if_true: files('hyperv_testdev.c'))
|
||||
specific_ss.add(when: 'CONFIG_VMBUS', if_true: files('vmbus.c'))
|
||||
specific_ss.add(when: 'CONFIG_SYNDBG', if_true: files('syndbg.c'))
|
||||
specific_ss.add(when: 'CONFIG_HV_BALLOON', if_true: files('hv-balloon.c', 'hv-balloon-page_range_tree.c', 'hv-balloon-our_range_memslots.c'))
|
||||
specific_ss.add(when: 'CONFIG_HV_BALLOON', if_true: files('hv-balloon.c', 'hv-balloon-page_range_tree.c', 'hv-balloon-our_range_memslots.c'), if_false: files('hv-balloon-stub.c'))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue