[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC 3/3] qom: Improve error message in module_object_class_by_name()
From: |
Jose R. Ziviani |
Subject: |
[RFC 3/3] qom: Improve error message in module_object_class_by_name() |
Date: |
Wed, 30 Jun 2021 20:27:49 -0300 |
module_object_class_by_name() calls module_load_qom_one if the object
is provided by a dynamically linked library. Such library might not be
available at this moment - for instance, it can be a package not yet
installed. Thus, instead of assert error messages, this patch outputs
more friendly messages.
Current error messages:
$ ./qemu-system-x86_64 -machine q35 -accel tcg -kernel /boot/vmlinuz
...
ERROR:../accel/accel-softmmu.c:82:accel_init_ops_interfaces: assertion failed:
(ops != NULL)
Bail out! ERROR:../accel/accel-softmmu.c:82:accel_init_ops_interfaces:
assertion failed: (ops != NULL)
[1] 31964 IOT instruction (core dumped) ./qemu-system-x86_64 ...
New error message:
$ ./qemu-system-x86_64 -machine q35 -accel tcg -kernel /boot/vmlinuz
accel-tcg-x86_64 module is missing, install the package or config the library
path correctly.
$ make check
...
Running test qtest-x86_64/test-filter-mirror
Running test qtest-x86_64/endianness-test
accel-qtest-x86_64 module is missing, install the package or config the library
path correctly.
accel-qtest-x86_64 module is missing, install the package or config the library
path correctly.
accel-qtest-x86_64 module is missing, install the package or config the library
path correctly.
accel-qtest-x86_64 module is missing, install the package or config the library
path correctly.
accel-qtest-x86_64 module is missing, install the package or config the library
path correctly.
accel-tcg-x86_64 module is missing, install the package or config the library
path correctly.
...
Signed-off-by: Jose R. Ziviani <jziviani@suse.de>
---
qom/object.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/qom/object.c b/qom/object.c
index 6a01d56546..2d40245af9 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -1024,6 +1024,24 @@ ObjectClass *object_class_by_name(const char *typename)
return type->class;
}
+char *get_accel_module_name(const char *ac_name);
+
+char *get_accel_module_name(const char *ac_name)
+{
+ size_t len = strlen(ac_name);
+ char *module_name = NULL;
+
+ if (strncmp(ac_name, "tcg-accel-ops", len) == 0) {
+#ifdef CONFIG_TCG_MODULAR
+ module_name = g_strdup_printf("%s%s", "accel-tcg-", "x86_64");
+#endif
+ } else if (strncmp(ac_name, "qtest-accel-ops", len) == 0) {
+ module_name = g_strdup_printf("%s%s", "accel-qtest-", "x86_64");
+ }
+
+ return module_name;
+}
+
ObjectClass *module_object_class_by_name(const char *typename)
{
ObjectClass *oc;
@@ -1031,8 +1049,20 @@ ObjectClass *module_object_class_by_name(const char
*typename)
oc = object_class_by_name(typename);
#ifdef CONFIG_MODULES
if (!oc) {
+ char *module_name;
module_load_qom_one(typename);
oc = object_class_by_name(typename);
+ module_name = get_accel_module_name(typename);
+ if (module_name) {
+ if (!module_is_loaded(module_name)) {
+ fprintf(stderr, "%s module is missing, install the "
+ "package or config the library path "
+ "correctly.\n", module_name);
+ g_free(module_name);
+ exit(1);
+ }
+ g_free(module_name);
+ }
}
#endif
return oc;
--
2.32.0