qdev: device module support
Hook module loading into the places where we need it when building devices as modules. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Message-id: 20200624131045.14512-4-kraxel@redhat.com
This commit is contained in:
parent
0f8198f1b2
commit
7ab6e7fcce
@ -137,6 +137,9 @@ void qdev_set_parent_bus(DeviceState *dev, BusState *bus)
|
||||
*/
|
||||
DeviceState *qdev_new(const char *name)
|
||||
{
|
||||
if (!object_class_by_name(name)) {
|
||||
module_load_qom_one(name);
|
||||
}
|
||||
return DEVICE(object_new(name));
|
||||
}
|
||||
|
||||
@ -147,10 +150,9 @@ DeviceState *qdev_new(const char *name)
|
||||
*/
|
||||
DeviceState *qdev_try_new(const char *name)
|
||||
{
|
||||
if (!object_class_by_name(name)) {
|
||||
if (!module_object_class_by_name(name)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return DEVICE(object_new(name));
|
||||
}
|
||||
|
||||
|
@ -147,6 +147,7 @@ static void qdev_print_devinfos(bool show_no_user)
|
||||
int i;
|
||||
bool cat_printed;
|
||||
|
||||
module_load_qom_all();
|
||||
list = object_class_get_list_sorted(TYPE_DEVICE, false);
|
||||
|
||||
for (i = 0; i <= DEVICE_CATEGORY_MAX; i++) {
|
||||
@ -215,13 +216,13 @@ static DeviceClass *qdev_get_device_class(const char **driver, Error **errp)
|
||||
DeviceClass *dc;
|
||||
const char *original_name = *driver;
|
||||
|
||||
oc = object_class_by_name(*driver);
|
||||
oc = module_object_class_by_name(*driver);
|
||||
if (!oc) {
|
||||
const char *typename = find_typename_by_alias(*driver);
|
||||
|
||||
if (typename) {
|
||||
*driver = typename;
|
||||
oc = object_class_by_name(*driver);
|
||||
oc = module_object_class_by_name(*driver);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -116,6 +116,7 @@ ObjectTypeInfoList *qmp_qom_list_types(bool has_implements,
|
||||
{
|
||||
ObjectTypeInfoList *ret = NULL;
|
||||
|
||||
module_load_qom_all();
|
||||
object_class_foreach(qom_list_types_tramp, implements, abstract, &ret);
|
||||
|
||||
return ret;
|
||||
@ -130,7 +131,7 @@ ObjectPropertyInfoList *qmp_device_list_properties(const char *typename,
|
||||
ObjectPropertyIterator iter;
|
||||
ObjectPropertyInfoList *prop_list = NULL;
|
||||
|
||||
klass = object_class_by_name(typename);
|
||||
klass = module_object_class_by_name(typename);
|
||||
if (klass == NULL) {
|
||||
error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
|
||||
"Device '%s' not found", typename);
|
||||
|
@ -1772,8 +1772,8 @@ static bool vga_interface_available(VGAInterfaceType t)
|
||||
|
||||
assert(t < VGA_TYPE_MAX);
|
||||
return !ti->class_names[0] ||
|
||||
object_class_by_name(ti->class_names[0]) ||
|
||||
object_class_by_name(ti->class_names[1]);
|
||||
module_object_class_by_name(ti->class_names[0]) ||
|
||||
module_object_class_by_name(ti->class_names[1]);
|
||||
}
|
||||
|
||||
static const char *
|
||||
|
Loading…
Reference in New Issue
Block a user