On Thu, Feb 18, 2021 at 14:31:04 +0100, Michal Privoznik wrote:
New event is introduced that is emitted whenever guest
acknowledges allocation change request of a virtio-mem.
The aim is to let applications know when that happens,
because changes in allocation are not synchronous with
issuing the request. Under the hood, the event is
emitted whenever QEMU emits MEMORY_DEVICE_SIZE_CHANGE
event.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
examples/c/misc/event-test.c | 17 ++++++
include/libvirt/libvirt-domain.h | 23 ++++++++
src/conf/domain_event.c | 84 +++++++++++++++++++++++++++++
src/conf/domain_event.h | 10 ++++
src/libvirt_private.syms | 2 +
src/qemu/qemu_driver.c | 6 +++
src/remote/remote_daemon_dispatch.c | 30 +++++++++++
src/remote/remote_driver.c | 32 +++++++++++
src/remote/remote_protocol.x | 15 +++++-
src/remote_protocol-structs | 7 +++
tools/virsh-domain.c | 20 +++++++
11 files changed, 245 insertions(+), 1 deletion(-)
[...]
diff --git a/include/libvirt/libvirt-domain.h
b/include/libvirt/libvirt-domain.h
index 8011cf9fe1..2c449b4f31 100644
--- a/include/libvirt/libvirt-domain.h
+++ b/include/libvirt/libvirt-domain.h
@@ -4651,6 +4651,28 @@ typedef void
(*virConnectDomainEventMemoryFailureCallback)(virConnectPtr conn,
unsigned int flags,
void *opaque);
+/**
+ * virConnectDomainEventMemoryDeviceSizeChangeCallback:
+ * @conn: connection object
+ * @dom: domain on which the event occurred
+ * @alias: memory device alias
+ * @size: new actual size of memory device (in KiB)
I'd specifically call this actualsize or something to maybe add one more
layer to avoid confuision with the 'size'
+ * @opaque: application specified data
+ *
+ * The callback occurs when the guest acknowledges request to change size of
+ * memory device (so far only virtio-mem model supports this). The @size then
+ * reflects the new amount of guest visible memory (in kibibytes).
+ *
+ * The callback signature to use when registering for an event of type
+ * VIR_DOMAIN_EVENT_ID_MEMORY_DEVICE_SIZE_CHANGE with
+ * virConnectDomainEventRegisterAny().
+ */
+typedef void (*virConnectDomainEventMemoryDeviceSizeChangeCallback)(virConnectPtr conn,
+ virDomainPtr dom,
+ const char *alias,
+ unsigned long long
size,
+ void *opaque);
+
/**
* VIR_DOMAIN_EVENT_CALLBACK:
But I don't think it needs to be changed in the internals though.