Revision 51a92333

b/hw/pci_bridge.c
37 37
    return bus->parent_dev;
38 38
}
39 39

  
40
static void pci_register_secondary_bus(PCIBus *parent,
41
                                       PCIBus *bus,
42
                                       PCIDevice *dev,
43
                                       pci_map_irq_fn map_irq,
44
                                       const char *name)
45
{
46
    qbus_create_inplace(&bus->qbus, &pci_bus_info, &dev->qdev, name);
47
    bus->map_irq = map_irq;
48
    bus->parent_dev = dev;
49

  
50
    QLIST_INIT(&bus->child);
51
    QLIST_INSERT_HEAD(&parent->child, bus, sibling);
52
}
53

  
54
static void pci_unregister_secondary_bus(PCIBus *bus)
55
{
56
    assert(QLIST_EMPTY(&bus->child));
57
    QLIST_REMOVE(bus, sibling);
58
}
59

  
60 40
static uint32_t pci_config_get_io_base(PCIDevice *d,
61 41
                                       uint32_t base, uint32_t base_upper16)
62 42
{
......
163 143
static int pci_bridge_exitfn(PCIDevice *pci_dev)
164 144
{
165 145
    PCIBridge *s = DO_UPCAST(PCIBridge, dev, pci_dev);
166
    pci_unregister_secondary_bus(&s->sec_bus);
146
    assert(QLIST_EMPTY(&s->sec_bus.child));
147
    QLIST_REMOVE(&s->sec_bus, sibling);
167 148
    return 0;
168 149
}
169 150

  
......
173 154
{
174 155
    PCIDevice *dev;
175 156
    PCIBridge *s;
157
    PCIBus *sec_bus;
176 158

  
177 159
    dev = pci_create_multifunction(bus, devfn, multifunction, "pci-bridge");
178 160
    qdev_prop_set_uint32(&dev->qdev, "vendorid", vid);
......
180 162
    qdev_init_nofail(&dev->qdev);
181 163

  
182 164
    s = DO_UPCAST(PCIBridge, dev, dev);
183
    pci_register_secondary_bus(bus, &s->sec_bus, &s->dev, map_irq, name);
165
    sec_bus = &s->sec_bus;
166
    qbus_create_inplace(&sec_bus->qbus, &pci_bus_info, &dev->qdev, name);
167
    sec_bus->parent_dev = dev;
168
    sec_bus->map_irq = map_irq;
169

  
170
    QLIST_INIT(&sec_bus->child);
171
    QLIST_INSERT_HEAD(&bus->child, sec_bus, sibling);
184 172
    return &s->sec_bus;
185 173
}
186 174

  

Also available in: Unified diff