[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] What's IOMMUMemoryRegion's super?
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] What's IOMMUMemoryRegion's super? |
Date: |
Wed, 03 Jul 2019 07:05:56 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux) |
The usual QOM boilerplate for defining a sub-{type,class} looks like
this:
static const TypeInfo sysbus_device_type_info = {
.name = TYPE_SYS_BUS_DEVICE,
.parent = TYPE_DEVICE,
.instance_size = sizeof(SysBusDevice),
.abstract = true,
.class_size = sizeof(SysBusDeviceClass),
.class_init = sysbus_device_class_init,
};
typedef struct SysBusDeviceClass {
/*< private >*/
DeviceClass parent_class;
[...]
} SysBusDeviceClass;
struct SysBusDevice {
/*< private >*/
DeviceState parent_obj;
[...]
};
Note the TypeInfo states the parent type (member @parent), and
associated class and instance structs (used members @instance_size and
@class_size) have the parent type's class and member struct as first
member.
This makes type casts to parent types work. The checked QOM casts add
safety by checking it's actually a parent type.
Now consider TYPE_IOMMU_MEMORY_REGION:
static const TypeInfo iommu_memory_region_info = {
.parent = TYPE_MEMORY_REGION,
.name = TYPE_IOMMU_MEMORY_REGION,
.class_size = sizeof(IOMMUMemoryRegionClass),
.instance_size = sizeof(IOMMUMemoryRegion),
.instance_init = iommu_memory_region_initfn,
.abstract = true,
};
typedef struct IOMMUMemoryRegionClass {
/* private */
---> struct DeviceClass parent_class;
[...]
};
struct IOMMUMemoryRegion {
MemoryRegion parent_obj;
[...]
};
The parent is TYPE_MEMORY_REGION, and the instance struct's first member is
TYPE_MEMORY_REGION's instance struct as I expect, but the class struct's
first member is something else entirely.
What's going on here? Am I confused?
The commit message is of no help whatsoever:
commit 1221a4746769f70231beab4db8da1c937e60340c
Author: Alexey Kardashevskiy <address@hidden>
Date: Tue Jul 11 13:56:20 2017 +1000
memory/iommu: introduce IOMMUMemoryRegionClass
This finishes QOM'fication of IOMMUMemoryRegion by introducing
a IOMMUMemoryRegionClass. This also provides a fastpath analog for
IOMMU_MEMORY_REGION_GET_CLASS().
This makes IOMMUMemoryRegion an abstract class.
Signed-off-by: Alexey Kardashevskiy <address@hidden>
Message-Id: <address@hidden>
Acked-by: Cornelia Huck <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
- [Qemu-devel] What's IOMMUMemoryRegion's super?,
Markus Armbruster <=