* [igt-dev] [PATCH i-g-t v15] tests: Add a test for device hot unplug
@ 2020-04-15 13:15 Janusz Krzysztofik
2020-04-15 14:25 ` [igt-dev] ✓ Fi.CI.BAT: success for tests: Add a test for device hot unplug (rev4) Patchwork
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Janusz Krzysztofik @ 2020-04-15 13:15 UTC (permalink / raw)
To: igt-dev
Cc: Janusz Krzysztofik, Petri Latvala, intel-gfx, Chris Wilson,
Daniel Vetter
From: Janusz Krzysztofik <janusz.krzysztofik@intel.com>
There is a test which verifies unloading of i915 driver module but no
test exists that checks how a driver behaves when it gets unbound from
a device or when the device gets unplugged. Implement such test using
sysfs interface.
Two minimalistic subtests - "unbind-rebind" and "unplug-rescan" -
perform the named operations on a DRM device which is believed to be
not in use. Another pair of subtests named "hotunbind-lateclose" and
hotunplug-lateclose" do the same on a DRM device while keeping its file
descriptor open and close it thereafter.
v2: Run a subprocess with dummy_load instead of external command
(Antonio).
v3: Run dummy_load from the test process directly (Antonio).
v4: Run dummy_load from inside subtests (Antonio).
v5: Try to restore the device to a working state after each subtest
(Petri, Daniel).
v6: Run workload inside an igt helper subprocess so resources consumed
by the workload are cleaned up automatically on workload subprocess
crash, without affecting test results,
- move the igt helper with workload back from subtests to initial
fixture so workload crash also does not affect test results,
- other cleanups suggested by Katarzyna and Chris.
v7: No changes.
v8: Move workload functions back from fixture to subtests,
- register different actions and different workloads in respective
tables and iterate over those tables while enumerating subtests,
- introduce new subtest flavors by simply omitting module unload step,
- instead of simply requesting bus rescan or not, introduce action
specific device recovery helpers, required specifically with those
new subtests not touching the module,
- split workload functions in two parts, one spawning the workload,
the other waiting for its completion,
- for the new subtests not requiring module unload, run workload
functions directly from the test process and use new workload
completion wait functions in place of subprocess completion wait,
- take more control over logging, longjumps and exit codes in
workload subprocesses,
- add some debug messages for easy progress watching,
- move function API descriptions on top of respective typedefs.
v9: All changes after Daniel's comments - thanks!
- flatten the code, don't try to create a midlayer (Daniel),
- provide minimal subtests that even don't keep device open (Daniel),
- don't use driver unbind in more advanced subtests (Daniel),
- provide subtests with different level of resources allocated
during device unplug (Daniel),
- provide subtests which check driver behavior after device hot
unplug (Daniel).
v10 Rename variables and function arguments to something that
indicates they're file descriptors (Daniel),
- introduce a data structure that contains various file descriptors
and a helper function to set them all (Daniel),
- fix strange indentation (Daniel),
- limit scope to first three subtests as the initial set of tests to
merge (Daniel).
v11 Fix typos in some comments,
- use SPDX license identifier,
- include a per-patch changelog in the commit message (Daniel).
v12 We don't use SPDX license identifiers nor GPL-2.0 in IGT (Petri),
- avoid chipset, make sure we reopen the same device (Chris),
- rename subtest "drm_open-hotunplug" to "hotunplug-lateclose",
- add subtest "hotunbind-lateclose" (less affected by IOMMU issues),
- move some redundant code to helpers,
- reorder some helpers,
- reword some messages and comments,
- clean up headers.
v13 Add test / subtest descriptions (patchwork).
v14 Extract redundant device rescan and reopen code to a 'healthcheck'
helper,
- call igt_abort_on_f() on device reopen failure (Petri),
- if any timeout set with igt_set_timeout() inside a subtest expires,
call igt_abort_on_f() from a follow-up igt_fixture (Petri),
- when running on a i915 device, require GEM and call
igt_abort_on_f() if no usable GEM is detected on device reopen.
v15 Add the test to CI blacklist (Martin).
Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@intel.com>
Cc: Antonio Argenziano <antonio.argenziano@intel.com>
Cc: Petri Latvala <petri.latvala@intel.com>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: Katarzyna Dec <katarzyna.dec@intel.com>
Cc: Martin Peres <martin.peres@linux.intel.com>
Acked-by: Chris Wilson <chris@chris-wilson.co.uk>
---
tests/Makefile.sources | 1 +
tests/core_hotunplug.c | 300 +++++++++++++++++++++++++++++++++++
tests/intel-ci/blacklist.txt | 1 +
tests/meson.build | 1 +
4 files changed, 303 insertions(+)
create mode 100644 tests/core_hotunplug.c
diff --git a/tests/Makefile.sources b/tests/Makefile.sources
index 4e44c98c2..32cbbf4f9 100644
--- a/tests/Makefile.sources
+++ b/tests/Makefile.sources
@@ -18,6 +18,7 @@ TESTS_progs = \
core_getclient \
core_getstats \
core_getversion \
+ core_hotunplug \
core_setmaster \
core_setmaster_vs_auth \
debugfs_test \
diff --git a/tests/core_hotunplug.c b/tests/core_hotunplug.c
new file mode 100644
index 000000000..f9cfc8c3c
--- /dev/null
+++ b/tests/core_hotunplug.c
@@ -0,0 +1,300 @@
+/*
+ * Copyright © 2019 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 <fcntl.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "igt.h"
+#include "igt_device_scan.h"
+#include "igt_kmod.h"
+#include "igt_sysfs.h"
+
+IGT_TEST_DESCRIPTION("Examine behavior of a driver on device hot unplug");
+
+struct hotunplug {
+ struct {
+ int drm;
+ int sysfs_dev;
+ int sysfs_bus;
+ int sysfs_drv;
+ } fd;
+ char *dev_bus_addr;
+};
+
+/* Helpers */
+
+static void prepare_for_unbind(struct hotunplug *priv, char *buf, int buflen)
+{
+ int len;
+
+ igt_assert(buflen);
+
+ priv->fd.sysfs_drv = openat(priv->fd.sysfs_dev, "device/driver",
+ O_DIRECTORY);
+ igt_assert(priv->fd.sysfs_drv >= 0);
+
+ len = readlinkat(priv->fd.sysfs_dev, "device", buf, buflen - 1);
+ buf[len] = '\0';
+ priv->dev_bus_addr = strrchr(buf, '/');
+ igt_assert(priv->dev_bus_addr++);
+
+ /* sysfs_dev no longer needed */
+ close(priv->fd.sysfs_dev);
+}
+
+static void prepare(struct hotunplug *priv, char *buf, int buflen)
+{
+ igt_debug("opening device\n");
+ priv->fd.drm = __drm_open_driver(DRIVER_ANY);
+ igt_assert(priv->fd.drm >= 0);
+
+ priv->fd.sysfs_dev = igt_sysfs_open(priv->fd.drm);
+ igt_assert(priv->fd.sysfs_dev >= 0);
+
+ if (buf) {
+ prepare_for_unbind(priv, buf, buflen);
+ } else {
+ /* prepare for bus rescan */
+ priv->fd.sysfs_bus = openat(priv->fd.sysfs_dev,
+ "device/subsystem", O_DIRECTORY);
+ igt_assert(priv->fd.sysfs_bus >= 0);
+ }
+}
+
+static const char *failure;
+
+/* Unbind the driver from the device */
+static void driver_unbind(int fd_sysfs_drv, const char *dev_bus_addr)
+{
+ failure = "Driver unbind timeout!";
+ igt_set_timeout(60, failure);
+ igt_sysfs_set(fd_sysfs_drv, "unbind", dev_bus_addr);
+ igt_reset_timeout();
+ failure = NULL;
+
+ /* don't close fd_sysfs_drv, it will be used for driver rebinding */
+}
+
+/* Re-bind the driver to the device */
+static void driver_bind(int fd_sysfs_drv, const char *dev_bus_addr)
+{
+ failure = "Driver re-bind timeout!";
+ igt_set_timeout(60, failure);
+ igt_sysfs_set(fd_sysfs_drv, "bind", dev_bus_addr);
+ igt_reset_timeout();
+ failure = NULL;
+
+ close(fd_sysfs_drv);
+}
+
+/* Remove (virtually unplug) the device from its bus */
+static void device_unplug(int fd_sysfs_dev)
+{
+ failure = "Device unplug timeout!";
+ igt_set_timeout(60, failure);
+ igt_sysfs_set(fd_sysfs_dev, "device/remove", "1");
+ igt_reset_timeout();
+ failure = NULL;
+
+ close(fd_sysfs_dev);
+}
+
+/* Re-discover the device by rescanning its bus */
+static void bus_rescan(int fd_sysfs_bus)
+{
+ failure = "Bus rescan timeout!";
+ igt_set_timeout(60, failure);
+ igt_sysfs_set(fd_sysfs_bus, "rescan", "1");
+ igt_reset_timeout();
+ failure = NULL;
+
+ close(fd_sysfs_bus);
+}
+
+static void healthcheck(void)
+{
+ int fd_drm;
+
+ /* device name may have changed, rebuild IGT device list */
+ igt_devices_scan(true);
+
+ igt_debug("reopening the device\n");
+ fd_drm = __drm_open_driver(DRIVER_ANY);
+ igt_abort_on_f(fd_drm < 0, "Device reopen failure");
+
+ if (is_i915_device(fd_drm)) {
+ failure = "GEM failure";
+ igt_require_gem(fd_drm);
+ failure = NULL;
+ }
+
+ close(fd_drm);
+}
+
+static void set_filter_from_device(int fd)
+{
+ const char *filter_type = "sys:";
+ char filter[strlen(filter_type) + PATH_MAX + 1];
+ char *dst = stpcpy(filter, filter_type);
+ char path[PATH_MAX + 1];
+
+ igt_assert(igt_sysfs_path(fd, path, PATH_MAX));
+ strncat(path, "/device", PATH_MAX - strlen(path));
+ igt_assert(realpath(path, dst));
+
+ igt_device_filter_set(filter);
+}
+
+/* Subtests */
+
+static void unbind_rebind(void)
+{
+ struct hotunplug priv;
+ char buf[PATH_MAX];
+
+ prepare(&priv, buf, sizeof(buf));
+
+ igt_debug("closing the device\n");
+ close(priv.fd.drm);
+
+ igt_debug("unbinding the driver from the device\n");
+ driver_unbind(priv.fd.sysfs_drv, priv.dev_bus_addr);
+
+ igt_debug("rebinding the driver to the device\n");
+ driver_bind(priv.fd.sysfs_drv, priv.dev_bus_addr);
+
+ healthcheck();
+}
+
+static void unplug_rescan(void)
+{
+ struct hotunplug priv;
+
+ prepare(&priv, NULL, 0);
+
+ igt_debug("closing the device\n");
+ close(priv.fd.drm);
+
+ igt_debug("unplugging the device\n");
+ device_unplug(priv.fd.sysfs_dev);
+
+ igt_debug("recovering the device\n");
+ bus_rescan(priv.fd.sysfs_bus);
+
+ healthcheck();
+}
+
+static void hotunbind_lateclose(void)
+{
+ struct hotunplug priv;
+ char buf[PATH_MAX];
+
+ prepare(&priv, buf, sizeof(buf));
+
+ igt_debug("hot unbinding the driver from the device\n");
+ driver_unbind(priv.fd.sysfs_drv, priv.dev_bus_addr);
+
+ igt_debug("rebinding the driver to the device\n");
+ driver_bind(priv.fd.sysfs_drv, priv.dev_bus_addr);
+
+ igt_debug("late closing the unbound device instance\n");
+ close(priv.fd.drm);
+
+ healthcheck();
+}
+
+static void hotunplug_lateclose(void)
+{
+ struct hotunplug priv;
+
+ prepare(&priv, NULL, 0);
+
+ igt_debug("hot unplugging the device\n");
+ device_unplug(priv.fd.sysfs_dev);
+
+ igt_debug("recovering the device\n");
+ bus_rescan(priv.fd.sysfs_bus);
+
+ igt_debug("late closing the removed device instance\n");
+ close(priv.fd.drm);
+
+ healthcheck();
+}
+
+/* Main */
+
+igt_main
+{
+ igt_fixture {
+ int fd_drm;
+
+ /**
+ * As subtests must be able to close examined devices
+ * completely, don't use drm_open_driver() as it keeps
+ * a device file descriptor open for exit handler use.
+ */
+ fd_drm = __drm_open_driver(DRIVER_ANY);
+ igt_assert(fd_drm >= 0);
+
+ if (is_i915_device(fd_drm))
+ igt_require_gem(fd_drm);
+
+ /* Make sure subtests always reopen the same device */
+ set_filter_from_device(fd_drm);
+
+ close(fd_drm);
+ }
+
+ igt_describe("Check if the driver can be cleanly unbound from a device believed to be closed");
+ igt_subtest("unbind-rebind")
+ unbind_rebind();
+
+ igt_fixture
+ igt_abort_on_f(failure, "%s\n", failure);
+
+ igt_describe("Check if a device believed to be closed can be cleanly unplugged");
+ igt_subtest("unplug-rescan")
+ unplug_rescan();
+
+ igt_fixture
+ igt_abort_on_f(failure, "%s\n", failure);
+
+ igt_describe("Check if the driver can be cleanly unbound from a still open device, then released");
+ igt_subtest("hotunbind-lateclose")
+ hotunbind_lateclose();
+
+ igt_fixture
+ igt_abort_on_f(failure, "%s\n", failure);
+
+ igt_describe("Check if a still open device can be cleanly unplugged, then released");
+ igt_subtest("hotunplug-lateclose")
+ hotunplug_lateclose();
+
+ igt_fixture
+ igt_abort_on_f(failure, "%s\n", failure);
+}
diff --git a/tests/intel-ci/blacklist.txt b/tests/intel-ci/blacklist.txt
index ee7045f03..201f4b1b4 100644
--- a/tests/intel-ci/blacklist.txt
+++ b/tests/intel-ci/blacklist.txt
@@ -117,3 +117,4 @@ igt@.*@.*pipe-f($|-.*)
# Since 5.7-rc1, this test has produced tens of megabytes of kernel
# logs.
igt@perf_pmu@cpu-hotplug
+igt@core_hotunplug@.*
diff --git a/tests/meson.build b/tests/meson.build
index e882f4dcd..0bdcfbe4c 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -3,6 +3,7 @@ test_progs = [
'core_getclient',
'core_getstats',
'core_getversion',
+ 'core_hotunplug',
'core_setmaster',
'core_setmaster_vs_auth',
'debugfs_test',
--
2.21.1
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply related [flat|nested] 4+ messages in thread* [igt-dev] ✓ Fi.CI.BAT: success for tests: Add a test for device hot unplug (rev4) 2020-04-15 13:15 [igt-dev] [PATCH i-g-t v15] tests: Add a test for device hot unplug Janusz Krzysztofik @ 2020-04-15 14:25 ` Patchwork 2020-04-16 7:09 ` [igt-dev] [PATCH i-g-t v15] tests: Add a test for device hot unplug Petri Latvala 2020-04-16 10:04 ` [igt-dev] ✓ Fi.CI.IGT: success for tests: Add a test for device hot unplug (rev4) Patchwork 2 siblings, 0 replies; 4+ messages in thread From: Patchwork @ 2020-04-15 14:25 UTC (permalink / raw) To: Janusz Krzysztofik; +Cc: igt-dev == Series Details == Series: tests: Add a test for device hot unplug (rev4) URL : https://patchwork.freedesktop.org/series/75692/ State : success == Summary == CI Bug Log - changes from IGT_5591 -> IGTPW_4468 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/index.html Known issues ------------ Here are the changes found in IGTPW_4468 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@i915_selftest@live@hangcheck: - fi-bwr-2160: [PASS][1] -> [INCOMPLETE][2] ([i915#489]) [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/fi-bwr-2160/igt@i915_selftest@live@hangcheck.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/fi-bwr-2160/igt@i915_selftest@live@hangcheck.html [i915#489]: https://gitlab.freedesktop.org/drm/intel/issues/489 Participating hosts (52 -> 45) ------------------------------ Missing (7): fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-kbl-7560u fi-byt-clapper fi-bdw-samus Build changes ------------- * CI: CI-20190529 -> None * IGT: IGT_5591 -> IGTPW_4468 CI-20190529: 20190529 CI_DRM_8301: 7d2bdd2df0d18945bb274de8bc7560e14779e346 @ git://anongit.freedesktop.org/gfx-ci/linux IGTPW_4468: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/index.html IGT_5591: f57b7fdbe8d04ce3edf0433a03c7d9d5c3d96680 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools == Testlist changes == +igt@core_hotunplug@hotunbind-lateclose +igt@core_hotunplug@hotunplug-lateclose +igt@core_hotunplug@unbind-rebind +igt@core_hotunplug@unplug-rescan == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/index.html _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [igt-dev] [PATCH i-g-t v15] tests: Add a test for device hot unplug 2020-04-15 13:15 [igt-dev] [PATCH i-g-t v15] tests: Add a test for device hot unplug Janusz Krzysztofik 2020-04-15 14:25 ` [igt-dev] ✓ Fi.CI.BAT: success for tests: Add a test for device hot unplug (rev4) Patchwork @ 2020-04-16 7:09 ` Petri Latvala 2020-04-16 10:04 ` [igt-dev] ✓ Fi.CI.IGT: success for tests: Add a test for device hot unplug (rev4) Patchwork 2 siblings, 0 replies; 4+ messages in thread From: Petri Latvala @ 2020-04-16 7:09 UTC (permalink / raw) To: Janusz Krzysztofik Cc: Janusz Krzysztofik, intel-gfx, Chris Wilson, igt-dev, Daniel Vetter On Wed, Apr 15, 2020 at 03:15:15PM +0200, Janusz Krzysztofik wrote: > From: Janusz Krzysztofik <janusz.krzysztofik@intel.com> > > There is a test which verifies unloading of i915 driver module but no > test exists that checks how a driver behaves when it gets unbound from > a device or when the device gets unplugged. Implement such test using > sysfs interface. > > Two minimalistic subtests - "unbind-rebind" and "unplug-rescan" - > perform the named operations on a DRM device which is believed to be > not in use. Another pair of subtests named "hotunbind-lateclose" and > hotunplug-lateclose" do the same on a DRM device while keeping its file > descriptor open and close it thereafter. > > v2: Run a subprocess with dummy_load instead of external command > (Antonio). > v3: Run dummy_load from the test process directly (Antonio). > v4: Run dummy_load from inside subtests (Antonio). > v5: Try to restore the device to a working state after each subtest > (Petri, Daniel). > v6: Run workload inside an igt helper subprocess so resources consumed > by the workload are cleaned up automatically on workload subprocess > crash, without affecting test results, > - move the igt helper with workload back from subtests to initial > fixture so workload crash also does not affect test results, > - other cleanups suggested by Katarzyna and Chris. > v7: No changes. > v8: Move workload functions back from fixture to subtests, > - register different actions and different workloads in respective > tables and iterate over those tables while enumerating subtests, > - introduce new subtest flavors by simply omitting module unload step, > - instead of simply requesting bus rescan or not, introduce action > specific device recovery helpers, required specifically with those > new subtests not touching the module, > - split workload functions in two parts, one spawning the workload, > the other waiting for its completion, > - for the new subtests not requiring module unload, run workload > functions directly from the test process and use new workload > completion wait functions in place of subprocess completion wait, > - take more control over logging, longjumps and exit codes in > workload subprocesses, > - add some debug messages for easy progress watching, > - move function API descriptions on top of respective typedefs. > v9: All changes after Daniel's comments - thanks! > - flatten the code, don't try to create a midlayer (Daniel), > - provide minimal subtests that even don't keep device open (Daniel), > - don't use driver unbind in more advanced subtests (Daniel), > - provide subtests with different level of resources allocated > during device unplug (Daniel), > - provide subtests which check driver behavior after device hot > unplug (Daniel). > v10 Rename variables and function arguments to something that > indicates they're file descriptors (Daniel), > - introduce a data structure that contains various file descriptors > and a helper function to set them all (Daniel), > - fix strange indentation (Daniel), > - limit scope to first three subtests as the initial set of tests to > merge (Daniel). > v11 Fix typos in some comments, > - use SPDX license identifier, > - include a per-patch changelog in the commit message (Daniel). > v12 We don't use SPDX license identifiers nor GPL-2.0 in IGT (Petri), > - avoid chipset, make sure we reopen the same device (Chris), > - rename subtest "drm_open-hotunplug" to "hotunplug-lateclose", > - add subtest "hotunbind-lateclose" (less affected by IOMMU issues), > - move some redundant code to helpers, > - reorder some helpers, > - reword some messages and comments, > - clean up headers. > v13 Add test / subtest descriptions (patchwork). > v14 Extract redundant device rescan and reopen code to a 'healthcheck' > helper, > - call igt_abort_on_f() on device reopen failure (Petri), > - if any timeout set with igt_set_timeout() inside a subtest expires, > call igt_abort_on_f() from a follow-up igt_fixture (Petri), > - when running on a i915 device, require GEM and call > igt_abort_on_f() if no usable GEM is detected on device reopen. > v15 Add the test to CI blacklist (Martin). > > Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@intel.com> > Cc: Antonio Argenziano <antonio.argenziano@intel.com> > Cc: Petri Latvala <petri.latvala@intel.com> > Cc: Daniel Vetter <daniel@ffwll.ch> > Cc: Katarzyna Dec <katarzyna.dec@intel.com> > Cc: Martin Peres <martin.peres@linux.intel.com> > Acked-by: Chris Wilson <chris@chris-wilson.co.uk> > --- > tests/Makefile.sources | 1 + > tests/core_hotunplug.c | 300 +++++++++++++++++++++++++++++++++++ > tests/intel-ci/blacklist.txt | 1 + > tests/meson.build | 1 + > 4 files changed, 303 insertions(+) > create mode 100644 tests/core_hotunplug.c > > diff --git a/tests/Makefile.sources b/tests/Makefile.sources > index 4e44c98c2..32cbbf4f9 100644 > --- a/tests/Makefile.sources > +++ b/tests/Makefile.sources > @@ -18,6 +18,7 @@ TESTS_progs = \ > core_getclient \ > core_getstats \ > core_getversion \ > + core_hotunplug \ > core_setmaster \ > core_setmaster_vs_auth \ > debugfs_test \ > diff --git a/tests/core_hotunplug.c b/tests/core_hotunplug.c > new file mode 100644 > index 000000000..f9cfc8c3c > --- /dev/null > +++ b/tests/core_hotunplug.c > @@ -0,0 +1,300 @@ > +/* > + * Copyright © 2019 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 <fcntl.h> > +#include <limits.h> > +#include <stdlib.h> > +#include <string.h> > +#include <sys/stat.h> > +#include <sys/types.h> > +#include <unistd.h> > + > +#include "igt.h" > +#include "igt_device_scan.h" > +#include "igt_kmod.h" > +#include "igt_sysfs.h" > + > +IGT_TEST_DESCRIPTION("Examine behavior of a driver on device hot unplug"); > + > +struct hotunplug { > + struct { > + int drm; > + int sysfs_dev; > + int sysfs_bus; > + int sysfs_drv; > + } fd; > + char *dev_bus_addr; > +}; > + > +/* Helpers */ > + > +static void prepare_for_unbind(struct hotunplug *priv, char *buf, int buflen) > +{ > + int len; > + > + igt_assert(buflen); > + > + priv->fd.sysfs_drv = openat(priv->fd.sysfs_dev, "device/driver", > + O_DIRECTORY); > + igt_assert(priv->fd.sysfs_drv >= 0); > + > + len = readlinkat(priv->fd.sysfs_dev, "device", buf, buflen - 1); > + buf[len] = '\0'; > + priv->dev_bus_addr = strrchr(buf, '/'); > + igt_assert(priv->dev_bus_addr++); > + > + /* sysfs_dev no longer needed */ > + close(priv->fd.sysfs_dev); > +} > + > +static void prepare(struct hotunplug *priv, char *buf, int buflen) > +{ > + igt_debug("opening device\n"); > + priv->fd.drm = __drm_open_driver(DRIVER_ANY); > + igt_assert(priv->fd.drm >= 0); > + > + priv->fd.sysfs_dev = igt_sysfs_open(priv->fd.drm); > + igt_assert(priv->fd.sysfs_dev >= 0); > + > + if (buf) { > + prepare_for_unbind(priv, buf, buflen); > + } else { > + /* prepare for bus rescan */ > + priv->fd.sysfs_bus = openat(priv->fd.sysfs_dev, > + "device/subsystem", O_DIRECTORY); > + igt_assert(priv->fd.sysfs_bus >= 0); > + } > +} > + > +static const char *failure; > + > +/* Unbind the driver from the device */ > +static void driver_unbind(int fd_sysfs_drv, const char *dev_bus_addr) > +{ > + failure = "Driver unbind timeout!"; > + igt_set_timeout(60, failure); > + igt_sysfs_set(fd_sysfs_drv, "unbind", dev_bus_addr); > + igt_reset_timeout(); > + failure = NULL; > + > + /* don't close fd_sysfs_drv, it will be used for driver rebinding */ > +} > + > +/* Re-bind the driver to the device */ > +static void driver_bind(int fd_sysfs_drv, const char *dev_bus_addr) > +{ > + failure = "Driver re-bind timeout!"; > + igt_set_timeout(60, failure); > + igt_sysfs_set(fd_sysfs_drv, "bind", dev_bus_addr); > + igt_reset_timeout(); > + failure = NULL; > + > + close(fd_sysfs_drv); > +} > + > +/* Remove (virtually unplug) the device from its bus */ > +static void device_unplug(int fd_sysfs_dev) > +{ > + failure = "Device unplug timeout!"; > + igt_set_timeout(60, failure); > + igt_sysfs_set(fd_sysfs_dev, "device/remove", "1"); > + igt_reset_timeout(); > + failure = NULL; > + > + close(fd_sysfs_dev); > +} > + > +/* Re-discover the device by rescanning its bus */ > +static void bus_rescan(int fd_sysfs_bus) > +{ > + failure = "Bus rescan timeout!"; > + igt_set_timeout(60, failure); > + igt_sysfs_set(fd_sysfs_bus, "rescan", "1"); > + igt_reset_timeout(); > + failure = NULL; > + > + close(fd_sysfs_bus); > +} > + > +static void healthcheck(void) > +{ > + int fd_drm; > + > + /* device name may have changed, rebuild IGT device list */ > + igt_devices_scan(true); > + > + igt_debug("reopening the device\n"); > + fd_drm = __drm_open_driver(DRIVER_ANY); > + igt_abort_on_f(fd_drm < 0, "Device reopen failure"); > + > + if (is_i915_device(fd_drm)) { > + failure = "GEM failure"; > + igt_require_gem(fd_drm); > + failure = NULL; > + } > + > + close(fd_drm); > +} > + > +static void set_filter_from_device(int fd) > +{ > + const char *filter_type = "sys:"; > + char filter[strlen(filter_type) + PATH_MAX + 1]; > + char *dst = stpcpy(filter, filter_type); > + char path[PATH_MAX + 1]; > + > + igt_assert(igt_sysfs_path(fd, path, PATH_MAX)); > + strncat(path, "/device", PATH_MAX - strlen(path)); > + igt_assert(realpath(path, dst)); > + > + igt_device_filter_set(filter); > +} > + > +/* Subtests */ > + > +static void unbind_rebind(void) > +{ > + struct hotunplug priv; > + char buf[PATH_MAX]; > + > + prepare(&priv, buf, sizeof(buf)); > + > + igt_debug("closing the device\n"); > + close(priv.fd.drm); > + > + igt_debug("unbinding the driver from the device\n"); > + driver_unbind(priv.fd.sysfs_drv, priv.dev_bus_addr); > + > + igt_debug("rebinding the driver to the device\n"); > + driver_bind(priv.fd.sysfs_drv, priv.dev_bus_addr); > + > + healthcheck(); > +} > + > +static void unplug_rescan(void) > +{ > + struct hotunplug priv; > + > + prepare(&priv, NULL, 0); > + > + igt_debug("closing the device\n"); > + close(priv.fd.drm); > + > + igt_debug("unplugging the device\n"); > + device_unplug(priv.fd.sysfs_dev); > + > + igt_debug("recovering the device\n"); > + bus_rescan(priv.fd.sysfs_bus); > + > + healthcheck(); > +} > + > +static void hotunbind_lateclose(void) > +{ > + struct hotunplug priv; > + char buf[PATH_MAX]; > + > + prepare(&priv, buf, sizeof(buf)); > + > + igt_debug("hot unbinding the driver from the device\n"); > + driver_unbind(priv.fd.sysfs_drv, priv.dev_bus_addr); > + > + igt_debug("rebinding the driver to the device\n"); > + driver_bind(priv.fd.sysfs_drv, priv.dev_bus_addr); > + > + igt_debug("late closing the unbound device instance\n"); > + close(priv.fd.drm); > + > + healthcheck(); > +} > + > +static void hotunplug_lateclose(void) > +{ > + struct hotunplug priv; > + > + prepare(&priv, NULL, 0); > + > + igt_debug("hot unplugging the device\n"); > + device_unplug(priv.fd.sysfs_dev); > + > + igt_debug("recovering the device\n"); > + bus_rescan(priv.fd.sysfs_bus); > + > + igt_debug("late closing the removed device instance\n"); > + close(priv.fd.drm); > + > + healthcheck(); > +} > + > +/* Main */ > + > +igt_main > +{ > + igt_fixture { > + int fd_drm; > + > + /** > + * As subtests must be able to close examined devices > + * completely, don't use drm_open_driver() as it keeps > + * a device file descriptor open for exit handler use. > + */ > + fd_drm = __drm_open_driver(DRIVER_ANY); > + igt_assert(fd_drm >= 0); > + > + if (is_i915_device(fd_drm)) > + igt_require_gem(fd_drm); > + > + /* Make sure subtests always reopen the same device */ > + set_filter_from_device(fd_drm); > + > + close(fd_drm); > + } > + > + igt_describe("Check if the driver can be cleanly unbound from a device believed to be closed"); > + igt_subtest("unbind-rebind") > + unbind_rebind(); > + > + igt_fixture > + igt_abort_on_f(failure, "%s\n", failure); > + > + igt_describe("Check if a device believed to be closed can be cleanly unplugged"); > + igt_subtest("unplug-rescan") > + unplug_rescan(); > + > + igt_fixture > + igt_abort_on_f(failure, "%s\n", failure); > + > + igt_describe("Check if the driver can be cleanly unbound from a still open device, then released"); > + igt_subtest("hotunbind-lateclose") > + hotunbind_lateclose(); > + > + igt_fixture > + igt_abort_on_f(failure, "%s\n", failure); > + > + igt_describe("Check if a still open device can be cleanly unplugged, then released"); > + igt_subtest("hotunplug-lateclose") > + hotunplug_lateclose(); > + > + igt_fixture > + igt_abort_on_f(failure, "%s\n", failure); > +} > diff --git a/tests/intel-ci/blacklist.txt b/tests/intel-ci/blacklist.txt > index ee7045f03..201f4b1b4 100644 > --- a/tests/intel-ci/blacklist.txt > +++ b/tests/intel-ci/blacklist.txt > @@ -117,3 +117,4 @@ igt@.*@.*pipe-f($|-.*) > # Since 5.7-rc1, this test has produced tens of megabytes of kernel > # logs. > igt@perf_pmu@cpu-hotplug > +igt@core_hotunplug@.* That makes it read like it's also "producing tens of megabytes of kernel logs". An empty line, and a separate comment with something like # Currently fails and leaves the machine in a very bad state, and # causes coverage loss for other tests. With that, Acked-by: Petri Latvala <petri.latvala@intel.com> _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 4+ messages in thread
* [igt-dev] ✓ Fi.CI.IGT: success for tests: Add a test for device hot unplug (rev4) 2020-04-15 13:15 [igt-dev] [PATCH i-g-t v15] tests: Add a test for device hot unplug Janusz Krzysztofik 2020-04-15 14:25 ` [igt-dev] ✓ Fi.CI.BAT: success for tests: Add a test for device hot unplug (rev4) Patchwork 2020-04-16 7:09 ` [igt-dev] [PATCH i-g-t v15] tests: Add a test for device hot unplug Petri Latvala @ 2020-04-16 10:04 ` Patchwork 2 siblings, 0 replies; 4+ messages in thread From: Patchwork @ 2020-04-16 10:04 UTC (permalink / raw) To: Janusz Krzysztofik; +Cc: igt-dev == Series Details == Series: tests: Add a test for device hot unplug (rev4) URL : https://patchwork.freedesktop.org/series/75692/ State : success == Summary == CI Bug Log - changes from IGT_5591_full -> IGTPW_4468_full ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/index.html New tests --------- New tests have been introduced between IGT_5591_full and IGTPW_4468_full: ### New IGT tests (14) ### * igt@kms_flip@2x-flip-vs-panning-interruptible@ab-hdmi-a1-hdmi-a2: - Statuses : 1 pass(s) - Exec time: [10.53] s * igt@kms_flip@2x-flip-vs-panning-interruptible@ac-hdmi-a1-hdmi-a2: - Statuses : 1 pass(s) - Exec time: [10.49] s * igt@kms_flip@2x-flip-vs-panning-interruptible@bc-hdmi-a1-hdmi-a2: - Statuses : 1 pass(s) - Exec time: [10.48] s * igt@kms_flip@2x-single-buffer-flip-vs-dpms-off-vs-modeset-interruptible@ab-hdmi-a1-hdmi-a2: - Statuses : 1 pass(s) - Exec time: [1.61] s * igt@kms_flip@2x-single-buffer-flip-vs-dpms-off-vs-modeset-interruptible@ac-hdmi-a1-hdmi-a2: - Statuses : 1 pass(s) - Exec time: [1.28] s * igt@kms_flip@2x-single-buffer-flip-vs-dpms-off-vs-modeset-interruptible@bc-hdmi-a1-hdmi-a2: - Statuses : 1 pass(s) - Exec time: [1.19] s * igt@kms_flip@dpms-off-confusion-interruptible@a-hdmi-a2: - Statuses : 1 pass(s) - Exec time: [5.27] s * igt@kms_flip@dpms-off-confusion-interruptible@b-hdmi-a2: - Statuses : 1 pass(s) - Exec time: [5.27] s * igt@kms_flip@dpms-off-confusion-interruptible@c-hdmi-a2: - Statuses : 1 pass(s) - Exec time: [5.25] s * igt@kms_flip@dpms-off-confusion-interruptible@d-edp1: - Statuses : 1 pass(s) - Exec time: [8.70] s * igt@kms_flip@dpms-vs-vblank-race-interruptible@a-hdmi-a2: - Statuses : 1 pass(s) - Exec time: [2.26] s * igt@kms_flip@dpms-vs-vblank-race-interruptible@b-hdmi-a2: - Statuses : 1 pass(s) - Exec time: [2.10] s * igt@kms_flip@dpms-vs-vblank-race-interruptible@c-hdmi-a2: - Statuses : 1 pass(s) - Exec time: [2.08] s * igt@kms_flip@dpms-vs-vblank-race-interruptible@d-edp1: - Statuses : 1 pass(s) - Exec time: [3.65] s Known issues ------------ Here are the changes found in IGTPW_4468_full that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_eio@in-flight-suspend: - shard-kbl: [PASS][1] -> [DMESG-WARN][2] ([i915#180]) +1 similar issue [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-kbl1/igt@gem_eio@in-flight-suspend.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-kbl3/igt@gem_eio@in-flight-suspend.html - shard-apl: [PASS][3] -> [DMESG-WARN][4] ([i915#180]) [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-apl3/igt@gem_eio@in-flight-suspend.html [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-apl6/igt@gem_eio@in-flight-suspend.html * igt@gem_exec_params@invalid-bsd-ring: - shard-iclb: [PASS][5] -> [SKIP][6] ([fdo#109276]) [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-iclb4/igt@gem_exec_params@invalid-bsd-ring.html [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-iclb7/igt@gem_exec_params@invalid-bsd-ring.html * igt@i915_pm_rc6_residency@rc6-idle: - shard-snb: [PASS][7] -> [FAIL][8] ([i915#1066]) [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-snb1/igt@i915_pm_rc6_residency@rc6-idle.html [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-snb5/igt@i915_pm_rc6_residency@rc6-idle.html * igt@kms_cursor_crc@pipe-a-cursor-128x42-random: - shard-kbl: [PASS][9] -> [FAIL][10] ([i915#54] / [i915#93] / [i915#95]) [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-kbl7/igt@kms_cursor_crc@pipe-a-cursor-128x42-random.html [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-kbl1/igt@kms_cursor_crc@pipe-a-cursor-128x42-random.html * igt@kms_draw_crc@draw-method-rgb565-mmap-wc-ytiled: - shard-glk: [PASS][11] -> [FAIL][12] ([i915#52] / [i915#54]) +3 similar issues [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-glk1/igt@kms_draw_crc@draw-method-rgb565-mmap-wc-ytiled.html [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-glk6/igt@kms_draw_crc@draw-method-rgb565-mmap-wc-ytiled.html * igt@kms_flip_tiling@flip-changes-tiling: - shard-apl: [PASS][13] -> [FAIL][14] ([i915#95]) [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-apl8/igt@kms_flip_tiling@flip-changes-tiling.html [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-apl1/igt@kms_flip_tiling@flip-changes-tiling.html - shard-kbl: [PASS][15] -> [FAIL][16] ([i915#699] / [i915#93] / [i915#95]) [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-kbl4/igt@kms_flip_tiling@flip-changes-tiling.html [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-kbl1/igt@kms_flip_tiling@flip-changes-tiling.html * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a: - shard-kbl: [PASS][17] -> [FAIL][18] ([i915#53] / [i915#93] / [i915#95]) [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-kbl4/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-kbl3/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html - shard-apl: [PASS][19] -> [FAIL][20] ([i915#53] / [i915#95]) [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-apl4/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-apl7/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html * igt@kms_plane_alpha_blend@pipe-a-coverage-vs-premult-vs-constant: - shard-kbl: [PASS][21] -> [FAIL][22] ([fdo#108145] / [i915#265] / [i915#93] / [i915#95]) [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-kbl7/igt@kms_plane_alpha_blend@pipe-a-coverage-vs-premult-vs-constant.html [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-kbl2/igt@kms_plane_alpha_blend@pipe-a-coverage-vs-premult-vs-constant.html - shard-apl: [PASS][23] -> [FAIL][24] ([fdo#108145] / [i915#265] / [i915#95]) [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-apl3/igt@kms_plane_alpha_blend@pipe-a-coverage-vs-premult-vs-constant.html [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-apl8/igt@kms_plane_alpha_blend@pipe-a-coverage-vs-premult-vs-constant.html * igt@kms_plane_cursor@pipe-a-viewport-size-256: - shard-apl: [PASS][25] -> [FAIL][26] ([i915#1559] / [i915#95]) [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-apl6/igt@kms_plane_cursor@pipe-a-viewport-size-256.html [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-apl8/igt@kms_plane_cursor@pipe-a-viewport-size-256.html - shard-kbl: [PASS][27] -> [FAIL][28] ([i915#1559] / [i915#93] / [i915#95]) [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-kbl3/igt@kms_plane_cursor@pipe-a-viewport-size-256.html [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-kbl2/igt@kms_plane_cursor@pipe-a-viewport-size-256.html * igt@perf@gen12-mi-rpc: - shard-tglb: [PASS][29] -> [FAIL][30] ([i915#1085]) [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-tglb7/igt@perf@gen12-mi-rpc.html [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-tglb5/igt@perf@gen12-mi-rpc.html #### Possible fixes #### * igt@gen9_exec_parse@allowed-all: - shard-kbl: [DMESG-WARN][31] ([i915#716]) -> [PASS][32] [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-kbl3/igt@gen9_exec_parse@allowed-all.html [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-kbl4/igt@gen9_exec_parse@allowed-all.html * igt@i915_pm_dc@dc6-dpms: - shard-iclb: [FAIL][33] ([i915#454]) -> [PASS][34] [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-iclb3/igt@i915_pm_dc@dc6-dpms.html [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-iclb7/igt@i915_pm_dc@dc6-dpms.html * igt@kms_big_fb@linear-32bpp-rotate-0: - shard-kbl: [FAIL][35] ([i915#1119] / [i915#93] / [i915#95]) -> [PASS][36] [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-kbl7/igt@kms_big_fb@linear-32bpp-rotate-0.html [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-kbl6/igt@kms_big_fb@linear-32bpp-rotate-0.html - shard-apl: [FAIL][37] ([i915#1119] / [i915#95]) -> [PASS][38] [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-apl3/igt@kms_big_fb@linear-32bpp-rotate-0.html [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-apl1/igt@kms_big_fb@linear-32bpp-rotate-0.html * igt@kms_cursor_crc@pipe-a-cursor-64x21-onscreen: - shard-kbl: [FAIL][39] ([i915#54] / [i915#93] / [i915#95]) -> [PASS][40] +2 similar issues [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-kbl6/igt@kms_cursor_crc@pipe-a-cursor-64x21-onscreen.html [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-kbl6/igt@kms_cursor_crc@pipe-a-cursor-64x21-onscreen.html * igt@kms_cursor_crc@pipe-b-cursor-suspend: - shard-apl: [DMESG-WARN][41] ([i915#180]) -> [PASS][42] +1 similar issue [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-apl4/igt@kms_cursor_crc@pipe-b-cursor-suspend.html [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-apl4/igt@kms_cursor_crc@pipe-b-cursor-suspend.html * igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy: - shard-glk: [FAIL][43] ([i915#72]) -> [PASS][44] [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-glk6/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy.html [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-glk9/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy.html * igt@kms_draw_crc@draw-method-rgb565-render-untiled: - shard-glk: [FAIL][45] ([i915#52] / [i915#54]) -> [PASS][46] +6 similar issues [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-glk5/igt@kms_draw_crc@draw-method-rgb565-render-untiled.html [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-glk9/igt@kms_draw_crc@draw-method-rgb565-render-untiled.html * igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled: - shard-apl: [FAIL][47] ([i915#52] / [i915#54] / [i915#95]) -> [PASS][48] [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-apl7/igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled.html [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-apl4/igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled.html * igt@kms_fbcon_fbt@psr-suspend: - shard-tglb: [INCOMPLETE][49] ([i915#456] / [i915#460]) -> [PASS][50] [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-tglb8/igt@kms_fbcon_fbt@psr-suspend.html [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-tglb2/igt@kms_fbcon_fbt@psr-suspend.html * {igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a1}: - shard-glk: [FAIL][51] -> [PASS][52] [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-glk5/igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a1.html [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-glk8/igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a1.html * {igt@kms_flip@flip-vs-suspend-interruptible@a-dp1}: - shard-kbl: [DMESG-WARN][53] ([i915#180]) -> [PASS][54] +7 similar issues [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-kbl7/igt@kms_flip@flip-vs-suspend-interruptible@a-dp1.html [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-kbl7/igt@kms_flip@flip-vs-suspend-interruptible@a-dp1.html * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-cpu: - shard-glk: [FAIL][55] ([i915#49]) -> [PASS][56] [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-glk4/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-cpu.html [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-glk5/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-cpu.html * igt@kms_pipe_crc_basic@hang-read-crc-pipe-a: - shard-kbl: [FAIL][57] ([i915#53] / [i915#93] / [i915#95]) -> [PASS][58] [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-kbl1/igt@kms_pipe_crc_basic@hang-read-crc-pipe-a.html [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-kbl1/igt@kms_pipe_crc_basic@hang-read-crc-pipe-a.html - shard-apl: [FAIL][59] ([i915#53] / [i915#95]) -> [PASS][60] [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-apl7/igt@kms_pipe_crc_basic@hang-read-crc-pipe-a.html [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-apl1/igt@kms_pipe_crc_basic@hang-read-crc-pipe-a.html * igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min: - shard-kbl: [FAIL][61] ([fdo#108145] / [i915#265] / [i915#93] / [i915#95]) -> [PASS][62] [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-kbl6/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min.html [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-kbl2/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min.html - shard-apl: [FAIL][63] ([fdo#108145] / [i915#265] / [i915#95]) -> [PASS][64] [63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-apl8/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min.html [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-apl8/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min.html * igt@kms_psr@psr2_sprite_plane_move: - shard-iclb: [SKIP][65] ([fdo#109441]) -> [PASS][66] +1 similar issue [65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-iclb6/igt@kms_psr@psr2_sprite_plane_move.html [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-iclb2/igt@kms_psr@psr2_sprite_plane_move.html #### Warnings #### * igt@i915_pm_dc@dc6-dpms: - shard-tglb: [SKIP][67] ([i915#468]) -> [FAIL][68] ([i915#454]) [67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-tglb2/igt@i915_pm_dc@dc6-dpms.html [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-tglb6/igt@i915_pm_dc@dc6-dpms.html * igt@i915_pm_dc@dc6-psr: - shard-snb: [INCOMPLETE][69] ([i915#82]) -> [SKIP][70] ([fdo#109271]) [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-snb5/igt@i915_pm_dc@dc6-psr.html [70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-snb6/igt@i915_pm_dc@dc6-psr.html - shard-tglb: [FAIL][71] ([i915#454]) -> [SKIP][72] ([i915#468]) [71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-tglb5/igt@i915_pm_dc@dc6-psr.html [72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-tglb2/igt@i915_pm_dc@dc6-psr.html * igt@runner@aborted: - shard-kbl: ([FAIL][73], [FAIL][74]) ([i915#1423] / [i915#716] / [i915#92]) -> [FAIL][75] ([i915#1423] / [i915#92]) [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-kbl4/igt@runner@aborted.html [74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5591/shard-kbl3/igt@runner@aborted.html [75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/shard-kbl6/igt@runner@aborted.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145 [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271 [fdo#109276]: https://bugs.freedesktop.org/show_bug.cgi?id=109276 [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441 [i915#1066]: https://gitlab.freedesktop.org/drm/intel/issues/1066 [i915#1085]: https://gitlab.freedesktop.org/drm/intel/issues/1085 [i915#1119]: https://gitlab.freedesktop.org/drm/intel/issues/1119 [i915#1423]: https://gitlab.freedesktop.org/drm/intel/issues/1423 [i915#1559]: https://gitlab.freedesktop.org/drm/intel/issues/1559 [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180 [i915#265]: https://gitlab.freedesktop.org/drm/intel/issues/265 [i915#454]: https://gitlab.freedesktop.org/drm/intel/issues/454 [i915#456]: https://gitlab.freedesktop.org/drm/intel/issues/456 [i915#460]: https://gitlab.freedesktop.org/drm/intel/issues/460 [i915#468]: https://gitlab.freedesktop.org/drm/intel/issues/468 [i915#49]: https://gitlab.freedesktop.org/drm/intel/issues/49 [i915#52]: https://gitlab.freedesktop.org/drm/intel/issues/52 [i915#53]: https://gitlab.freedesktop.org/drm/intel/issues/53 [i915#54]: https://gitlab.freedesktop.org/drm/intel/issues/54 [i915#699]: https://gitlab.freedesktop.org/drm/intel/issues/699 [i915#716]: https://gitlab.freedesktop.org/drm/intel/issues/716 [i915#72]: https://gitlab.freedesktop.org/drm/intel/issues/72 [i915#82]: https://gitlab.freedesktop.org/drm/intel/issues/82 [i915#92]: https://gitlab.freedesktop.org/drm/intel/issues/92 [i915#93]: https://gitlab.freedesktop.org/drm/intel/issues/93 [i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95 Participating hosts (8 -> 8) ------------------------------ No changes in participating hosts Build changes ------------- * CI: CI-20190529 -> None * IGT: IGT_5591 -> IGTPW_4468 CI-20190529: 20190529 CI_DRM_8301: 7d2bdd2df0d18945bb274de8bc7560e14779e346 @ git://anongit.freedesktop.org/gfx-ci/linux IGTPW_4468: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/index.html IGT_5591: f57b7fdbe8d04ce3edf0433a03c7d9d5c3d96680 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4468/index.html _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-04-16 10:04 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-04-15 13:15 [igt-dev] [PATCH i-g-t v15] tests: Add a test for device hot unplug Janusz Krzysztofik 2020-04-15 14:25 ` [igt-dev] ✓ Fi.CI.BAT: success for tests: Add a test for device hot unplug (rev4) Patchwork 2020-04-16 7:09 ` [igt-dev] [PATCH i-g-t v15] tests: Add a test for device hot unplug Petri Latvala 2020-04-16 10:04 ` [igt-dev] ✓ Fi.CI.IGT: success for tests: Add a test for device hot unplug (rev4) Patchwork
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox