Skip to content

Commit

Permalink
qdev: device module support
Browse files Browse the repository at this point in the history
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
  • Loading branch information
kraxel committed Jul 7, 2020
1 parent 0f8198f commit 7ab6e7f
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 7 deletions.
6 changes: 4 additions & 2 deletions hw/core/qdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}

Expand All @@ -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));
}

Expand Down
5 changes: 3 additions & 2 deletions qdev-monitor.c
Original file line number Diff line number Diff line change
Expand Up @@ -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++) {
Expand Down Expand Up @@ -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);
}
}

Expand Down
3 changes: 2 additions & 1 deletion qom/qom-qmp-cmds.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down
4 changes: 2 additions & 2 deletions softmmu/vl.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 *
Expand Down

0 comments on commit 7ab6e7f

Please sign in to comment.