Skip to content

Commit 7ab6e7f

Browse files
committed
qdev: device module support
Hook module loading into the places where we need it when building devices as modules. Signed-off-by: Gerd Hoffmann <[email protected]> Message-id: [email protected]
1 parent 0f8198f commit 7ab6e7f

File tree

4 files changed

+11
-7
lines changed

4 files changed

+11
-7
lines changed

hw/core/qdev.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,9 @@ void qdev_set_parent_bus(DeviceState *dev, BusState *bus)
137137
*/
138138
DeviceState *qdev_new(const char *name)
139139
{
140+
if (!object_class_by_name(name)) {
141+
module_load_qom_one(name);
142+
}
140143
return DEVICE(object_new(name));
141144
}
142145

@@ -147,10 +150,9 @@ DeviceState *qdev_new(const char *name)
147150
*/
148151
DeviceState *qdev_try_new(const char *name)
149152
{
150-
if (!object_class_by_name(name)) {
153+
if (!module_object_class_by_name(name)) {
151154
return NULL;
152155
}
153-
154156
return DEVICE(object_new(name));
155157
}
156158

qdev-monitor.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ static void qdev_print_devinfos(bool show_no_user)
147147
int i;
148148
bool cat_printed;
149149

150+
module_load_qom_all();
150151
list = object_class_get_list_sorted(TYPE_DEVICE, false);
151152

152153
for (i = 0; i <= DEVICE_CATEGORY_MAX; i++) {
@@ -215,13 +216,13 @@ static DeviceClass *qdev_get_device_class(const char **driver, Error **errp)
215216
DeviceClass *dc;
216217
const char *original_name = *driver;
217218

218-
oc = object_class_by_name(*driver);
219+
oc = module_object_class_by_name(*driver);
219220
if (!oc) {
220221
const char *typename = find_typename_by_alias(*driver);
221222

222223
if (typename) {
223224
*driver = typename;
224-
oc = object_class_by_name(*driver);
225+
oc = module_object_class_by_name(*driver);
225226
}
226227
}
227228

qom/qom-qmp-cmds.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ ObjectTypeInfoList *qmp_qom_list_types(bool has_implements,
116116
{
117117
ObjectTypeInfoList *ret = NULL;
118118

119+
module_load_qom_all();
119120
object_class_foreach(qom_list_types_tramp, implements, abstract, &ret);
120121

121122
return ret;
@@ -130,7 +131,7 @@ ObjectPropertyInfoList *qmp_device_list_properties(const char *typename,
130131
ObjectPropertyIterator iter;
131132
ObjectPropertyInfoList *prop_list = NULL;
132133

133-
klass = object_class_by_name(typename);
134+
klass = module_object_class_by_name(typename);
134135
if (klass == NULL) {
135136
error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
136137
"Device '%s' not found", typename);

softmmu/vl.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1772,8 +1772,8 @@ static bool vga_interface_available(VGAInterfaceType t)
17721772

17731773
assert(t < VGA_TYPE_MAX);
17741774
return !ti->class_names[0] ||
1775-
object_class_by_name(ti->class_names[0]) ||
1776-
object_class_by_name(ti->class_names[1]);
1775+
module_object_class_by_name(ti->class_names[0]) ||
1776+
module_object_class_by_name(ti->class_names[1]);
17771777
}
17781778

17791779
static const char *

0 commit comments

Comments
 (0)