Thanks. I'm learning the test framework :P Just have a few questions: > -----Original Message----- > From: Chris Wilson [mailto:chris.ickle.wilson@xxxxxxxxx] On Behalf Of Chris > Wilson > Sent: Tuesday, June 21, 2016 2:36 PM > To: intel-gfx@xxxxxxxxxxxxxxxxxxxxx > Cc: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx>; Wang, Zhi A > <zhi.a.wang@xxxxxxxxx> > Subject: [PATCH igt] 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@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; Is there any reason to set errno to zero at this time? :P > + 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); Will i-g-t use SIGALRM in global test framework? If yes, maybe we should check len == -1 && errno == -EINTR or set SA_RESTART in sigaction(SIGALRM). > + 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); > + } Better we could build a command line in buf and system(cmdline) here? :P > + break; > + } > + } > + closedir(dir); > +} > + > +static void unload_i915(void) > +{ > + unbind_fbcon(); > + /* pkill alsact */ > + Is there any reason that we should care about alsact? Are you concerned about sound card configuration tool will cause i915 unload failure? BTW I think maybe it should be alsactl? > + 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