Message ID | 20250128111821.93767-3-philmd@linaro.org |
---|---|
State | New |
Headers | show |
Series | None | expand |
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>
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)
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)
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(-)