提交 837d3716 编写于 作者: M Markus Armbruster 提交者: Andreas Färber

sysbus: Set cannot_instantiate_with_device_add_yet

device_add plugs devices into suitable bus.  For "real" buses, that
actually connects the device.  For sysbus, the connections need to be
made separately, and device_add can't do that.  The device would be
left unconnected, and could not possibly work.

Quite a few, but not all sysbus devices already set
cannot_instantiate_with_device_add_yet in their class init function.

Set it in their abstract base's class init function
sysbus_device_class_init(), and remove the now redundant assignments
from device class init functions.
Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
Reviewed-by: NMarcel Apfelbaum <marcel.a@redhat.com>
Signed-off-by: NAndreas Färber <afaerber@suse.de>
上级 efec3dd6
...@@ -934,11 +934,9 @@ static int typhoon_pcihost_init(SysBusDevice *dev) ...@@ -934,11 +934,9 @@ static int typhoon_pcihost_init(SysBusDevice *dev)
static void typhoon_pcihost_class_init(ObjectClass *klass, void *data) static void typhoon_pcihost_class_init(ObjectClass *klass, void *data)
{ {
DeviceClass *dc = DEVICE_CLASS(klass);
SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
k->init = typhoon_pcihost_init; k->init = typhoon_pcihost_init;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
} }
static const TypeInfo typhoon_pcihost_info = { static const TypeInfo typhoon_pcihost_info = {
......
...@@ -390,7 +390,6 @@ static void vpb_sic_class_init(ObjectClass *klass, void *data) ...@@ -390,7 +390,6 @@ static void vpb_sic_class_init(ObjectClass *klass, void *data)
SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
k->init = vpb_sic_init; k->init = vpb_sic_init;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
dc->vmsd = &vmstate_vpb_sic; dc->vmsd = &vmstate_vpb_sic;
} }
......
...@@ -632,7 +632,6 @@ static void pl041_device_class_init(ObjectClass *klass, void *data) ...@@ -632,7 +632,6 @@ static void pl041_device_class_init(ObjectClass *klass, void *data)
k->init = pl041_init; k->init = pl041_init;
set_bit(DEVICE_CATEGORY_SOUND, dc->categories); set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
dc->reset = pl041_device_reset; dc->reset = pl041_device_reset;
dc->vmsd = &vmstate_pl041; dc->vmsd = &vmstate_pl041;
dc->props = pl041_device_properties; dc->props = pl041_device_properties;
......
...@@ -257,6 +257,13 @@ static void sysbus_device_class_init(ObjectClass *klass, void *data) ...@@ -257,6 +257,13 @@ static void sysbus_device_class_init(ObjectClass *klass, void *data)
DeviceClass *k = DEVICE_CLASS(klass); DeviceClass *k = DEVICE_CLASS(klass);
k->init = sysbus_device_init; k->init = sysbus_device_init;
k->bus_type = TYPE_SYSTEM_BUS; k->bus_type = TYPE_SYSTEM_BUS;
/*
* device_add plugs devices into suitable bus. For "real" buses,
* that actually connects the device. For sysbus, the connections
* need to be made separately, and device_add can't do that. The
* device would be left unconnected, and could not possibly work.
*/
k->cannot_instantiate_with_device_add_yet = true;
} }
static const TypeInfo sysbus_device_type_info = { static const TypeInfo sysbus_device_type_info = {
......
...@@ -496,7 +496,6 @@ static void pl110_class_init(ObjectClass *klass, void *data) ...@@ -496,7 +496,6 @@ static void pl110_class_init(ObjectClass *klass, void *data)
k->init = pl110_initfn; k->init = pl110_initfn;
set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
dc->vmsd = &vmstate_pl110; dc->vmsd = &vmstate_pl110;
} }
......
...@@ -381,7 +381,6 @@ static void pl080_class_init(ObjectClass *oc, void *data) ...@@ -381,7 +381,6 @@ static void pl080_class_init(ObjectClass *oc, void *data)
{ {
DeviceClass *dc = DEVICE_CLASS(oc); DeviceClass *dc = DEVICE_CLASS(oc);
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
dc->vmsd = &vmstate_pl080; dc->vmsd = &vmstate_pl080;
} }
......
...@@ -114,7 +114,6 @@ static void kvmclock_class_init(ObjectClass *klass, void *data) ...@@ -114,7 +114,6 @@ static void kvmclock_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass); DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = kvmclock_realize; dc->realize = kvmclock_realize;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
dc->vmsd = &kvmclock_vmsd; dc->vmsd = &kvmclock_vmsd;
} }
......
...@@ -827,7 +827,6 @@ static void vapic_class_init(ObjectClass *klass, void *data) ...@@ -827,7 +827,6 @@ static void vapic_class_init(ObjectClass *klass, void *data)
{ {
DeviceClass *dc = DEVICE_CLASS(klass); DeviceClass *dc = DEVICE_CLASS(klass);
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
dc->reset = vapic_reset; dc->reset = vapic_reset;
dc->vmsd = &vmstate_vapic; dc->vmsd = &vmstate_vapic;
dc->realize = vapic_realize; dc->realize = vapic_realize;
......
...@@ -704,7 +704,6 @@ static void arm_gic_class_init(ObjectClass *klass, void *data) ...@@ -704,7 +704,6 @@ static void arm_gic_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass); DeviceClass *dc = DEVICE_CLASS(klass);
ARMGICClass *agc = ARM_GIC_CLASS(klass); ARMGICClass *agc = ARM_GIC_CLASS(klass);
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
agc->parent_realize = dc->realize; agc->parent_realize = dc->realize;
dc->realize = arm_gic_realize; dc->realize = arm_gic_realize;
} }
......
...@@ -156,7 +156,6 @@ static void arm_gic_common_class_init(ObjectClass *klass, void *data) ...@@ -156,7 +156,6 @@ static void arm_gic_common_class_init(ObjectClass *klass, void *data)
dc->realize = arm_gic_common_realize; dc->realize = arm_gic_common_realize;
dc->props = arm_gic_common_properties; dc->props = arm_gic_common_properties;
dc->vmsd = &vmstate_gic; dc->vmsd = &vmstate_gic;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
} }
static const TypeInfo arm_gic_common_type = { static const TypeInfo arm_gic_common_type = {
......
...@@ -150,7 +150,6 @@ static void kvm_arm_gic_class_init(ObjectClass *klass, void *data) ...@@ -150,7 +150,6 @@ static void kvm_arm_gic_class_init(ObjectClass *klass, void *data)
kgc->parent_reset = dc->reset; kgc->parent_reset = dc->reset;
dc->realize = kvm_arm_gic_realize; dc->realize = kvm_arm_gic_realize;
dc->reset = kvm_arm_gic_reset; dc->reset = kvm_arm_gic_reset;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
} }
static const TypeInfo kvm_arm_gic_info = { static const TypeInfo kvm_arm_gic_info = {
......
...@@ -98,7 +98,6 @@ static void ioapic_common_class_init(ObjectClass *klass, void *data) ...@@ -98,7 +98,6 @@ static void ioapic_common_class_init(ObjectClass *klass, void *data)
dc->realize = ioapic_common_realize; dc->realize = ioapic_common_realize;
dc->vmsd = &vmstate_ioapic_common; dc->vmsd = &vmstate_ioapic_common;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
} }
static const TypeInfo ioapic_common_type = { static const TypeInfo ioapic_common_type = {
......
...@@ -273,7 +273,6 @@ static void pl190_class_init(ObjectClass *klass, void *data) ...@@ -273,7 +273,6 @@ static void pl190_class_init(ObjectClass *klass, void *data)
SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
k->init = pl190_init; k->init = pl190_init;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
dc->reset = pl190_reset; dc->reset = pl190_reset;
dc->vmsd = &vmstate_pl190; dc->vmsd = &vmstate_pl190;
} }
......
...@@ -197,7 +197,6 @@ static void isabus_bridge_class_init(ObjectClass *klass, void *data) ...@@ -197,7 +197,6 @@ static void isabus_bridge_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass); DeviceClass *dc = DEVICE_CLASS(klass);
dc->fw_name = "isa"; dc->fw_name = "isa";
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
} }
static const TypeInfo isabus_bridge_info = { static const TypeInfo isabus_bridge_info = {
......
...@@ -179,7 +179,6 @@ static void l2x0_class_init(ObjectClass *klass, void *data) ...@@ -179,7 +179,6 @@ static void l2x0_class_init(ObjectClass *klass, void *data)
k->init = l2x0_priv_init; k->init = l2x0_priv_init;
dc->vmsd = &vmstate_l2x0; dc->vmsd = &vmstate_l2x0;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
dc->props = l2x0_properties; dc->props = l2x0_properties;
dc->reset = l2x0_priv_reset; dc->reset = l2x0_priv_reset;
} }
......
...@@ -599,7 +599,6 @@ static void fw_cfg_class_init(ObjectClass *klass, void *data) ...@@ -599,7 +599,6 @@ static void fw_cfg_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass); DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = fw_cfg_realize; dc->realize = fw_cfg_realize;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
dc->reset = fw_cfg_reset; dc->reset = fw_cfg_reset;
dc->vmsd = &vmstate_fw_cfg; dc->vmsd = &vmstate_fw_cfg;
dc->props = fw_cfg_properties; dc->props = fw_cfg_properties;
......
...@@ -819,11 +819,9 @@ static const TypeInfo bonito_info = { ...@@ -819,11 +819,9 @@ static const TypeInfo bonito_info = {
static void bonito_pcihost_class_init(ObjectClass *klass, void *data) static void bonito_pcihost_class_init(ObjectClass *klass, void *data)
{ {
DeviceClass *dc = DEVICE_CLASS(klass);
SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
k->init = bonito_pcihost_initfn; k->init = bonito_pcihost_initfn;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
} }
static const TypeInfo bonito_pcihost_info = { static const TypeInfo bonito_pcihost_info = {
......
...@@ -143,10 +143,8 @@ static const TypeInfo grackle_pci_info = { ...@@ -143,10 +143,8 @@ static const TypeInfo grackle_pci_info = {
static void pci_grackle_class_init(ObjectClass *klass, void *data) static void pci_grackle_class_init(ObjectClass *klass, void *data)
{ {
SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
DeviceClass *dc = DEVICE_CLASS(klass);
k->init = pci_grackle_init_device; k->init = pci_grackle_init_device;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
} }
static const TypeInfo grackle_pci_host_info = { static const TypeInfo grackle_pci_host_info = {
......
...@@ -727,7 +727,6 @@ static void i440fx_pcihost_class_init(ObjectClass *klass, void *data) ...@@ -727,7 +727,6 @@ static void i440fx_pcihost_class_init(ObjectClass *klass, void *data)
hc->root_bus_path = i440fx_pcihost_root_bus_path; hc->root_bus_path = i440fx_pcihost_root_bus_path;
dc->realize = i440fx_pcihost_realize; dc->realize = i440fx_pcihost_realize;
dc->fw_name = "pci"; dc->fw_name = "pci";
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
dc->props = i440fx_props; dc->props = i440fx_props;
} }
......
...@@ -215,7 +215,6 @@ static void raven_pcihost_class_init(ObjectClass *klass, void *data) ...@@ -215,7 +215,6 @@ static void raven_pcihost_class_init(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
dc->realize = raven_pcihost_realizefn; dc->realize = raven_pcihost_realizefn;
dc->fw_name = "pci"; dc->fw_name = "pci";
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
} }
static const TypeInfo raven_pcihost_info = { static const TypeInfo raven_pcihost_info = {
......
...@@ -528,11 +528,9 @@ static int spapr_vio_bridge_init(SysBusDevice *dev) ...@@ -528,11 +528,9 @@ static int spapr_vio_bridge_init(SysBusDevice *dev)
static void spapr_vio_bridge_class_init(ObjectClass *klass, void *data) static void spapr_vio_bridge_class_init(ObjectClass *klass, void *data)
{ {
DeviceClass *dc = DEVICE_CLASS(klass);
SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
k->init = spapr_vio_bridge_init; k->init = spapr_vio_bridge_init;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
} }
static const TypeInfo spapr_vio_bridge_info = { static const TypeInfo spapr_vio_bridge_info = {
......
...@@ -182,7 +182,6 @@ static void s390_ipl_class_init(ObjectClass *klass, void *data) ...@@ -182,7 +182,6 @@ static void s390_ipl_class_init(ObjectClass *klass, void *data)
k->init = s390_ipl_init; k->init = s390_ipl_init;
dc->props = s390_ipl_properties; dc->props = s390_ipl_properties;
dc->reset = s390_ipl_reset; dc->reset = s390_ipl_reset;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
} }
static const TypeInfo s390_ipl_info = { static const TypeInfo s390_ipl_info = {
......
...@@ -676,11 +676,9 @@ static int s390_virtio_bridge_init(SysBusDevice *dev) ...@@ -676,11 +676,9 @@ static int s390_virtio_bridge_init(SysBusDevice *dev)
static void s390_virtio_bridge_class_init(ObjectClass *klass, void *data) static void s390_virtio_bridge_class_init(ObjectClass *klass, void *data)
{ {
DeviceClass *dc = DEVICE_CLASS(klass);
SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
k->init = s390_virtio_bridge_init; k->init = s390_virtio_bridge_init;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
} }
static const TypeInfo s390_virtio_bridge_info = { static const TypeInfo s390_virtio_bridge_info = {
......
...@@ -1283,11 +1283,9 @@ static int virtual_css_bridge_init(SysBusDevice *dev) ...@@ -1283,11 +1283,9 @@ static int virtual_css_bridge_init(SysBusDevice *dev)
static void virtual_css_bridge_class_init(ObjectClass *klass, void *data) static void virtual_css_bridge_class_init(ObjectClass *klass, void *data)
{ {
DeviceClass *dc = DEVICE_CLASS(klass);
SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
k->init = virtual_css_bridge_init; k->init = virtual_css_bridge_init;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
} }
static const TypeInfo virtual_css_bridge_info = { static const TypeInfo virtual_css_bridge_info = {
......
...@@ -506,7 +506,6 @@ static void pl181_class_init(ObjectClass *klass, void *data) ...@@ -506,7 +506,6 @@ static void pl181_class_init(ObjectClass *klass, void *data)
sdc->init = pl181_init; sdc->init = pl181_init;
k->vmsd = &vmstate_pl181; k->vmsd = &vmstate_pl181;
k->reset = pl181_reset; k->reset = pl181_reset;
k->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
} }
static const TypeInfo pl181_info = { static const TypeInfo pl181_info = {
......
...@@ -274,7 +274,6 @@ static void arm_mptimer_class_init(ObjectClass *klass, void *data) ...@@ -274,7 +274,6 @@ static void arm_mptimer_class_init(ObjectClass *klass, void *data)
dc->realize = arm_mptimer_realize; dc->realize = arm_mptimer_realize;
dc->vmsd = &vmstate_arm_mptimer; dc->vmsd = &vmstate_arm_mptimer;
dc->reset = arm_mptimer_reset; dc->reset = arm_mptimer_reset;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
dc->props = arm_mptimer_properties; dc->props = arm_mptimer_properties;
} }
......
...@@ -765,7 +765,6 @@ static void hpet_device_class_init(ObjectClass *klass, void *data) ...@@ -765,7 +765,6 @@ static void hpet_device_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass); DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = hpet_realize; dc->realize = hpet_realize;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
dc->reset = hpet_reset; dc->reset = hpet_reset;
dc->vmsd = &vmstate_hpet; dc->vmsd = &vmstate_hpet;
dc->props = hpet_device_properties; dc->props = hpet_device_properties;
......
...@@ -251,7 +251,6 @@ static void pl031_class_init(ObjectClass *klass, void *data) ...@@ -251,7 +251,6 @@ static void pl031_class_init(ObjectClass *klass, void *data)
SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
k->init = pl031_init; k->init = pl031_init;
dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
dc->vmsd = &vmstate_pl031; dc->vmsd = &vmstate_pl031;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册