diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2016-06-21 12:14:14 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2016-06-23 21:09:31 +0100 |
commit | 838d0775043774e61f3aa3a7d8ea440a71d521c0 (patch) | |
tree | 41322edf1a70484079b69f603ab38a8e71340b23 | |
parent | d86d6eb281ba99fca1bb39ad3dc05c5681dded5d (diff) |
igt: Add basic framework for GVT-g testing
We don't do anything yet other than try to load the module. Initial
sanity checks to come.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Zhi Wang <zhi.a.wang@intel.com>
-rw-r--r-- | lib/Makefile.sources | 2 | ||||
-rw-r--r-- | lib/igt_gvt.c | 117 | ||||
-rw-r--r-- | lib/igt_gvt.h | 33 | ||||
-rw-r--r-- | tests/Makefile.sources | 1 | ||||
-rw-r--r-- | tests/gvt_basic.c | 42 |
5 files changed, 195 insertions, 0 deletions
diff --git a/lib/Makefile.sources b/lib/Makefile.sources index 7f3f8c6a..3589e26a 100644 --- a/lib/Makefile.sources +++ b/lib/Makefile.sources @@ -14,6 +14,8 @@ libintel_tools_la_SOURCES = \ igt_edid_template.h \ igt_gt.c \ igt_gt.h \ + igt_gvt.c \ + igt_gvt.h \ igt_stats.c \ igt_stats.h \ igt_sysfs.c \ diff --git a/lib/igt_gvt.c b/lib/igt_gvt.c new file mode 100644 index 00000000..0f332d1c --- /dev/null +++ b/lib/igt_gvt.c @@ -0,0 +1,117 @@ +/* + * Copyright © 2016 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include "igt.h" +#include "igt_gvt.h" + +#include <dirent.h> +#include <unistd.h> +#include <fcntl.h> + +static bool is_gvt_enabled(void) +{ + FILE *file; + int value; + bool enabled = false; + + file = fopen("/sys/module/i915/parameters/enable_gvt", "r"); + if (!file) + return false; + + if (fscanf(file, "%d", &value) == 1) + enabled = value; + fclose(file); + + errno = 0; + return enabled; +} + +static void unbind_fbcon(void) +{ + char buf[128]; + const char *path = "/sys/class/vtconsole"; + DIR *dir; + struct dirent *vtcon; + + dir = opendir(path); + if (!dir) + return; + + while ((vtcon = readdir(dir))) { + int fd, len; + + if (strncmp(vtcon->d_name, "vtcon", 5)) + continue; + + sprintf(buf, "%s/%s/name", path, vtcon->d_name); + fd = open(buf, O_RDONLY); + if (fd < 0) + continue; + + len = read(fd, buf, sizeof(buf) - 1); + close(fd); + if (len >= 0) + buf[len] = '\0'; + + if (strstr(buf, "frame buffer device")) { + sprintf(buf, "%s/%s/bind", path, vtcon->d_name); + fd = open(buf, O_WRONLY); + if (fd != -1) { + igt_ignore_warn(write(fd, "1\n", 2)); + close(fd); + } + break; + } + } + closedir(dir); +} + +static void unload_i915(void) +{ + unbind_fbcon(); + /* pkill alsact */ + + igt_ignore_warn(system("/sbin/modprobe -s -r i915")); +} + +bool igt_gvt_load_module(void) +{ + if (is_gvt_enabled()) + return true; + + unload_i915(); + igt_ignore_warn(system("/sbin/modprobe -s i915 enable_gvt=1")); + + return is_gvt_enabled(); +} + +void igt_gvt_unload_module(void) +{ + if (!is_gvt_enabled()) + return; + + unload_i915(); + igt_ignore_warn(system("/sbin/modprobe -s i915 enable_gvt=0")); + + igt_assert(!is_gvt_enabled()); +} diff --git a/lib/igt_gvt.h b/lib/igt_gvt.h new file mode 100644 index 00000000..18eee20c --- /dev/null +++ b/lib/igt_gvt.h @@ -0,0 +1,33 @@ +/* + * Copyright © 2016 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#ifndef IGT_GVT_H +#define IGT_GVT_H + +#include <stdint.h> +#include <stdbool.h> + +bool igt_gvt_load_module(void); +void igt_gvt_unload_module(void); + +#endif /* IGT_GVT_H */ diff --git a/tests/Makefile.sources b/tests/Makefile.sources index 61851e8d..80e9a353 100644 --- a/tests/Makefile.sources +++ b/tests/Makefile.sources @@ -81,6 +81,7 @@ TESTS_progs_M = \ gem_tiled_partial_pwrite_pread \ gem_userptr_blits \ gem_write_read_ring_switch \ + gvt_basic \ kms_addfb_basic \ kms_atomic \ kms_chv_cursor_fail \ diff --git a/tests/gvt_basic.c b/tests/gvt_basic.c new file mode 100644 index 00000000..9e17f299 --- /dev/null +++ b/tests/gvt_basic.c @@ -0,0 +1,42 @@ +/* + * Copyright © 2016 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include "igt.h" +#include "igt_gvt.h" + +IGT_TEST_DESCRIPTION("Basic sanity check of i915 Guest Virtualisation"); + +igt_main +{ + int fd = -1; + + igt_fixture { + igt_require(igt_gvt_load_module()); + fd = drm_open_driver(DRIVER_INTEL); + } + + igt_fixture { + close(fd); + igt_gvt_unload_module(); + } +} |