Extract code common to multi_2x_serial_pci_class_initfn() and
multi_4x_serial_pci_class_initfn() to multi_serial_class_initfn().
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/char/serial-pci-multi.c | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/hw/char/serial-pci-multi.c b/hw/char/serial-pci-multi.c
index e56c0bc841..704be5c294 100644
--- a/hw/char/serial-pci-multi.c
+++ b/hw/char/serial-pci-multi.c
@@ -155,14 +155,14 @@ static Property multi_4x_serial_pci_properties[] = {
DEFINE_PROP_END_OF_LIST(),
};
-static void multi_2x_serial_pci_class_initfn(ObjectClass *klass, void *data)
+static void multi_serial_class_initfn(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
PCIDeviceClass *pc = PCI_DEVICE_CLASS(klass);
+
pc->realize = multi_serial_pci_realize;
pc->exit = multi_serial_pci_exit;
pc->vendor_id = PCI_VENDOR_ID_REDHAT;
- pc->device_id = PCI_DEVICE_ID_REDHAT_SERIAL2;
pc->revision = 1;
pc->class_id = PCI_CLASS_COMMUNICATION_SERIAL;
dc->vmsd = &vmstate_pci_multi_serial;
@@ -170,19 +170,22 @@ static void multi_2x_serial_pci_class_initfn(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
}
+static void multi_2x_serial_pci_class_initfn(ObjectClass *klass, void *data)
+{
+ DeviceClass *dc = DEVICE_CLASS(klass);
+ PCIDeviceClass *pc = PCI_DEVICE_CLASS(klass);
+
+ pc->device_id = PCI_DEVICE_ID_REDHAT_SERIAL2;
+ device_class_set_props(dc, multi_2x_serial_pci_properties);
+}
+
static void multi_4x_serial_pci_class_initfn(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
PCIDeviceClass *pc = PCI_DEVICE_CLASS(klass);
- pc->realize = multi_serial_pci_realize;
- pc->exit = multi_serial_pci_exit;
- pc->vendor_id = PCI_VENDOR_ID_REDHAT;
+
pc->device_id = PCI_DEVICE_ID_REDHAT_SERIAL4;
- pc->revision = 1;
- pc->class_id = PCI_CLASS_COMMUNICATION_SERIAL;
- dc->vmsd = &vmstate_pci_multi_serial;
device_class_set_props(dc, multi_4x_serial_pci_properties);
- set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
}
static void multi_serial_init(Object *o)
@@ -202,6 +205,7 @@ static const TypeInfo multi_serial_pci_types[] = {
.parent = TYPE_PCI_DEVICE,
.instance_size = sizeof(PCIMultiSerialState),
.instance_init = multi_serial_init,
+ .class_init = multi_serial_class_initfn,
.abstract = true,
.interfaces = (InterfaceInfo[]) {
{ INTERFACE_CONVENTIONAL_PCI_DEVICE },
--
2.38.1
This patch hits an assert for me:
qemu-system-x86_64: ../src/qom/object.c:1279: object_class_property_add: Assertion `!object_class_property_find(klass, name)' failed.
with the following backtrace:
Thread 1 "qemu-system-x86" received signal SIGABRT, Aborted.
__pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
44 return INTERNAL_SYSCALL_ERROR_P (ret) ? INTERNAL_SYSCALL_ERRNO (ret) : 0;
(gdb) bt
#0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
#1 0x00007ffff6c91953 in __pthread_kill_internal (signo=6, threadid=<optimized out>) at pthread_kill.c:78
#2 0x00007ffff6c42ea8 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#3 0x00007ffff6c2c53d in __GI_abort () at abort.c:79
#4 0x00007ffff6c2c45c in __assert_fail_base
(fmt=0x7ffff6da5d68 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=0x5555560b9998 "!object_class_property_find(klass, name)", file=0x5555560b94be "../src/qom/object.c", line=1279, function=<optimized out>) at assert.c:92
#5 0x00007ffff6c3b9f6 in __assert_fail
(assertion=assertion@entry=0x5555560b9998 "!object_class_property_find(klass, name)", file=file@entry=0x5555560b94be "../src/qom/object.c", line=line@entry=1279, function=function@entry=0x5555560b9d00 <__PRETTY_FUNCTION__.21> "object_class_property_add") at assert.c:101
#6 0x0000555555dbb690 in object_class_property_add
(klass=klass@entry=0x5555569af820, name=name@entry=0x555555fbe04b "chardev1", type=0x5555561230dd "str", get=0x555555db2ad0 <field_prop_get>, set=0x555555db36d0 <field_prop_set>, release=0x5555559f8f90 <release_chr>, opaque=0x5555563cc900 <multi_4x_serial_pci_properties>) at ../src/qom/object.c:1279
#7 0x0000555555db3e6d in qdev_class_add_property (prop=0x5555563cc900 <multi_4x_serial_pci_properties>, name=0x555555fbe04b "chardev1", klass=0x5555569af820)
at ../src/hw/core/qdev-properties.c:889
#8 device_class_set_props (dc=0x5555569af820, props=<optimized out>) at ../src/hw/core/qdev-properties.c:955
#9 0x0000555555dba590 in type_initialize (ti=0x5555567f4840) at ../src/qom/object.c:1094
#10 object_class_foreach_tramp (key=<optimized out>, value=0x5555567f4840, opaque=0x7fffffffe260) at ../src/qom/object.c:1081
#11 0x00007ffff70bcda8 in g_hash_table_foreach (hash_table=0x5555567b92a0 = {...}, func=0x555555dba530 <object_class_foreach_tramp>, user_data=0x7fffffffe260)
at ../glib/glib/ghash.c:2098
#12 0x0000555555dbaac6 in object_class_foreach (opaque=0x7fffffffe258, include_abstract=false, implements_type=<optimized out>, fn=0x555555db8a70 <object_class_get_list_tramp>)
at ../src/qom/object.c:87
#13 object_class_get_list (implements_type=implements_type@entry=0x55555603bb98 "machine", include_abstract=include_abstract@entry=false) at ../src/qom/object.c:1160
#14 0x0000555555b68df7 in select_machine (errp=<optimized out>, qdict=0x55555684a4e0) at ../src/softmmu/vl.c:1580
#15 qemu_create_machine (qdict=0x55555684a4e0) at ../src/softmmu/vl.c:2015
#16 qemu_init (argc=<optimized out>, argv=0x7fffffffe548) at ../src/softmmu/vl.c:3542
#17 0x000055555596f07e in main (argc=<optimized out>, argv=<optimized out>) at ../src/softmmu/main.c:47