qom: let object_new use a module if the type is not present

object_initialize() can use modules (it was added there because
virtio-gpu-device is a child device of virtio-gpu-pci; commit
64f7aece8e, "object_initialize: try module load", 2020-09-15).
object_new() cannot; make things consistent.

qdev_new() is now just a simple wrapper that returns DeviceState.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2024-10-29 10:41:58 +01:00
parent 144d80f69e
commit 02009a12bc
2 changed files with 1 additions and 17 deletions

View File

@ -146,22 +146,6 @@ bool qdev_set_parent_bus(DeviceState *dev, BusState *bus, Error **errp)
DeviceState *qdev_new(const char *name)
{
ObjectClass *oc = object_class_by_name(name);
#ifdef CONFIG_MODULES
if (!oc) {
int rv = module_load_qom(name, &error_fatal);
if (rv > 0) {
oc = object_class_by_name(name);
} else {
error_report("could not find a module for type '%s'", name);
exit(1);
}
}
#endif
if (!oc) {
error_report("unknown type '%s'", name);
abort();
}
return DEVICE(object_new(name));
}

View File

@ -790,7 +790,7 @@ Object *object_new_with_class(ObjectClass *klass)
Object *object_new(const char *typename)
{
TypeImpl *ti = type_get_by_name_noload(typename);
TypeImpl *ti = type_get_or_load_by_name(typename, &error_fatal);
return object_new_with_type(ti);
}