qdev: Connect busses with their parent devices
This makes SysBus part of the root hierarchy and all busses children of their respective parent DeviceState. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
		
							parent
							
								
									0d936928ef
								
							
						
					
					
						commit
						f968fc6892
					
				@ -404,6 +404,7 @@ static void do_qbus_create_inplace(BusState *bus, const char *typename,
 | 
				
			|||||||
    if (parent) {
 | 
					    if (parent) {
 | 
				
			||||||
        QLIST_INSERT_HEAD(&parent->child_bus, bus, sibling);
 | 
					        QLIST_INSERT_HEAD(&parent->child_bus, bus, sibling);
 | 
				
			||||||
        parent->num_child_bus++;
 | 
					        parent->num_child_bus++;
 | 
				
			||||||
 | 
					        object_property_add_child(OBJECT(parent), bus->name, OBJECT(bus), NULL);
 | 
				
			||||||
    } else if (bus != sysbus_get_default()) {
 | 
					    } else if (bus != sysbus_get_default()) {
 | 
				
			||||||
        /* TODO: once all bus devices are qdevified,
 | 
					        /* TODO: once all bus devices are qdevified,
 | 
				
			||||||
           only reset handler for main_system_bus should be registered here. */
 | 
					           only reset handler for main_system_bus should be registered here. */
 | 
				
			||||||
@ -656,6 +657,9 @@ static void device_initfn(Object *obj)
 | 
				
			|||||||
        class = object_class_get_parent(class);
 | 
					        class = object_class_get_parent(class);
 | 
				
			||||||
    } while (class != object_class_by_name(TYPE_DEVICE));
 | 
					    } while (class != object_class_by_name(TYPE_DEVICE));
 | 
				
			||||||
    qdev_prop_set_globals(dev);
 | 
					    qdev_prop_set_globals(dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    object_property_add_link(OBJECT(dev), "parent_bus", TYPE_BUS,
 | 
				
			||||||
 | 
					                             (Object **)&dev->parent_bus, NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Unlink device from bus and free the structure.  */
 | 
					/* Unlink device from bus and free the structure.  */
 | 
				
			||||||
 | 
				
			|||||||
@ -275,6 +275,9 @@ static void main_system_bus_create(void)
 | 
				
			|||||||
    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;
 | 
					    main_system_bus->glib_allocated = true;
 | 
				
			||||||
 | 
					    object_property_add_child(container_get(qdev_get_machine(),
 | 
				
			||||||
 | 
					                                            "/unattached"),
 | 
				
			||||||
 | 
					                              "sysbus", OBJECT(main_system_bus), NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BusState *sysbus_get_default(void)
 | 
					BusState *sysbus_get_default(void)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user