Since commit b14a0b7469f ("accel: Use QOM classes for accel types")
accelerators are registered as QOM objects. Use QOM as a generic
API to query for available accelerators. This is in particular
useful to query hardware accelerators such HFV, Xen or WHPX which
otherwise have their definitions poisoned in "exec/poison.h".
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
tests/qtest/libqtest.c | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c
index 7e9366ad6d5..3071dedeff6 100644
--- a/tests/qtest/libqtest.c
+++ b/tests/qtest/libqtest.c
@@ -30,6 +30,7 @@
#include "libqtest.h"
#include "libqmp.h"
+#include "qemu/accel.h"
#include "qemu/ctype.h"
#include "qemu/cutils.h"
#include "qemu/sockets.h"
@@ -1030,13 +1031,10 @@ static bool qtest_qom_has_concrete_type(const char *parent_typename,
bool qtest_has_accel(const char *accel_name)
{
- if (g_str_equal(accel_name, "tcg")) {
-#if defined(CONFIG_TCG)
- return true;
-#else
- return false;
-#endif
- } else if (g_str_equal(accel_name, "kvm")) {
+ static QList *list;
+ g_autofree char *accel_type = NULL;
+
+ if (g_str_equal(accel_name, "kvm")) {
int i;
const char *arch = qtest_get_arch();
const char *targets[] = { CONFIG_KVM_TARGETS };
@@ -1048,11 +1046,12 @@ bool qtest_has_accel(const char *accel_name)
}
}
}
- } else {
- /* not implemented */
- g_assert_not_reached();
+ return false;
}
- return false;
+
+ accel_type = g_strdup_printf("%s%s", accel_name, ACCEL_CLASS_SUFFIX);
+
+ return qtest_qom_has_concrete_type("accel", accel_type, &list);
}
bool qtest_get_irq(QTestState *s, int num)
--
2.47.1
On 2025/01/28 20:18, Philippe Mathieu-Daudé wrote:
> Since commit b14a0b7469f ("accel: Use QOM classes for accel types")
> accelerators are registered as QOM objects. Use QOM as a generic
> API to query for available accelerators. This is in particular
> useful to query hardware accelerators such HFV, Xen or WHPX which
> otherwise have their definitions poisoned in "exec/poison.h".
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> tests/qtest/libqtest.c | 21 ++++++++++-----------
> 1 file changed, 10 insertions(+), 11 deletions(-)
>
> diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c
> index 7e9366ad6d5..3071dedeff6 100644
> --- a/tests/qtest/libqtest.c
> +++ b/tests/qtest/libqtest.c
> @@ -30,6 +30,7 @@
>
> #include "libqtest.h"
> #include "libqmp.h"
> +#include "qemu/accel.h"
> #include "qemu/ctype.h"
> #include "qemu/cutils.h"
> #include "qemu/sockets.h"
> @@ -1030,13 +1031,10 @@ static bool qtest_qom_has_concrete_type(const char *parent_typename,
>
> bool qtest_has_accel(const char *accel_name)
> {
> - if (g_str_equal(accel_name, "tcg")) {
> -#if defined(CONFIG_TCG)
> - return true;
> -#else
> - return false;
> -#endif
> - } else if (g_str_equal(accel_name, "kvm")) {
> + static QList *list;
> + g_autofree char *accel_type = NULL;
> +
> + if (g_str_equal(accel_name, "kvm")) {
> int i;
> const char *arch = qtest_get_arch();
> const char *targets[] = { CONFIG_KVM_TARGETS };
> @@ -1048,11 +1046,12 @@ bool qtest_has_accel(const char *accel_name)
> }
> }
> }
> - } else {
> - /* not implemented */
> - g_assert_not_reached();
> + return false;
> }
> - return false;
> +
> + accel_type = g_strdup_printf("%s%s", accel_name, ACCEL_CLASS_SUFFIX);
g_strconcat() will make this a bit shorter.
> +
> + return qtest_qom_has_concrete_type("accel", accel_type, &list);
> }
>
> bool qtest_get_irq(QTestState *s, int num)
On 28/01/2025 12.18, Philippe Mathieu-Daudé wrote:
> Since commit b14a0b7469f ("accel: Use QOM classes for accel types")
> accelerators are registered as QOM objects. Use QOM as a generic
> API to query for available accelerators. This is in particular
> useful to query hardware accelerators such HFV, Xen or WHPX which
> otherwise have their definitions poisoned in "exec/poison.h".
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> tests/qtest/libqtest.c | 21 ++++++++++-----------
> 1 file changed, 10 insertions(+), 11 deletions(-)
>
> diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c
> index 7e9366ad6d5..3071dedeff6 100644
> --- a/tests/qtest/libqtest.c
> +++ b/tests/qtest/libqtest.c
> @@ -30,6 +30,7 @@
>
> #include "libqtest.h"
> #include "libqmp.h"
> +#include "qemu/accel.h"
> #include "qemu/ctype.h"
> #include "qemu/cutils.h"
> #include "qemu/sockets.h"
> @@ -1030,13 +1031,10 @@ static bool qtest_qom_has_concrete_type(const char *parent_typename,
>
> bool qtest_has_accel(const char *accel_name)
> {
> - if (g_str_equal(accel_name, "tcg")) {
> -#if defined(CONFIG_TCG)
> - return true;
> -#else
> - return false;
> -#endif
> - } else if (g_str_equal(accel_name, "kvm")) {
> + static QList *list;
> + g_autofree char *accel_type = NULL;
> +
> + if (g_str_equal(accel_name, "kvm")) {
> int i;
> const char *arch = qtest_get_arch();
> const char *targets[] = { CONFIG_KVM_TARGETS };
> @@ -1048,11 +1046,12 @@ bool qtest_has_accel(const char *accel_name)
> }
> }
> }
> - } else {
> - /* not implemented */
> - g_assert_not_reached();
> + return false;
> }
> - return false;
> +
> + accel_type = g_strdup_printf("%s%s", accel_name, ACCEL_CLASS_SUFFIX);
> +
> + return qtest_qom_has_concrete_type("accel", accel_type, &list);
> }
Nice!
Reviewed-by: Thomas Huth <thuth@redhat.com>
© 2016 - 2026 Red Hat, Inc.