From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
Igor Mammedov <imammedo@redhat.com>,
"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
David Hildenbrand <david@redhat.com>
Subject: [PULL v2 19/41] virtio-mem: Allow notifiers for size changes
Date: Sat, 4 Jul 2020 14:30:13 -0400 [thread overview]
Message-ID: <20200704182750.1088103-20-mst@redhat.com> (raw)
In-Reply-To: <20200704182750.1088103-1-mst@redhat.com>
From: David Hildenbrand <david@redhat.com>
We want to send qapi events in case the size of a virtio-mem device
changes. This allows upper layers to always know how much memory is
actually currently consumed via a virtio-mem device.
Unfortuantely, we have to report the id of our proxy device. Let's provide
an easy way for our proxy device to register, so it can send the qapi
events. Piggy-backing on the notifier infrastructure (although we'll
only ever have one notifier registered) seems to be an easy way.
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Cc: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20200626072248.78761-17-david@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
include/hw/virtio/virtio-mem.h | 5 +++++
hw/virtio/virtio-mem.c | 21 ++++++++++++++++++++-
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/include/hw/virtio/virtio-mem.h b/include/hw/virtio/virtio-mem.h
index 6981096f7c..b74c77cd42 100644
--- a/include/hw/virtio/virtio-mem.h
+++ b/include/hw/virtio/virtio-mem.h
@@ -64,6 +64,9 @@ typedef struct VirtIOMEM {
/* block size and alignment */
uint64_t block_size;
+
+ /* notifiers to notify when "size" changes */
+ NotifierList size_change_notifiers;
} VirtIOMEM;
typedef struct VirtIOMEMClass {
@@ -73,6 +76,8 @@ typedef struct VirtIOMEMClass {
/* public */
void (*fill_device_info)(const VirtIOMEM *vmen, VirtioMEMDeviceInfo *vi);
MemoryRegion *(*get_memory_region)(VirtIOMEM *vmem, Error **errp);
+ void (*add_size_change_notifier)(VirtIOMEM *vmem, Notifier *notifier);
+ void (*remove_size_change_notifier)(VirtIOMEM *vmem, Notifier *notifier);
} VirtIOMEMClass;
#endif
diff --git a/hw/virtio/virtio-mem.c b/hw/virtio/virtio-mem.c
index 2d6f3061a6..6b5551515d 100644
--- a/hw/virtio/virtio-mem.c
+++ b/hw/virtio/virtio-mem.c
@@ -184,6 +184,7 @@ static int virtio_mem_state_change_request(VirtIOMEM *vmem, uint64_t gpa,
} else {
vmem->size -= size;
}
+ notifier_list_notify(&vmem->size_change_notifiers, &vmem->size);
return VIRTIO_MEM_RESP_ACK;
}
@@ -242,7 +243,10 @@ static int virtio_mem_unplug_all(VirtIOMEM *vmem)
return -EBUSY;
}
bitmap_clear(vmem->bitmap, 0, vmem->bitmap_size);
- vmem->size = 0;
+ if (vmem->size) {
+ vmem->size = 0;
+ notifier_list_notify(&vmem->size_change_notifiers, &vmem->size);
+ }
virtio_mem_resize_usable_region(vmem, vmem->requested_size, true);
return 0;
@@ -561,6 +565,18 @@ static MemoryRegion *virtio_mem_get_memory_region(VirtIOMEM *vmem, Error **errp)
return &vmem->memdev->mr;
}
+static void virtio_mem_add_size_change_notifier(VirtIOMEM *vmem,
+ Notifier *notifier)
+{
+ notifier_list_add(&vmem->size_change_notifiers, notifier);
+}
+
+static void virtio_mem_remove_size_change_notifier(VirtIOMEM *vmem,
+ Notifier *notifier)
+{
+ notifier_remove(notifier);
+}
+
static void virtio_mem_get_size(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
@@ -668,6 +684,7 @@ static void virtio_mem_instance_init(Object *obj)
VirtIOMEM *vmem = VIRTIO_MEM(obj);
vmem->block_size = VIRTIO_MEM_MIN_BLOCK_SIZE;
+ notifier_list_init(&vmem->size_change_notifiers);
object_property_add(obj, VIRTIO_MEM_SIZE_PROP, "size", virtio_mem_get_size,
NULL, NULL, NULL);
@@ -705,6 +722,8 @@ static void virtio_mem_class_init(ObjectClass *klass, void *data)
vmc->fill_device_info = virtio_mem_fill_device_info;
vmc->get_memory_region = virtio_mem_get_memory_region;
+ vmc->add_size_change_notifier = virtio_mem_add_size_change_notifier;
+ vmc->remove_size_change_notifier = virtio_mem_remove_size_change_notifier;
}
static const TypeInfo virtio_mem_info = {
--
MST
next prev parent reply other threads:[~2020-07-04 18:42 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-04 18:29 [PULL v2 00/41] virtio,acpi: features, fixes, cleanups Michael S. Tsirkin
2020-07-04 18:29 ` [PULL v2 01/41] tests: disassemble-aml.sh: generate AML in readable format Michael S. Tsirkin
2020-07-04 18:29 ` [PULL v2 02/41] Revert "tests/migration: Reduce autoconverge initial bandwidth" Michael S. Tsirkin
2020-07-04 18:29 ` [PULL v2 03/41] virtio-balloon: always indicate S_DONE when migration fails Michael S. Tsirkin
2020-07-04 18:29 ` [PULL v2 04/41] pc: Support coldplugging of virtio-pmem-pci devices on all buses Michael S. Tsirkin
2020-07-04 18:29 ` [PULL v2 05/41] exec: Introduce ram_block_discard_(disable|require)() Michael S. Tsirkin
2020-07-04 18:29 ` [PULL v2 06/41] vfio: Convert to ram_block_discard_disable() Michael S. Tsirkin
2020-07-04 18:29 ` [PULL v2 07/41] accel/kvm: " Michael S. Tsirkin
2020-07-04 18:29 ` [PULL v2 08/41] s390x/pv: " Michael S. Tsirkin
2020-07-04 18:29 ` [PULL v2 09/41] virtio-balloon: Rip out qemu_balloon_inhibit() Michael S. Tsirkin
2020-07-04 18:29 ` [PULL v2 10/41] target/i386: sev: Use ram_block_discard_disable() Michael S. Tsirkin
2020-07-04 18:29 ` [PULL v2 11/41] migration/rdma: " Michael S. Tsirkin
2020-07-04 18:29 ` [PULL v2 12/41] migration/colo: " Michael S. Tsirkin
2020-07-04 18:29 ` [PULL v2 13/41] virtio-mem: Paravirtualized memory hot(un)plug Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 14/41] virtio-pci: Proxy for virtio-mem Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 15/41] MAINTAINERS: Add myself as virtio-mem maintainer Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 16/41] hmp: Handle virtio-mem when printing memory device info Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 17/41] numa: Handle virtio-mem in NUMA stats Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 18/41] pc: Support for virtio-mem-pci Michael S. Tsirkin
2020-07-04 18:30 ` Michael S. Tsirkin [this message]
2020-07-04 18:30 ` [PULL v2 20/41] virtio-pci: Send qapi events when the virtio-mem size changes Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 21/41] virtio-mem: Migration sanity checks Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 22/41] virtio-mem: Add trace events Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 23/41] virtio-mem: Exclude unplugged memory during migration Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 24/41] numa: Auto-enable NUMA when any memory devices are possible Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 25/41] tests/acpi: remove stale allowed tables Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 26/41] docs: vhost-user: add Virtio status protocol feature Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 27/41] MAINTAINERS: add VT-d entry Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 28/41] net: introduce qemu_get_peer Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 29/41] vhost_net: use the function qemu_get_peer Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 30/41] virtio-bus: introduce queue_enabled method Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 31/41] virtio-pci: implement " Michael S. Tsirkin
2020-07-27 13:51 ` Laurent Vivier
2020-07-27 14:00 ` Michael S. Tsirkin
2020-07-27 14:06 ` Laurent Vivier
2020-07-04 18:30 ` [PULL v2 32/41] vhost: check the existence of vhost_set_iotlb_callback Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 33/41] vhost: introduce new VhostOps vhost_dev_start Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 34/41] vhost: implement vhost_dev_start method Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 35/41] vhost: introduce new VhostOps vhost_vq_get_addr Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 36/41] vhost: implement vhost_vq_get_addr method Michael S. Tsirkin
2020-07-04 18:30 ` [PULL v2 37/41] vhost: introduce new VhostOps vhost_force_iommu Michael S. Tsirkin
2020-07-04 18:31 ` [PULL v2 38/41] vhost: implement vhost_force_iommu method Michael S. Tsirkin
2020-07-04 18:31 ` [PULL v2 39/41] vhost_net: introduce set_config & get_config Michael S. Tsirkin
2020-07-04 18:31 ` [PULL v2 40/41] vhost-vdpa: introduce vhost-vdpa backend Michael S. Tsirkin
2020-07-09 15:14 ` Peter Maydell
2020-07-10 2:07 ` Cindy Lu
2020-07-04 18:31 ` [PULL v2 41/41] vhost-vdpa: introduce vhost-vdpa net client Michael S. Tsirkin
2020-07-07 11:40 ` [PULL v2 00/41] virtio,acpi: features, fixes, cleanups Peter Maydell
2020-07-07 12:03 ` Michael S. Tsirkin
2020-07-07 17:50 ` Peter Maydell
2020-07-08 6:45 ` Michael S. Tsirkin
2020-07-08 10:19 ` Peter Maydell
2020-07-09 10:32 ` Peter Maydell
2020-07-09 17:46 ` Michael S. Tsirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200704182750.1088103-20-mst@redhat.com \
--to=mst@redhat.com \
--cc=david@redhat.com \
--cc=dgilbert@redhat.com \
--cc=imammedo@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).