From: David Hildenbrand <david@redhat.com>
To: qemu-devel@nongnu.org
Cc: "David Hildenbrand" <david@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Eduardo Habkost" <ehabkost@redhat.com>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Igor Mammedov" <imammedo@redhat.com>,
"Ani Sinha" <ani@anisinha.ca>, "Peter Xu" <peterx@redhat.com>,
"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
kvm@vger.kernel.org
Subject: [PATCH RFC 07/15] memory-device: Generalize memory_device_used_region_size()
Date: Wed, 13 Oct 2021 12:33:22 +0200 [thread overview]
Message-ID: <20211013103330.26869-8-david@redhat.com> (raw)
In-Reply-To: <20211013103330.26869-1-david@redhat.com>
Let's generalize traversal of all plugged memory devices to collect
information to prepare for future changes.
Signed-off-by: David Hildenbrand <david@redhat.com>
---
hw/mem/memory-device.c | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/hw/mem/memory-device.c b/hw/mem/memory-device.c
index 68a2c3dbcc..a915894819 100644
--- a/hw/mem/memory-device.c
+++ b/hw/mem/memory-device.c
@@ -50,20 +50,24 @@ static int memory_device_build_list(Object *obj, void *opaque)
return 0;
}
-static int memory_device_used_region_size(Object *obj, void *opaque)
+struct memory_devices_info {
+ uint64_t region_size;
+};
+
+static int memory_devices_collect_info(Object *obj, void *opaque)
{
- uint64_t *size = opaque;
+ struct memory_devices_info *i = opaque;
if (object_dynamic_cast(obj, TYPE_MEMORY_DEVICE)) {
const DeviceState *dev = DEVICE(obj);
const MemoryDeviceState *md = MEMORY_DEVICE(obj);
if (dev->realized) {
- *size += memory_device_get_region_size(md, &error_abort);
+ i->region_size += memory_device_get_region_size(md, &error_abort);
}
}
- object_child_foreach(obj, memory_device_used_region_size, opaque);
+ object_child_foreach(obj, memory_devices_collect_info, opaque);
return 0;
}
@@ -71,7 +75,7 @@ static void memory_device_check_addable(MachineState *ms, MemoryRegion *mr,
Error **errp)
{
const uint64_t size = memory_region_size(mr);
- uint64_t used_region_size = 0;
+ struct memory_devices_info info = {};
/* we will need a new memory slot for kvm and vhost */
if (kvm_enabled() && !kvm_get_free_memslots()) {
@@ -84,12 +88,12 @@ static void memory_device_check_addable(MachineState *ms, MemoryRegion *mr,
}
/* will we exceed the total amount of memory specified */
- memory_device_used_region_size(OBJECT(ms), &used_region_size);
- if (used_region_size + size < used_region_size ||
- used_region_size + size > ms->maxram_size - ms->ram_size) {
+ memory_devices_collect_info(OBJECT(ms), &info);
+ if (info.region_size + size < info.region_size ||
+ info.region_size + size > ms->maxram_size - ms->ram_size) {
error_setg(errp, "not enough space, currently 0x%" PRIx64
" in use of total space for memory devices 0x" RAM_ADDR_FMT,
- used_region_size, ms->maxram_size - ms->ram_size);
+ info.region_size, ms->maxram_size - ms->ram_size);
return;
}
--
2.31.1
WARNING: multiple messages have this Message-ID (diff)
From: David Hildenbrand <david@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Eduardo Habkost" <ehabkost@redhat.com>,
kvm@vger.kernel.org, "Michael S. Tsirkin" <mst@redhat.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"David Hildenbrand" <david@redhat.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
"Peter Xu" <peterx@redhat.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
"Igor Mammedov" <imammedo@redhat.com>,
"Ani Sinha" <ani@anisinha.ca>,
"Paolo Bonzini" <pbonzini@redhat.com>
Subject: [PATCH RFC 07/15] memory-device: Generalize memory_device_used_region_size()
Date: Wed, 13 Oct 2021 12:33:22 +0200 [thread overview]
Message-ID: <20211013103330.26869-8-david@redhat.com> (raw)
In-Reply-To: <20211013103330.26869-1-david@redhat.com>
Let's generalize traversal of all plugged memory devices to collect
information to prepare for future changes.
Signed-off-by: David Hildenbrand <david@redhat.com>
---
hw/mem/memory-device.c | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/hw/mem/memory-device.c b/hw/mem/memory-device.c
index 68a2c3dbcc..a915894819 100644
--- a/hw/mem/memory-device.c
+++ b/hw/mem/memory-device.c
@@ -50,20 +50,24 @@ static int memory_device_build_list(Object *obj, void *opaque)
return 0;
}
-static int memory_device_used_region_size(Object *obj, void *opaque)
+struct memory_devices_info {
+ uint64_t region_size;
+};
+
+static int memory_devices_collect_info(Object *obj, void *opaque)
{
- uint64_t *size = opaque;
+ struct memory_devices_info *i = opaque;
if (object_dynamic_cast(obj, TYPE_MEMORY_DEVICE)) {
const DeviceState *dev = DEVICE(obj);
const MemoryDeviceState *md = MEMORY_DEVICE(obj);
if (dev->realized) {
- *size += memory_device_get_region_size(md, &error_abort);
+ i->region_size += memory_device_get_region_size(md, &error_abort);
}
}
- object_child_foreach(obj, memory_device_used_region_size, opaque);
+ object_child_foreach(obj, memory_devices_collect_info, opaque);
return 0;
}
@@ -71,7 +75,7 @@ static void memory_device_check_addable(MachineState *ms, MemoryRegion *mr,
Error **errp)
{
const uint64_t size = memory_region_size(mr);
- uint64_t used_region_size = 0;
+ struct memory_devices_info info = {};
/* we will need a new memory slot for kvm and vhost */
if (kvm_enabled() && !kvm_get_free_memslots()) {
@@ -84,12 +88,12 @@ static void memory_device_check_addable(MachineState *ms, MemoryRegion *mr,
}
/* will we exceed the total amount of memory specified */
- memory_device_used_region_size(OBJECT(ms), &used_region_size);
- if (used_region_size + size < used_region_size ||
- used_region_size + size > ms->maxram_size - ms->ram_size) {
+ memory_devices_collect_info(OBJECT(ms), &info);
+ if (info.region_size + size < info.region_size ||
+ info.region_size + size > ms->maxram_size - ms->ram_size) {
error_setg(errp, "not enough space, currently 0x%" PRIx64
" in use of total space for memory devices 0x" RAM_ADDR_FMT,
- used_region_size, ms->maxram_size - ms->ram_size);
+ info.region_size, ms->maxram_size - ms->ram_size);
return;
}
--
2.31.1
next prev parent reply other threads:[~2021-10-13 10:36 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-13 10:33 [PATCH RFC 00/15] virtio-mem: Expose device memory via separate memslots David Hildenbrand
2021-10-13 10:33 ` David Hildenbrand
2021-10-13 10:33 ` [PATCH RFC 01/15] memory: Drop mapping check from memory_region_get_ram_discard_manager() David Hildenbrand
2021-10-13 10:33 ` David Hildenbrand
2021-10-13 10:33 ` [PATCH RFC 02/15] kvm: Return number of free memslots David Hildenbrand
2021-10-13 10:33 ` David Hildenbrand
2021-10-13 10:33 ` [PATCH RFC 03/15] vhost: " David Hildenbrand
2021-10-13 10:33 ` David Hildenbrand
2021-10-13 10:33 ` [PATCH RFC 04/15] memory: Allow for marking memory region aliases unmergeable David Hildenbrand
2021-10-13 10:33 ` David Hildenbrand
2021-10-13 10:33 ` [PATCH RFC 05/15] vhost: Don't merge unmergeable memory sections David Hildenbrand
2021-10-13 10:33 ` David Hildenbrand
2021-10-13 10:33 ` [PATCH RFC 06/15] memory-device: Move memory_device_check_addable() directly into memory_device_pre_plug() David Hildenbrand
2021-10-13 10:33 ` David Hildenbrand
2021-10-13 10:33 ` David Hildenbrand [this message]
2021-10-13 10:33 ` [PATCH RFC 07/15] memory-device: Generalize memory_device_used_region_size() David Hildenbrand
2021-10-13 10:33 ` [PATCH RFC 08/15] memory-device: Support memory devices that consume a variable number of memslots David Hildenbrand
2021-10-13 10:33 ` David Hildenbrand
2021-10-13 10:33 ` [PATCH RFC 09/15] vhost: Respect reserved memslots for memory devices when realizing a vhost device David Hildenbrand
2021-10-13 10:33 ` David Hildenbrand
2021-10-13 10:33 ` [PATCH RFC 10/15] virtio-mem: Set the RamDiscardManager for the RAM memory region earlier David Hildenbrand
2021-10-13 10:33 ` David Hildenbrand
2021-10-13 10:33 ` [PATCH RFC 11/15] virtio-mem: Fix typo in virito_mem_intersect_memory_section() function name David Hildenbrand
2021-10-13 10:33 ` David Hildenbrand
2021-10-13 10:33 ` [PATCH RFC 12/15] virtio-mem: Expose device memory via separate memslots David Hildenbrand
2021-10-13 10:33 ` David Hildenbrand
2021-10-14 11:45 ` Dr. David Alan Gilbert
2021-10-14 11:45 ` Dr. David Alan Gilbert
2021-10-14 13:17 ` David Hildenbrand
2021-10-14 13:17 ` David Hildenbrand
2021-10-20 12:17 ` David Hildenbrand
2021-10-20 12:17 ` David Hildenbrand
2021-10-13 10:33 ` [PATCH RFC 13/15] vhost-user: Increase VHOST_USER_MAX_RAM_SLOTS to 496 with CONFIG_VIRTIO_MEM David Hildenbrand
2021-10-13 10:33 ` David Hildenbrand
2021-10-13 10:33 ` [PATCH RFC 14/15] libvhost-user: Increase VHOST_USER_MAX_RAM_SLOTS to 4096 David Hildenbrand
2021-10-13 10:33 ` David Hildenbrand
2021-10-13 10:33 ` [PATCH RFC 15/15] virtio-mem: Set "max-memslots" to 0 (auto) for the 6.2 machine David Hildenbrand
2021-10-13 10:33 ` David Hildenbrand
2021-10-13 19:03 ` [PATCH RFC 00/15] virtio-mem: Expose device memory via separate memslots Dr. David Alan Gilbert
2021-10-13 19:03 ` Dr. David Alan Gilbert
2021-10-14 7:01 ` David Hildenbrand
2021-10-14 7:01 ` David Hildenbrand
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=20211013103330.26869-8-david@redhat.com \
--to=david@redhat.com \
--cc=ani@anisinha.ca \
--cc=dgilbert@redhat.com \
--cc=ehabkost@redhat.com \
--cc=f4bug@amsat.org \
--cc=imammedo@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=stefanha@redhat.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.