* [PATCH v2 1/2] tests/qtest: Extract qtest_qom_has_concrete_type() helper
2025-01-30 10:37 [PATCH v2 0/2] tests/qtest: Make qtest_has_accel() generic Philippe Mathieu-Daudé
@ 2025-01-30 10:37 ` Philippe Mathieu-Daudé
2025-01-30 10:37 ` [PATCH v2 2/2] tests/qtest: Make qtest_has_accel() generic Philippe Mathieu-Daudé
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-01-30 10:37 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P . Berrangé, Paolo Bonzini, Bernhard Beschow,
Thomas Huth, Markus Armbruster, Akihiko Odaki, Fabiano Rosas,
Phil Dennis-Jordan, xen-devel, Laurent Vivier,
Philippe Mathieu-Daudé
Extract qtest_qom_has_concrete_type() out of qtest_has_device()
in order to re-use it in the following commit.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
---
tests/qtest/libqtest.c | 89 ++++++++++++++++++++++++------------------
1 file changed, 51 insertions(+), 38 deletions(-)
diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c
index a1e105f27f9..7e9366ad6d5 100644
--- a/tests/qtest/libqtest.c
+++ b/tests/qtest/libqtest.c
@@ -978,6 +978,56 @@ const char *qtest_get_arch(void)
return end + 1;
}
+static bool qtest_qom_has_concrete_type(const char *parent_typename,
+ const char *child_typename,
+ QList **cached_list)
+{
+ QList *list = cached_list ? *cached_list : NULL;
+ const QListEntry *p;
+ QObject *qobj;
+ QString *qstr;
+ QDict *devinfo;
+ int idx;
+
+ if (!list) {
+ QDict *resp;
+ QDict *args;
+ QTestState *qts = qtest_init("-machine none");
+
+ args = qdict_new();
+ qdict_put_bool(args, "abstract", false);
+ qdict_put_str(args, "implements", parent_typename);
+
+ resp = qtest_qmp(qts, "{'execute': 'qom-list-types', 'arguments': %p }",
+ args);
+ g_assert(qdict_haskey(resp, "return"));
+ list = qdict_get_qlist(resp, "return");
+ qobject_ref(list);
+ qobject_unref(resp);
+
+ qtest_quit(qts);
+
+ if (cached_list) {
+ *cached_list = list;
+ }
+ }
+
+ for (p = qlist_first(list), idx = 0; p; p = qlist_next(p), idx++) {
+ devinfo = qobject_to(QDict, qlist_entry_obj(p));
+ g_assert(devinfo);
+
+ qobj = qdict_get(devinfo, "name");
+ g_assert(qobj);
+ qstr = qobject_to(QString, qobj);
+ g_assert(qstr);
+ if (g_str_equal(qstring_get_str(qstr), child_typename)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
bool qtest_has_accel(const char *accel_name)
{
if (g_str_equal(accel_name, "tcg")) {
@@ -1757,45 +1807,8 @@ bool qtest_has_machine(const char *machine)
bool qtest_has_device(const char *device)
{
static QList *list;
- const QListEntry *p;
- QObject *qobj;
- QString *qstr;
- QDict *devinfo;
- int idx;
- if (!list) {
- QDict *resp;
- QDict *args;
- QTestState *qts = qtest_init("-machine none");
-
- args = qdict_new();
- qdict_put_bool(args, "abstract", false);
- qdict_put_str(args, "implements", "device");
-
- resp = qtest_qmp(qts, "{'execute': 'qom-list-types', 'arguments': %p }",
- args);
- g_assert(qdict_haskey(resp, "return"));
- list = qdict_get_qlist(resp, "return");
- qobject_ref(list);
- qobject_unref(resp);
-
- qtest_quit(qts);
- }
-
- for (p = qlist_first(list), idx = 0; p; p = qlist_next(p), idx++) {
- devinfo = qobject_to(QDict, qlist_entry_obj(p));
- g_assert(devinfo);
-
- qobj = qdict_get(devinfo, "name");
- g_assert(qobj);
- qstr = qobject_to(QString, qobj);
- g_assert(qstr);
- if (g_str_equal(qstring_get_str(qstr), device)) {
- return true;
- }
- }
-
- return false;
+ return qtest_qom_has_concrete_type("device", device, &list);
}
/*
--
2.47.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] tests/qtest: Make qtest_has_accel() generic
2025-01-30 10:37 [PATCH v2 0/2] tests/qtest: Make qtest_has_accel() generic Philippe Mathieu-Daudé
2025-01-30 10:37 ` [PATCH v2 1/2] tests/qtest: Extract qtest_qom_has_concrete_type() helper Philippe Mathieu-Daudé
@ 2025-01-30 10:37 ` Philippe Mathieu-Daudé
2025-01-31 5:10 ` [PATCH v2 0/2] " Akihiko Odaki
2025-01-31 12:37 ` Fabiano Rosas
3 siblings, 0 replies; 5+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-01-30 10:37 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P . Berrangé, Paolo Bonzini, Bernhard Beschow,
Thomas Huth, Markus Armbruster, Akihiko Odaki, Fabiano Rosas,
Phil Dennis-Jordan, xen-devel, Laurent Vivier,
Philippe Mathieu-Daudé
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".
Reviewed-by: Thomas Huth <thuth@redhat.com>
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..a55ac57ff7e 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_strconcat(accel_name, ACCEL_CLASS_SUFFIX, NULL);
+
+ return qtest_qom_has_concrete_type("accel", accel_type, &list);
}
bool qtest_get_irq(QTestState *s, int num)
--
2.47.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 0/2] tests/qtest: Make qtest_has_accel() generic
2025-01-30 10:37 [PATCH v2 0/2] tests/qtest: Make qtest_has_accel() generic Philippe Mathieu-Daudé
2025-01-30 10:37 ` [PATCH v2 1/2] tests/qtest: Extract qtest_qom_has_concrete_type() helper Philippe Mathieu-Daudé
2025-01-30 10:37 ` [PATCH v2 2/2] tests/qtest: Make qtest_has_accel() generic Philippe Mathieu-Daudé
@ 2025-01-31 5:10 ` Akihiko Odaki
2025-01-31 12:37 ` Fabiano Rosas
3 siblings, 0 replies; 5+ messages in thread
From: Akihiko Odaki @ 2025-01-31 5:10 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Daniel P . Berrangé, Paolo Bonzini, Bernhard Beschow,
Thomas Huth, Markus Armbruster, Fabiano Rosas, Phil Dennis-Jordan,
xen-devel, Laurent Vivier
On 2025/01/30 19:37, Philippe Mathieu-Daudé wrote:
> (Series fully reviewed)
>
> Since v1:
> - Use g_strconcat (Akihiko)
>
> In preparation of running QTests using HVF on Darwin,
> make qtest_has_accel() generic.
>
> Note, this also allow running other accelerators such
> Xen, WHPX, ...
>
> Philippe Mathieu-Daudé (2):
> tests/qtest: Extract qtest_qom_has_concrete_type() helper
> tests/qtest: Make qtest_has_accel() generic
>
> tests/qtest/libqtest.c | 110 +++++++++++++++++++++++------------------
> 1 file changed, 61 insertions(+), 49 deletions(-)
>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 0/2] tests/qtest: Make qtest_has_accel() generic
2025-01-30 10:37 [PATCH v2 0/2] tests/qtest: Make qtest_has_accel() generic Philippe Mathieu-Daudé
` (2 preceding siblings ...)
2025-01-31 5:10 ` [PATCH v2 0/2] " Akihiko Odaki
@ 2025-01-31 12:37 ` Fabiano Rosas
3 siblings, 0 replies; 5+ messages in thread
From: Fabiano Rosas @ 2025-01-31 12:37 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Daniel P . Berrangé, Paolo Bonzini, Bernhard Beschow,
Thomas Huth, Markus Armbruster, Akihiko Odaki, Phil Dennis-Jordan,
xen-devel, Laurent Vivier, Philippe Mathieu-Daudé
Philippe Mathieu-Daudé <philmd@linaro.org> writes:
> (Series fully reviewed)
>
> Since v1:
> - Use g_strconcat (Akihiko)
>
> In preparation of running QTests using HVF on Darwin,
> make qtest_has_accel() generic.
>
> Note, this also allow running other accelerators such
> Xen, WHPX, ...
>
> Philippe Mathieu-Daudé (2):
> tests/qtest: Extract qtest_qom_has_concrete_type() helper
> tests/qtest: Make qtest_has_accel() generic
>
> tests/qtest/libqtest.c | 110 +++++++++++++++++++++++------------------
> 1 file changed, 61 insertions(+), 49 deletions(-)
Queued, thanks!
^ permalink raw reply [flat|nested] 5+ messages in thread