From dadb7625ea382b0372ec8be9fcae8f0aa3f0b6fd Mon Sep 17 00:00:00 2001 From: Zach Reizner Date: Tue, 6 Feb 2018 22:28:36 -0800 Subject: allow plugin to query for KVM extensions The guest may need to check for KVM extensions before blindly using them. TEST=cargo test --features plugin; cargo test -p kvm; ./build_test BUG=chromium:800626 Change-Id: If87b928753cd71adeabac4fc7732c3fce7265834 Reviewed-on: https://chromium-review.googlesource.com/906008 Commit-Ready: Zach Reizner Tested-by: Zach Reizner Reviewed-by: Dylan Reid --- tests/plugin_extensions.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++ tests/plugins.rs | 5 +++++ 2 files changed, 58 insertions(+) create mode 100644 tests/plugin_extensions.c (limited to 'tests') diff --git a/tests/plugin_extensions.c b/tests/plugin_extensions.c new file mode 100644 index 0000000..4e3ea87 --- /dev/null +++ b/tests/plugin_extensions.c @@ -0,0 +1,53 @@ +/* + * Copyright 2018 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "crosvm.h" + +int main(int argc, char** argv) { + struct crosvm *crosvm; + int ret = crosvm_connect(&crosvm); + if (ret) { + fprintf(stderr, "failed to connect to crosvm: %d\n", ret); + return 1; + } + + bool supported; + ret = crosvm_check_extension(crosvm, KVM_CAP_IRQCHIP, &supported); + if (ret) { + fprintf(stderr, "failed to check for KVM extension: %d\n", ret); + return 1; + } + if (!supported) { + fprintf(stderr, "expected KVM extension to be supported\n"); + return 1; + } + + // Assume s390 extensions aren't supported because we shouldn't be running on one. + ret = crosvm_check_extension(crosvm, KVM_CAP_S390_PSW, &supported); + if (ret) { + fprintf(stderr, "failed to check for KVM extension: %d\n", ret); + return 1; + } + if (supported) { + fprintf(stderr, "unexpected KVM extension is supported\n"); + return 1; + } + + return 0; +} diff --git a/tests/plugins.rs b/tests/plugins.rs index 54c4b7d..67383fc 100644 --- a/tests/plugins.rs +++ b/tests/plugins.rs @@ -225,6 +225,11 @@ fn test_irqfd() { test_plugin(include_str!("plugin_irqfd.c")); } +#[test] +fn test_extensions() { + test_plugin(include_str!("plugin_extensions.c")); +} + #[test] fn test_debugregs() { let mini_plugin = MiniPlugin { -- cgit 1.4.1