We don't do anything yet other than try to load the module. Initial sanity checks to come. Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> Cc: Zhi Wang <zhi.a.wang@xxxxxxxxx> --- lib/Makefile.sources | 2 + lib/igt_gvt.c | 119 +++++++++++++++++++++++++++++++++++++++++++++++++ lib/igt_gvt.h | 33 ++++++++++++++ tests/Makefile.sources | 1 + tests/gvt_basic.c | 42 +++++++++++++++++ 5 files changed, 197 insertions(+) create mode 100644 lib/igt_gvt.c create mode 100644 lib/igt_gvt.h create mode 100644 tests/gvt_basic.c diff --git a/lib/Makefile.sources b/lib/Makefile.sources index 7f3f8c6..3589e26 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 0000000..5116ee9 --- /dev/null +++ b/lib/igt_gvt.c @@ -0,0 +1,119 @@ +/* + * 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) { + buf[0] = '1'; + buf[1] = '\n'; + write(fd, buf, 2); + close(fd); + } + break; + } + } + closedir(dir); +} + +static void unload_i915(void) +{ + unbind_fbcon(); + /* pkill alsact */ + + system("/sbin/modprobe -s -r i915"); +} + +bool igt_gvt_load_module(void) +{ + if (is_gvt_enabled()) + return true; + + unload_i915(); + 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(); + 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 0000000..18eee20 --- /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 97902d8..1436356 100644 --- a/tests/Makefile.sources +++ b/tests/Makefile.sources @@ -84,6 +84,7 @@ TESTS_progs_M = \ gem_userptr_blits \ gem_verify_cacheing \ gem_write_read_ring_switch \ + gvt_basic \ kms_addfb_basic \ kms_chv_cursor_fail \ kms_cursor_crc \ diff --git a/tests/gvt_basic.c b/tests/gvt_basic.c new file mode 100644 index 0000000..9e17f29 --- /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(); + } +} -- 2.8.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx