aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meson.build6
-rw-r--r--tests/qtest/libqos/libqtest.h8
-rw-r--r--tests/qtest/libqtest.c27
3 files changed, 41 insertions, 0 deletions
diff --git a/meson.build b/meson.build
index 9ed9a993e2..2c5b53cbe2 100644
--- a/meson.build
+++ b/meson.build
@@ -75,6 +75,12 @@ else
kvm_targets = []
endif
+kvm_targets_c = ''
+if not get_option('kvm').disabled() and targetos == 'linux'
+ kvm_targets_c = '"' + '" ,"'.join(kvm_targets) + '"'
+endif
+config_host_data.set('CONFIG_KVM_TARGETS', kvm_targets_c)
+
accelerator_targets = { 'CONFIG_KVM': kvm_targets }
if cpu in ['aarch64']
diff --git a/tests/qtest/libqos/libqtest.h b/tests/qtest/libqos/libqtest.h
index a68dcd79d4..59e9271195 100644
--- a/tests/qtest/libqos/libqtest.h
+++ b/tests/qtest/libqos/libqtest.h
@@ -589,6 +589,14 @@ bool qtest_big_endian(QTestState *s);
const char *qtest_get_arch(void);
/**
+ * qtest_has_accel:
+ * @accel_name: Accelerator name to check for.
+ *
+ * Returns: true if the accelerator is built in.
+ */
+bool qtest_has_accel(const char *accel_name);
+
+/**
* qtest_add_func:
* @str: Test case path.
* @fn: Test case function
diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c
index 73f6b977a6..25aeea385b 100644
--- a/tests/qtest/libqtest.c
+++ b/tests/qtest/libqtest.c
@@ -922,6 +922,33 @@ const char *qtest_get_arch(void)
return end + 1;
}
+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")) {
+ int i;
+ const char *arch = qtest_get_arch();
+ const char *targets[] = { CONFIG_KVM_TARGETS };
+
+ for (i = 0; i < ARRAY_SIZE(targets); i++) {
+ if (!strncmp(targets[i], arch, strlen(arch))) {
+ if (!access("/dev/kvm", R_OK | W_OK)) {
+ return true;
+ }
+ }
+ }
+ } else {
+ /* not implemented */
+ g_assert_not_reached();
+ }
+ return false;
+}
+
bool qtest_get_irq(QTestState *s, int num)
{
/* dummy operation in order to make sure irq is up to date */