qdev: Assert onboard devices all get realized properly
This would have caught some of the bugs I just fixed. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-Id: <20200609122339.937862-25-armbru@redhat.com>
This commit is contained in:
		
							parent
							
								
									007d1dbf72
								
							
						
					
					
						commit
						dfe8c79c44
					
				@ -427,6 +427,19 @@ void qdev_init_nofail(DeviceState *dev)
 | 
				
			|||||||
    object_unref(OBJECT(dev));
 | 
					    object_unref(OBJECT(dev));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int qdev_assert_realized_properly(Object *obj, void *opaque)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    DeviceState *dev = DEVICE(object_dynamic_cast(obj, TYPE_DEVICE));
 | 
				
			||||||
 | 
					    DeviceClass *dc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (dev) {
 | 
				
			||||||
 | 
					        dc = DEVICE_GET_CLASS(dev);
 | 
				
			||||||
 | 
					        assert(dev->realized);
 | 
				
			||||||
 | 
					        assert(dev->parent_bus || !dc->bus_type);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void qdev_machine_creation_done(void)
 | 
					void qdev_machine_creation_done(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
@ -434,6 +447,9 @@ void qdev_machine_creation_done(void)
 | 
				
			|||||||
     * only create hotpluggable devices
 | 
					     * only create hotpluggable devices
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    qdev_hotplug = true;
 | 
					    qdev_hotplug = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    object_child_foreach_recursive(object_get_root(),
 | 
				
			||||||
 | 
					                                   qdev_assert_realized_properly, NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool qdev_machine_modified(void)
 | 
					bool qdev_machine_modified(void)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user