@@ -2475,13 +2475,16 @@ void virtio_pci_types_register(const VirtioPCIDeviceTypeInfo *t)
g_autofree char *base_name = single_generic_device
? g_strconcat(t->generic_name, "-base-type", NULL)
: NULL;
- TypeInfo base_type_info = {
+ const TypeInfo base_type_info = {
.name = t->base_name ?: base_name,
.parent = t->parent ? t->parent : TYPE_VIRTIO_PCI,
.instance_size = t->instance_size,
.instance_init = t->instance_init,
.instance_finalize = t->instance_finalize,
.class_size = t->class_size,
+ .class_init = t->base_name ? virtio_pci_base_class_init
+ : virtio_pci_generic_class_init,
+ .class_data = t->base_name ? t : NULL,
.abstract = true,
.interfaces = t->interfaces,
};
@@ -2499,18 +2502,14 @@ void virtio_pci_types_register(const VirtioPCIDeviceTypeInfo *t)
assert(t->base_name || !t->non_transitional_name);
assert(t->base_name || !t->transitional_name);
- if (!t->base_name) {
- base_type_info.class_init = virtio_pci_generic_class_init;
+ type_register_static(&base_type_info);
+ if (!t->base_name) {
generic_type_info.parent = base_name;
generic_type_info.class_init = virtio_pci_base_class_init;
generic_type_info.class_data = t;
- } else {
- base_type_info.class_init = virtio_pci_base_class_init;
- base_type_info.class_data = t;
}
- type_register_static(&base_type_info);
if (generic_type_info.name) {
type_register_static(&generic_type_info);
}
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- hw/virtio/virtio-pci.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-)