memory: MemoryRegion: replace owner field with QOM parent
The two are now the same. Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
b4fefef9d5
commit
22a893e4f5
@ -141,7 +141,6 @@ struct MemoryRegion {
|
||||
const MemoryRegionOps *ops;
|
||||
const MemoryRegionIOMMUOps *iommu_ops;
|
||||
void *opaque;
|
||||
struct Object *owner;
|
||||
MemoryRegion *container;
|
||||
Int128 size;
|
||||
hwaddr addr;
|
||||
|
35
memory.c
35
memory.c
@ -905,9 +905,11 @@ void memory_region_init(MemoryRegion *mr,
|
||||
const char *name,
|
||||
uint64_t size)
|
||||
{
|
||||
object_initialize(mr, sizeof(*mr), TYPE_MEMORY_REGION);
|
||||
if (!owner) {
|
||||
owner = qdev_get_machine();
|
||||
}
|
||||
|
||||
mr->owner = owner ? owner : qdev_get_machine();
|
||||
object_initialize(mr, sizeof(*mr), TYPE_MEMORY_REGION);
|
||||
mr->size = int128_make64(size);
|
||||
if (size == UINT64_MAX) {
|
||||
mr->size = int128_2_64();
|
||||
@ -915,7 +917,7 @@ void memory_region_init(MemoryRegion *mr,
|
||||
mr->name = g_strdup(name);
|
||||
|
||||
if (name) {
|
||||
object_property_add_child_array(mr->owner, name, OBJECT(mr));
|
||||
object_property_add_child_array(owner, name, OBJECT(mr));
|
||||
object_unref(OBJECT(mr));
|
||||
}
|
||||
}
|
||||
@ -1187,24 +1189,37 @@ void memory_region_destroy(MemoryRegion *mr)
|
||||
|
||||
Object *memory_region_owner(MemoryRegion *mr)
|
||||
{
|
||||
return mr->owner;
|
||||
Object *obj = OBJECT(mr);
|
||||
return obj->parent;
|
||||
}
|
||||
|
||||
void memory_region_ref(MemoryRegion *mr)
|
||||
{
|
||||
if (mr && mr->owner) {
|
||||
object_ref(mr->owner);
|
||||
/* MMIO callbacks most likely will access data that belongs
|
||||
* to the owner, hence the need to ref/unref the owner whenever
|
||||
* the memory region is in use.
|
||||
*
|
||||
* The memory region is a child of its owner. As long as the
|
||||
* owner doesn't call unparent itself on the memory region,
|
||||
* ref-ing the owner will also keep the memory region alive.
|
||||
* Memory regions without an owner are supposed to never go away,
|
||||
* but we still ref/unref them for debugging purposes.
|
||||
*/
|
||||
Object *obj = OBJECT(mr);
|
||||
if (obj && obj->parent) {
|
||||
object_ref(obj->parent);
|
||||
} else {
|
||||
object_ref(OBJECT(mr));
|
||||
object_ref(obj);
|
||||
}
|
||||
}
|
||||
|
||||
void memory_region_unref(MemoryRegion *mr)
|
||||
{
|
||||
if (mr && mr->owner) {
|
||||
object_unref(mr->owner);
|
||||
Object *obj = OBJECT(mr);
|
||||
if (obj && obj->parent) {
|
||||
object_unref(obj->parent);
|
||||
} else {
|
||||
object_unref(OBJECT(mr));
|
||||
object_unref(obj);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user