On Mon, Nov 25, 2013 at 05:48:42PM -0500, Bandan Das wrote: > Relocate some stuff to avoid forward declarations and use the > realize and unrealize hooks to call into register and unregister > vmstate_pcibus > respectively > > Signed-off-by: Bandan Das <b...@redhat.com>
Acked-by: Michael S. Tsirkin <m...@redhat.com> > --- > hw/pci/pci.c | 49 ++++++++++++++++++++++++++++--------------------- > 1 file changed, 28 insertions(+), 21 deletions(-) > > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > index 49eca95..a43f84f 100644 > --- a/hw/pci/pci.c > +++ b/hw/pci/pci.c > @@ -47,7 +47,6 @@ static void pcibus_dev_print(Monitor *mon, DeviceState > *dev, int indent); > static char *pcibus_get_dev_path(DeviceState *dev); > static char *pcibus_get_fw_dev_path(DeviceState *dev); > static int pcibus_reset(BusState *qbus); > -static void pci_bus_finalize(Object *obj); > > static Property pci_props[] = { > DEFINE_PROP_PCI_DEVFN("addr", PCIDevice, devfn, -1), > @@ -60,6 +59,32 @@ static Property pci_props[] = { > DEFINE_PROP_END_OF_LIST() > }; > > +static const VMStateDescription vmstate_pcibus = { > + .name = "PCIBUS", > + .version_id = 1, > + .minimum_version_id = 1, > + .minimum_version_id_old = 1, > + .fields = (VMStateField[]) { > + VMSTATE_INT32_EQUAL(nirq, PCIBus), > + VMSTATE_VARRAY_INT32(irq_count, PCIBus, > + nirq, 0, vmstate_info_int32, > + int32_t), > + VMSTATE_END_OF_LIST() > + } > +}; > + > +static void pci_bus_realize(BusState *qbus, Error **errp) > +{ > + PCIBus *bus = DO_UPCAST(PCIBus, qbus, qbus); > + vmstate_register(NULL, -1, &vmstate_pcibus, bus); > +} > + > +static void pci_bus_unrealize(BusState *qbus, Error **errp) > +{ > + PCIBus *bus = DO_UPCAST(PCIBus, qbus, qbus); > + vmstate_unregister(NULL, &vmstate_pcibus, bus); > +} > + > static void pci_bus_class_init(ObjectClass *klass, void *data) > { > BusClass *k = BUS_CLASS(klass); > @@ -67,6 +92,8 @@ static void pci_bus_class_init(ObjectClass *klass, void > *data) > k->print_dev = pcibus_dev_print; > k->get_dev_path = pcibus_get_dev_path; > k->get_fw_dev_path = pcibus_get_fw_dev_path; > + k->realize = pci_bus_realize; > + k->unrealize = pci_bus_unrealize; > k->reset = pcibus_reset; > } > > @@ -74,7 +101,6 @@ static const TypeInfo pci_bus_info = { > .name = TYPE_PCI_BUS, > .parent = TYPE_BUS, > .instance_size = sizeof(PCIBus), > - .instance_finalize = pci_bus_finalize, > .class_init = pci_bus_class_init, > }; > > @@ -94,17 +120,6 @@ static uint16_t pci_default_sub_device_id = > PCI_SUBDEVICE_ID_QEMU; > > static QLIST_HEAD(, PCIHostState) pci_host_bridges; > > -static const VMStateDescription vmstate_pcibus = { > - .name = "PCIBUS", > - .version_id = 1, > - .minimum_version_id = 1, > - .minimum_version_id_old = 1, > - .fields = (VMStateField []) { > - VMSTATE_INT32_EQUAL(nirq, PCIBus), > - VMSTATE_VARRAY_INT32(irq_count, PCIBus, nirq, 0, vmstate_info_int32, > int32_t), > - VMSTATE_END_OF_LIST() > - } > -}; > static int pci_bar(PCIDevice *d, int reg) > { > uint8_t type; > @@ -300,8 +315,6 @@ static void pci_bus_init(PCIBus *bus, DeviceState *parent, > QLIST_INIT(&bus->child); > > pci_host_bus_register(bus, parent); > - > - vmstate_register(NULL, -1, &vmstate_pcibus, bus); > } > > bool pci_bus_is_express(PCIBus *bus) > @@ -377,12 +390,6 @@ int pci_bus_num(PCIBus *s) > return s->parent_dev->config[PCI_SECONDARY_BUS]; > } > > -static void pci_bus_finalize(Object *obj) > -{ > - PCIBus *bus = PCI_BUS(obj); > - vmstate_unregister(NULL, &vmstate_pcibus, bus); > -} > - > static int get_pci_config_device(QEMUFile *f, void *pv, size_t size) > { > PCIDevice *s = container_of(pv, PCIDevice, config); > -- > 1.8.3.1 >