@@ -2476,7 +2476,7 @@ void virtio_pci_types_register(const VirtioPCIDeviceTypeInfo *t)
? g_strconcat(t->generic_name, "-base-type", NULL)
: NULL;
TypeInfo base_type_info = {
- .name = t->base_name,
+ .name = t->base_name ?: base_name,
.parent = t->parent ? t->parent : TYPE_VIRTIO_PCI,
.instance_size = t->instance_size,
.instance_init = t->instance_init,
@@ -2487,7 +2487,7 @@ void virtio_pci_types_register(const VirtioPCIDeviceTypeInfo *t)
};
TypeInfo generic_type_info = {
.name = t->generic_name,
- .parent = base_type_info.name,
+ .parent = t->base_name,
.class_init = virtio_pci_generic_class_init,
.interfaces = (const InterfaceInfo[]) {
{ INTERFACE_PCIE_DEVICE },
@@ -2499,8 +2499,7 @@ void virtio_pci_types_register(const VirtioPCIDeviceTypeInfo *t)
assert(t->base_name || !t->non_transitional_name);
assert(t->base_name || !t->transitional_name);
- if (!base_type_info.name) {
- base_type_info.name = base_name;
+ if (!t->base_name) {
base_type_info.class_init = virtio_pci_generic_class_init;
generic_type_info.parent = base_name;
@@ -2519,7 +2518,7 @@ void virtio_pci_types_register(const VirtioPCIDeviceTypeInfo *t)
if (t->non_transitional_name) {
const TypeInfo non_transitional_type_info = {
.name = t->non_transitional_name,
- .parent = base_type_info.name,
+ .parent = t->base_name ?: base_name,
.instance_init = virtio_pci_non_transitional_instance_init,
.interfaces = (const InterfaceInfo[]) {
{ INTERFACE_PCIE_DEVICE },
@@ -2533,7 +2532,7 @@ void virtio_pci_types_register(const VirtioPCIDeviceTypeInfo *t)
if (t->transitional_name) {
const TypeInfo transitional_type_info = {
.name = t->transitional_name,
- .parent = base_type_info.name,
+ .parent = t->base_name ?: base_name,
.instance_init = virtio_pci_transitional_instance_init,
.interfaces = (const InterfaceInfo[]) {
/*
base_type_info.name is initialized to t->base_name, check that directly. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- hw/virtio/virtio-pci.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-)