mirror of https://github.com/xemu-project/xemu.git
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;
|
PCIBus *bus;
|
||||||
|
|
||||||
bus = g_malloc0(sizeof(*bus));
|
bus = g_malloc0(sizeof(*bus));
|
||||||
bus->qbus.glib_allocated = true;
|
|
||||||
pci_bus_new_inplace(bus, parent, name, address_space_mem,
|
pci_bus_new_inplace(bus, parent, name, address_space_mem,
|
||||||
address_space_io, devfn_min);
|
address_space_io, devfn_min);
|
||||||
|
OBJECT(bus)->free = g_free;
|
||||||
return bus;
|
return bus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -106,17 +106,12 @@ typedef struct BusChild {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BusState:
|
* 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 {
|
struct BusState {
|
||||||
Object obj;
|
Object obj;
|
||||||
DeviceState *parent;
|
DeviceState *parent;
|
||||||
const char *name;
|
const char *name;
|
||||||
int allow_hotplug;
|
int allow_hotplug;
|
||||||
bool qom_allocated;
|
|
||||||
bool glib_allocated;
|
|
||||||
int max_index;
|
int max_index;
|
||||||
QTAILQ_HEAD(ChildrenHead, BusChild) children;
|
QTAILQ_HEAD(ChildrenHead, BusChild) children;
|
||||||
QLIST_ENTRY(BusState) sibling;
|
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;
|
BusState *bus;
|
||||||
|
|
||||||
bus = BUS(object_new(typename));
|
bus = BUS(object_new(typename));
|
||||||
bus->qom_allocated = true;
|
|
||||||
|
|
||||||
bus->parent = parent;
|
bus->parent = parent;
|
||||||
bus->name = name ? g_strdup(name) : NULL;
|
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)
|
void qbus_free(BusState *bus)
|
||||||
{
|
{
|
||||||
if (bus->qom_allocated) {
|
object_delete(OBJECT(bus));
|
||||||
object_delete(OBJECT(bus));
|
|
||||||
} else {
|
|
||||||
object_finalize(OBJECT(bus));
|
|
||||||
if (bus->glib_allocated) {
|
|
||||||
g_free(bus);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *bus_get_fw_dev_path(BusState *bus, DeviceState *dev)
|
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);
|
main_system_bus = g_malloc0(system_bus_info.instance_size);
|
||||||
qbus_create_inplace(main_system_bus, TYPE_SYSTEM_BUS, NULL,
|
qbus_create_inplace(main_system_bus, TYPE_SYSTEM_BUS, NULL,
|
||||||
"main-system-bus");
|
"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(),
|
object_property_add_child(container_get(qdev_get_machine(),
|
||||||
"/unattached"),
|
"/unattached"),
|
||||||
"sysbus", OBJECT(main_system_bus), NULL);
|
"sysbus", OBJECT(main_system_bus), NULL);
|
||||||
|
|
Loading…
Reference in New Issue