mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-28 05:50:37 +00:00
qdev: simplify (de)allocation of buses
All conditional deallocation can now be done with object_delete. Remove the @qom_allocated and @glib_allocated fields; replace the latter with a direct assignment of the @free function pointer. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
fde9bf4470
commit
64b625f4b2
2
hw/pci.c
2
hw/pci.c
@ -301,9 +301,9 @@ PCIBus *pci_bus_new(DeviceState *parent, const char *name,
|
||||
PCIBus *bus;
|
||||
|
||||
bus = g_malloc0(sizeof(*bus));
|
||||
bus->qbus.glib_allocated = true;
|
||||
pci_bus_new_inplace(bus, parent, name, address_space_mem,
|
||||
address_space_io, devfn_min);
|
||||
OBJECT(bus)->free = g_free;
|
||||
return bus;
|
||||
}
|
||||
|
||||
|
@ -106,17 +106,12 @@ typedef struct BusChild {
|
||||
|
||||
/**
|
||||
* BusState:
|
||||
* @qom_allocated: Indicates whether the object was allocated by QOM.
|
||||
* @glib_allocated: Indicates whether the object was initialized in-place
|
||||
* yet is expected to be freed with g_free().
|
||||
*/
|
||||
struct BusState {
|
||||
Object obj;
|
||||
DeviceState *parent;
|
||||
const char *name;
|
||||
int allow_hotplug;
|
||||
bool qom_allocated;
|
||||
bool glib_allocated;
|
||||
int max_index;
|
||||
QTAILQ_HEAD(ChildrenHead, BusChild) children;
|
||||
QLIST_ENTRY(BusState) sibling;
|
||||
|
10
hw/qdev.c
10
hw/qdev.c
@ -454,7 +454,6 @@ BusState *qbus_create(const char *typename, DeviceState *parent, const char *nam
|
||||
BusState *bus;
|
||||
|
||||
bus = BUS(object_new(typename));
|
||||
bus->qom_allocated = true;
|
||||
|
||||
bus->parent = parent;
|
||||
bus->name = name ? g_strdup(name) : NULL;
|
||||
@ -465,14 +464,7 @@ BusState *qbus_create(const char *typename, DeviceState *parent, const char *nam
|
||||
|
||||
void qbus_free(BusState *bus)
|
||||
{
|
||||
if (bus->qom_allocated) {
|
||||
object_delete(OBJECT(bus));
|
||||
} else {
|
||||
object_finalize(OBJECT(bus));
|
||||
if (bus->glib_allocated) {
|
||||
g_free(bus);
|
||||
}
|
||||
}
|
||||
object_delete(OBJECT(bus));
|
||||
}
|
||||
|
||||
static char *bus_get_fw_dev_path(BusState *bus, DeviceState *dev)
|
||||
|
@ -274,7 +274,7 @@ static void main_system_bus_create(void)
|
||||
main_system_bus = g_malloc0(system_bus_info.instance_size);
|
||||
qbus_create_inplace(main_system_bus, TYPE_SYSTEM_BUS, NULL,
|
||||
"main-system-bus");
|
||||
main_system_bus->glib_allocated = true;
|
||||
OBJECT(main_system_bus)->free = g_free;
|
||||
object_property_add_child(container_get(qdev_get_machine(),
|
||||
"/unattached"),
|
||||
"sysbus", OBJECT(main_system_bus), NULL);
|
||||
|
Loading…
Reference in New Issue
Block a user