[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH 11/13] memory: MemoryRegion: Add container and a
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [RFC PATCH 11/13] memory: MemoryRegion: Add container and addr props |
Date: |
Wed, 11 Jun 2014 14:19:34 +0200 |
From: Peter Crosthwaite <address@hidden>
Expose the already existing .parent and .addr fields as QOM properties.
.parent (i.e. the field describing the memory region that contains this
one in Memory hierachy) is renamed "container". This is to avoid
confusion with the QOM parent.
Signed-off-by: Peter Crosthwaite <address@hidden>
[Remove setters. Do not unref parent on releasing the property. Clean
up error propagation. - Paolo]
Signed-off-by: Paolo Bonzini <address@hidden>
---
memory.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/memory.c b/memory.c
index acbab4c..13a9fe8 100644
--- a/memory.c
+++ b/memory.c
@@ -16,6 +16,7 @@
#include "exec/memory.h"
#include "exec/address-spaces.h"
#include "exec/ioport.h"
+#include "qapi/visitor.h"
#include "qemu/bitops.h"
#include "qom/object.h"
#include "trace.h"
@@ -882,6 +883,38 @@ void memory_region_init(MemoryRegion *mr,
}
}
+static void memory_region_get_addr(Object *obj, Visitor *v, void *opaque,
+ const char *name, Error **errp)
+{
+ MemoryRegion *mr = MEMORY_REGION(obj);
+ uint64_t value = mr->addr;
+
+ visit_type_uint64(v, &value, name, errp);
+}
+
+static void memory_region_get_container(Object *obj, Visitor *v, void *opaque,
+ const char *name, Error **errp)
+{
+ MemoryRegion *mr = MEMORY_REGION(obj);
+ gchar *path = (gchar *)"";
+
+ if (mr->container) {
+ path = object_get_canonical_path(OBJECT(mr->container));
+ }
+ visit_type_str(v, &path, name, errp);
+ if (mr->container) {
+ g_free(path);
+ }
+}
+
+static Object *memory_region_resolve_container(Object *obj, void *opaque,
+ const char *part)
+{
+ MemoryRegion *mr = MEMORY_REGION(obj);
+
+ return OBJECT(mr->container);
+}
+
static void memory_region_initfn(Object *obj)
{
MemoryRegion *mr = MEMORY_REGION(obj);
@@ -892,6 +925,18 @@ static void memory_region_initfn(Object *obj)
mr->destructor = memory_region_destructor_none;
QTAILQ_INIT(&mr->subregions);
QTAILQ_INIT(&mr->coalesced);
+
+ object_property_add_full(OBJECT(mr), "container",
+ "link<" TYPE_MEMORY_REGION ">",
+ memory_region_get_container,
+ NULL, /* memory_region_set_container */
+ memory_region_resolve_container,
+ NULL, NULL, &error_abort);
+
+ object_property_add(OBJECT(mr), "addr", "uint64",
+ memory_region_get_addr,
+ NULL, /* memory_region_set_addr */
+ NULL, NULL, &error_abort);
}
static uint64_t unassigned_mem_read(void *opaque, hwaddr addr,
--
1.8.3.1
- [Qemu-devel] [RFC PATCH 09/13] memory: MemoryRegion: QOMify, (continued)
[Qemu-devel] [RFC PATCH 04/13] qom: delete properties before calling instance_finalize, Paolo Bonzini, 2014/06/11
[Qemu-devel] [RFC PATCH 11/13] memory: MemoryRegion: Add container and addr props,
Paolo Bonzini <=
[Qemu-devel] [RFC PATCH 07/13] memory: MemoryRegion: use /machine as default owner, Paolo Bonzini, 2014/06/11
[Qemu-devel] [RFC PATCH 08/13] memory: MemoryRegion: rename parent to container, Paolo Bonzini, 2014/06/11
[Qemu-devel] [RFC PATCH 12/13] memory: MemoryRegion: Add may-overlap and priority props, Paolo Bonzini, 2014/06/11
[Qemu-devel] [RFC PATCH 13/13] memory: MemoryRegion: Add size property, Paolo Bonzini, 2014/06/11
[Qemu-devel] [RFC PATCH 10/13] memory: MemoryRegion: replace owner field with QOM parent, Paolo Bonzini, 2014/06/11
Re: [Qemu-devel] [RFC PATCH 00/13] "Light" memory region QOMification, Peter Crosthwaite, 2014/06/17