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;
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user