* [igt-dev] [PATCH i-g-t v9 0/1] tests: Add a new test for device hot unplug
@ 2019-05-09 8:09 Janusz Krzysztofik
2019-05-09 8:09 ` [igt-dev] [PATCH i-g-t v9 1/1] " Janusz Krzysztofik
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Janusz Krzysztofik @ 2019-05-09 8:09 UTC (permalink / raw)
To: Daniel Vetter; +Cc: janusz.krzysztofik, Petri Latvala, igt-dev
The test should help resolving driver bugs which exhibit themselves
when a device is unplugged / driver unbind from a device while the
device is busy (different from simple module unload which requires
device references being put first).
Janusz Krzysztofik (1):
tests: Add a new test for device hot unplug
tests/Makefile.sources | 1 +
tests/core_hotunplug.c | 462 +++++++++++++++++++++++++++++++++++++++++
tests/meson.build | 1 +
3 files changed, 464 insertions(+)
create mode 100644 tests/core_hotunplug.c
Changelog:
v8->v9:
All changes after Daniel's comments - thanks!
- flatten the code, don't try to create a midlayer,
- provide mimimal subtests that even don't keep device open,
- don't use driver unbind in more advanced subtests,
- provide subtests with different level of resources allocated
during device unplug,
- provide subtests which check driver behavior after device hot
unplug.
v7->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 omiting 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,
- drop patch 2/2 with external workload command again, still nobody
likes it.
v6->v7:
- add missing igt_exit() needed with the second patch.
v5->v6 (third public submission, incorrectly marked as v5, sorry):
- 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,
- re-add the second patch which extends the test with an option for
using an external command as a workload,
- other cleanups suggested by Kasia and Chris.
v4->v5 (second public submission, marked as v2):
- try to restore the device to a working state after each subtest
(Petri, Daniel).
v3->v4 (first public submission, not marked with any version number):
- run dummy_load from inside subtests (Antonio).
v2->v3 (internal submission):
- run dummy_load from the test process directly (Antonio),
- drop the patch for running external workload (Antonio).
v1->v2 (internal submission):
- run a subprocess with dummy_load instead of external command
(Antonio),
- keep use of external workload command as an option, move that to a
separate patch.
--
2.20.1
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 5+ messages in thread* [igt-dev] [PATCH i-g-t v9 1/1] tests: Add a new test for device hot unplug 2019-05-09 8:09 [igt-dev] [PATCH i-g-t v9 0/1] tests: Add a new test for device hot unplug Janusz Krzysztofik @ 2019-05-09 8:09 ` Janusz Krzysztofik 2019-05-13 9:19 ` Daniel Vetter 2019-05-09 11:19 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork 2019-05-09 14:19 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork 2 siblings, 1 reply; 5+ messages in thread From: Janusz Krzysztofik @ 2019-05-09 8:09 UTC (permalink / raw) To: Daniel Vetter; +Cc: janusz.krzysztofik, Petri Latvala, igt-dev 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. Provide such test using sysfs interface. Two minimalistic subtests - "unbind-rebind" and "unplug-rescan" - perform desired operations on a DRM device which is beleived to be not in use. A subtest named "drm_open-hotunplug" unplugs a DRM device while keeping a file descriptor open. A "gem_buffer-hotunplug" subtest performs device unplug while keepiug a GEM buffer object allocated, while a "gem_mmap-hotunplug" subtest does the same with the GEM buffer object additionally mmapped. Next two subtests work only with i915 or Intel driver. One of them - "i915_context-hotunplug" - performs device unplug while keeping an extra GEM context allocated. The other one - "i915_spin-hotunplug" - tries to unplug a device with an active spin batch. The last two subtests verify driver behavior after a device has been hot unplugged. First of them, called "drm-hotunplug-unload", checks if an open file descriptor of an unplugged device still protects the driver module from being unloaded. The last one - "i915-hotunplug-write" - checks how the i915 driver pointing to an unplugged device responds to a GEM write IOCTL operation. Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@intel.com> --- tests/Makefile.sources | 1 + tests/core_hotunplug.c | 462 +++++++++++++++++++++++++++++++++++++++++ tests/meson.build | 1 + 3 files changed, 464 insertions(+) create mode 100644 tests/core_hotunplug.c diff --git a/tests/Makefile.sources b/tests/Makefile.sources index 7f921f6c..08942f00 100644 --- a/tests/Makefile.sources +++ b/tests/Makefile.sources @@ -16,6 +16,7 @@ TESTS_progs = \ core_getclient \ core_getstats \ core_getversion \ + core_hotunplug \ core_setmaster_vs_auth \ debugfs_test \ drm_import_export \ diff --git a/tests/core_hotunplug.c b/tests/core_hotunplug.c new file mode 100644 index 00000000..08e7b2ab --- /dev/null +++ b/tests/core_hotunplug.c @@ -0,0 +1,462 @@ +/* + * 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 "igt.h" +#include "igt_device.h" +#include "igt_dummyload.h" +#include "igt_kmod.h" +#include "igt_sysfs.h" + +#include <limits.h> +#include <string.h> +#include <unistd.h> + +/* Re-bind the driver to the device */ +static void driver_bind(int drv, const char *addr) +{ + igt_set_timeout(60, "Driver re-bind timeout!"); + igt_sysfs_set(drv, "bind", addr); + igt_reset_timeout(); + + close(drv); +} + +/* Unbind the driver from the device */ +static void driver_unbind(int drv, const char *addr) +{ + igt_set_timeout(60, "Driver unbind timeout!"); + igt_sysfs_set(drv, "unbind", addr); + igt_reset_timeout(); + + /* don't close drv, it will be used for driver rebinding */ +} + +/* Re-discover the device by rescanning its bus */ +static void bus_rescan(int bus) +{ + igt_set_timeout(60, "Bus rescan timeout!"); + igt_sysfs_set(bus, "rescan", "1"); + igt_reset_timeout(); + + close(bus); +} + +/* Remove (virtually unplug) the device from its bus */ +static void device_unplug(int dev) +{ + igt_set_timeout(60, "Device unplug timeout!"); + igt_sysfs_set(dev, "device/remove", "1"); + igt_reset_timeout(); + + close(dev); +} + +static bool module_unload(int chipset, const char *module) +{ + if (chipset == DRIVER_INTEL) + return igt_i915_driver_unload() == IGT_EXIT_SUCCESS; + else + return igt_kmod_unload(module, 0) == 0; +} + +static void unbind_rebind(int chipset) +{ + int fd, dev, drv, len; + char path[PATH_MAX]; + const char *addr; + + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + dev = igt_sysfs_open(fd); + igt_assert(dev >= 0); + + close(fd); + + /* collect information required for driver bind/unbind */ + drv = openat(dev, "device/driver", O_DIRECTORY); + igt_assert(drv >= 0); + + len = readlinkat(dev, "device", path, sizeof(path) - 1); + path[len] = '\0'; + addr = strrchr(path, '/') + 1; + + close(dev); + + igt_debug("unbinding driver\n"); + driver_unbind(drv, addr); + + igt_debug("rebinding driver\n"); + driver_bind(drv, addr); + + igt_debug("reopening device\n"); + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + close(fd); +} + +static void unplug_rescan(int chipset) +{ + int fd, dev, bus; + + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + dev = igt_sysfs_open(fd); + igt_assert(dev >= 0); + + close(fd); + + /* collect information required for bus rescan */ + bus = openat(dev, "device/subsystem", O_DIRECTORY); + igt_assert(bus >= 0); + + igt_debug("unplugging device\n"); + device_unplug(dev); + + igt_debug("recovering device\n"); + bus_rescan(bus); + + igt_debug("reopening driver\n"); + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + close(fd); +} + +static void drm_open_hotunplug(int chipset) +{ + int fd, dev, bus; + + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + dev = igt_sysfs_open(fd); + igt_assert(dev >= 0); + + /* collect information required for bus rescan */ + bus = openat(dev, "device/subsystem", O_DIRECTORY); + igt_assert(bus >= 0); + + igt_debug("unplugging device\n"); + device_unplug(dev); + + igt_debug("recovering device\n"); + bus_rescan(bus); + + igt_debug("closing device\n"); + close(fd); + + igt_debug("reopening driver\n"); + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + close(fd); +} + +static void gem_buffer_hotunplug(int chipset) +{ + int fd, dev, bus; + struct igt_fb fb; + + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + igt_debug("creating GEM object\n"); + igt_create_bo_for_fb(fd, 1, 1, DRM_FORMAT_XRGB8888, 0, &fb); + + dev = igt_sysfs_open(fd); + igt_assert(dev >= 0); + + /* collect information required for bus rescan */ + bus = openat(dev, "device/subsystem", O_DIRECTORY); + igt_assert(bus >= 0); + + igt_debug("unplugging device\n"); + device_unplug(dev); + + igt_debug("recovering device\n"); + bus_rescan(bus); + + igt_debug("closing device\n"); + close(fd); + + igt_debug("reopening driver\n"); + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + close(fd); +} + +static void gem_mmap_hotunplug(int chipset) +{ + int fd, dev, bus; + struct igt_fb fb; + + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + igt_debug("mmapping GEM object\n"); + igt_create_bo_for_fb(fd, 1, 1, DRM_FORMAT_XRGB8888, 0, &fb); + igt_ignore_warn(igt_fb_map_buffer(fd, &fb)); + + dev = igt_sysfs_open(fd); + igt_assert(dev >= 0); + + /* collect information required for bus rescan */ + bus = openat(dev, "device/subsystem", O_DIRECTORY); + igt_assert(bus >= 0); + + igt_debug("unplugging device\n"); + device_unplug(dev); + + igt_debug("recovering device\n"); + bus_rescan(bus); + + igt_debug("closing device\n"); + close(fd); + + igt_debug("reopening driver\n"); + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + close(fd); +} + +static void i915_context_hotunplug(int chipset) +{ + int fd, dev, bus; + + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + gem_require_contexts(fd); + + igt_debug("creating GEM context\n"); + igt_ignore_warn(gem_context_create(fd)); + + dev = igt_sysfs_open(fd); + igt_assert(dev >= 0); + + /* collect information required for bus rescan */ + bus = openat(dev, "device/subsystem", O_DIRECTORY); + igt_assert(bus >= 0); + + igt_debug("unplugging device\n"); + device_unplug(dev); + + igt_debug("recovering device\n"); + bus_rescan(bus); + + igt_debug("closing device\n"); + close(fd); + + igt_debug("reopening driver\n"); + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + igt_debug("performing healthcheck\n"); + gem_test_engine(fd, ALL_ENGINES); + + close(fd); +} + +static void i915_spin_hotunplug(int chipset) +{ + int fd, dev, bus; + + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + igt_debug("submitting dummy load\n"); + igt_ignore_warn(igt_spin_new(fd)); + + dev = igt_sysfs_open(fd); + igt_assert(dev >= 0); + + /* collect information required for bus rescan */ + bus = openat(dev, "device/subsystem", O_DIRECTORY); + igt_assert(bus >= 0); + + igt_debug("unplugging device\n"); + device_unplug(dev); + + igt_debug("recovering device\n"); + bus_rescan(bus); + + igt_debug("closing device\n"); + close(fd); + + igt_debug("reopening driver\n"); + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + igt_debug("performing healthcheck\n"); + gem_test_engine(fd, ALL_ENGINES); + + close(fd); +} + +static void drm_hotunplug_unload(int chipset, const char *module) +{ + int fd, dev, bus; + + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + dev = igt_sysfs_open(fd); + igt_assert(dev >= 0); + + /* collect information required for bus rescan */ + bus = openat(dev, "device/subsystem", O_DIRECTORY); + igt_assert(bus >= 0); + + igt_debug("unplugging device\n"); + device_unplug(dev); + + igt_debug("trying to unload module\n"); + igt_assert(!module_unload(chipset, module)); + + igt_debug("closing device\n"); + close(fd); + + igt_debug("unloading module\n"); + igt_assert(module_unload(chipset, module)); + + igt_debug("recovering device\n"); + bus_rescan(bus); + + igt_debug("reopening driver\n"); + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + close(fd); +} + +static void i915_hotunplug_write(int chipset) +{ + int fd, dev, bus, gem; + const uint32_t bbe = MI_BATCH_BUFFER_END; + + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + igt_require_gem(fd); + + igt_debug("creating GEM buffer object\n"); + gem = gem_create(fd, 1); + + dev = igt_sysfs_open(fd); + igt_assert(dev >= 0); + + /* collect information required for bus rescan */ + bus = openat(dev, "device/subsystem", O_DIRECTORY); + igt_assert(bus >= 0); + + igt_debug("unplugging device\n"); + device_unplug(dev); + + igt_debug("trying to write to GEM buffer\n"); + igt_assert_neq(__gem_write(fd, gem, 0, &bbe, sizeof(bbe)), 0); + + igt_debug("recovering device\n"); + bus_rescan(bus); + + igt_debug("closing device\n"); + close(fd); + + igt_debug("reopening driver\n"); + fd = __drm_open_driver(chipset); + igt_assert(fd >= 0); + + igt_debug("performing healthcheck\n"); + gem_test_engine(fd, ALL_ENGINES); + + close(fd); +} + +igt_main { + int chipset; + char *module; + + igt_fixture { + char path[PATH_MAX]; + int fd, dev, len; + + /** + * Since some subtests depend on successful unload of a driver + * module, don't use drm_open_driver() as it keeps a device file + * descriptor open for exit handler use and that effectively + * prevents the module from being unloaded. + */ + fd = __drm_open_driver(DRIVER_ANY); + igt_assert(fd >= 0); + + if (is_i915_device(fd)) { + chipset = DRIVER_INTEL; + module = strdup("i915"); + } else { + chipset = DRIVER_ANY; + + /* Capture module name to be unloaded */ + dev = igt_sysfs_open(fd); + len = readlinkat(dev, "device/driver/module", path, + sizeof(path) - 1); + close(dev); + path[len] = '\0'; + module = strdup(strrchr(path, '/') + 1); + } + close(fd); + + igt_info("Running the test on driver \"%s\", chipset mask %#0x\n", + module, chipset); + } + + igt_subtest("unbind-rebind") + unbind_rebind(chipset); + + igt_subtest("unplug-rescan") + unplug_rescan(chipset); + + igt_subtest("drm_open-hotunplug") + drm_open_hotunplug(chipset); + + igt_subtest("gem_buffer-hotunplug") + gem_buffer_hotunplug(chipset); + + igt_subtest("gem_mmap-hotunplug") + gem_mmap_hotunplug(chipset); + + igt_subtest("i915_context-hotunplug") + i915_context_hotunplug(chipset); + + igt_subtest("i915_spin-hotunplug") + i915_spin_hotunplug(chipset); + + igt_subtest("drm-hotunplug-unload") + drm_hotunplug_unload(chipset, module); + + igt_subtest("i915-hotunplug-write") + i915_hotunplug_write(chipset); +} diff --git a/tests/meson.build b/tests/meson.build index 711979b4..ff391c94 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_vs_auth', 'debugfs_test', 'drm_import_export', -- 2.20.1 _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [igt-dev] [PATCH i-g-t v9 1/1] tests: Add a new test for device hot unplug 2019-05-09 8:09 ` [igt-dev] [PATCH i-g-t v9 1/1] " Janusz Krzysztofik @ 2019-05-13 9:19 ` Daniel Vetter 0 siblings, 0 replies; 5+ messages in thread From: Daniel Vetter @ 2019-05-13 9:19 UTC (permalink / raw) To: Janusz Krzysztofik Cc: janusz.krzysztofik, Petri Latvala, igt-dev, Daniel Vetter On Thu, May 09, 2019 at 10:09:14AM +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. Provide such test using sysfs > interface. > > Two minimalistic subtests - "unbind-rebind" and "unplug-rescan" - perform > desired operations on a DRM device which is beleived to be not in use. > > A subtest named "drm_open-hotunplug" unplugs a DRM device while keeping > a file descriptor open. > > A "gem_buffer-hotunplug" subtest performs device unplug while keepiug a > GEM buffer object allocated, while a "gem_mmap-hotunplug" subtest does the > same with the GEM buffer object additionally mmapped. > > Next two subtests work only with i915 or Intel driver. One of them - > "i915_context-hotunplug" - performs device unplug while keeping an extra > GEM context allocated. The other one - "i915_spin-hotunplug" - tries to > unplug a device with an active spin batch. > > The last two subtests verify driver behavior after a device has been hot > unplugged. First of them, called "drm-hotunplug-unload", checks if an > open file descriptor of an unplugged device still protects the driver > module from being unloaded. The last one - "i915-hotunplug-write" - > checks how the i915 driver pointing to an unplugged device responds to a > GEM write IOCTL operation. > > Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@intel.com> Thanks for reworking, this looks good to me and we're going the right direction I think. When resending patches please always include a per-patch changelog in the commit message, explaining what you've changed, why (e.g. suggested by $reviewer_name), compared to the previous version. > --- > tests/Makefile.sources | 1 + > tests/core_hotunplug.c | 462 +++++++++++++++++++++++++++++++++++++++++ > tests/meson.build | 1 + > 3 files changed, 464 insertions(+) > create mode 100644 tests/core_hotunplug.c > > diff --git a/tests/Makefile.sources b/tests/Makefile.sources > index 7f921f6c..08942f00 100644 > --- a/tests/Makefile.sources > +++ b/tests/Makefile.sources > @@ -16,6 +16,7 @@ TESTS_progs = \ > core_getclient \ > core_getstats \ > core_getversion \ > + core_hotunplug \ > core_setmaster_vs_auth \ > debugfs_test \ > drm_import_export \ > diff --git a/tests/core_hotunplug.c b/tests/core_hotunplug.c > new file mode 100644 > index 00000000..08e7b2ab > --- /dev/null > +++ b/tests/core_hotunplug.c > @@ -0,0 +1,462 @@ > +/* > + * 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 "igt.h" > +#include "igt_device.h" > +#include "igt_dummyload.h" > +#include "igt_kmod.h" > +#include "igt_sysfs.h" > + > +#include <limits.h> > +#include <string.h> > +#include <unistd.h> > + > +/* Re-bind the driver to the device */ > +static void driver_bind(int drv, const char *addr) > +{ > + igt_set_timeout(60, "Driver re-bind timeout!"); > + igt_sysfs_set(drv, "bind", addr); > + igt_reset_timeout(); > + > + close(drv); > +} > + > +/* Unbind the driver from the device */ > +static void driver_unbind(int drv, const char *addr) > +{ > + igt_set_timeout(60, "Driver unbind timeout!"); > + igt_sysfs_set(drv, "unbind", addr); > + igt_reset_timeout(); > + > + /* don't close drv, it will be used for driver rebinding */ > +} > + > +/* Re-discover the device by rescanning its bus */ > +static void bus_rescan(int bus) > +{ > + igt_set_timeout(60, "Bus rescan timeout!"); > + igt_sysfs_set(bus, "rescan", "1"); > + igt_reset_timeout(); > + > + close(bus); > +} > + > +/* Remove (virtually unplug) the device from its bus */ > +static void device_unplug(int dev) > +{ > + igt_set_timeout(60, "Device unplug timeout!"); > + igt_sysfs_set(dev, "device/remove", "1"); > + igt_reset_timeout(); > + > + close(dev); > +} > + > +static bool module_unload(int chipset, const char *module) > +{ > + if (chipset == DRIVER_INTEL) > + return igt_i915_driver_unload() == IGT_EXIT_SUCCESS; > + else > + return igt_kmod_unload(module, 0) == 0; > +} > + > +static void unbind_rebind(int chipset) > +{ > + int fd, dev, drv, len; Please rename these to fd_drm, fd_sysfs_dev and fd_sysf_drv, or something else that indicates they're file descriptors. Same for function arguments. The code gets very confusing to read otherwise. btw I think this went a tiny bit too much into the "no framework at all" direction. I think a little data structure that contains the various fds we need, plus a helper function to set them all up would be useful. Then you can call that as needed, plus we have a place to add other test-relevant data to pass around. But as-is the code looks ok too, up to you. But otherwise I like the open-coded test structure a lot, makes it much easier to follow along and understand what's going on. > + char path[PATH_MAX]; > + const char *addr; > + > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + dev = igt_sysfs_open(fd); > + igt_assert(dev >= 0); > + > + close(fd); > + > + /* collect information required for driver bind/unbind */ > + drv = openat(dev, "device/driver", O_DIRECTORY); > + igt_assert(drv >= 0); > + > + len = readlinkat(dev, "device", path, sizeof(path) - 1); > + path[len] = '\0'; > + addr = strrchr(path, '/') + 1; > + > + close(dev); > + > + igt_debug("unbinding driver\n"); > + driver_unbind(drv, addr); Strange indenting here. Some other places like this too. > + > + igt_debug("rebinding driver\n"); > + driver_bind(drv, addr); > + > + igt_debug("reopening device\n"); > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + close(fd); > +} > + > +static void unplug_rescan(int chipset) > +{ > + int fd, dev, bus; > + > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + dev = igt_sysfs_open(fd); > + igt_assert(dev >= 0); > + > + close(fd); > + > + /* collect information required for bus rescan */ > + bus = openat(dev, "device/subsystem", O_DIRECTORY); > + igt_assert(bus >= 0); > + > + igt_debug("unplugging device\n"); > + device_unplug(dev); > + > + igt_debug("recovering device\n"); > + bus_rescan(bus); > + > + igt_debug("reopening driver\n"); > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + close(fd); > +} > + > +static void drm_open_hotunplug(int chipset) > +{ > + int fd, dev, bus; > + > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + dev = igt_sysfs_open(fd); > + igt_assert(dev >= 0); > + > + /* collect information required for bus rescan */ > + bus = openat(dev, "device/subsystem", O_DIRECTORY); > + igt_assert(bus >= 0); > + > + igt_debug("unplugging device\n"); > + device_unplug(dev); > + > + igt_debug("recovering device\n"); > + bus_rescan(bus); > + > + igt_debug("closing device\n"); > + close(fd); > + > + igt_debug("reopening driver\n"); > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + close(fd); > +} Testcases lgtm up to here. I think this would make sense as the first set of tests to merge (together with the basic hotunplug kernel fixes). > + > +static void gem_buffer_hotunplug(int chipset) > +{ > + int fd, dev, bus; > + struct igt_fb fb; > + > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + igt_debug("creating GEM object\n"); > + igt_create_bo_for_fb(fd, 1, 1, DRM_FORMAT_XRGB8888, 0, &fb); This is a kms function, and fairly high-level. I think for the unplug tests we should have more low-level control over what we're doing. Here's the testcases I have in mind: - a generic gem_dumb_mmap-hotunplug testcase which uses the dumb ioctls. Needs to check that those exist (e.g. if we have i915 without kms enabled, atm doesn't exist yet but might happen). - i915 specific testcases for the various mmap modes i915 supports: gtt mmap, wc and cached cpu mmap. Note that for all of these you must first write into the mmap region, in many cases the mmap won't be fully instantiated without that (i.e. kernel will not allocate actually gpu memory, only some metadata to describe what you want). Because of this delayed allocation just testing with a buffer allocated is probably not that interesting, I'd drop that subtest. Ofc if allocating itself yields bugs in testing, then definitely keep it! > + > + dev = igt_sysfs_open(fd); > + igt_assert(dev >= 0); > + > + /* collect information required for bus rescan */ > + bus = openat(dev, "device/subsystem", O_DIRECTORY); > + igt_assert(bus >= 0); > + > + igt_debug("unplugging device\n"); > + device_unplug(dev); > + > + igt_debug("recovering device\n"); > + bus_rescan(bus); > + > + igt_debug("closing device\n"); > + close(fd); > + > + igt_debug("reopening driver\n"); > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + close(fd); > +} > + > +static void gem_mmap_hotunplug(int chipset) > +{ > + int fd, dev, bus; > + struct igt_fb fb; > + > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + igt_debug("mmapping GEM object\n"); > + igt_create_bo_for_fb(fd, 1, 1, DRM_FORMAT_XRGB8888, 0, &fb); > + igt_ignore_warn(igt_fb_map_buffer(fd, &fb)); > + > + dev = igt_sysfs_open(fd); > + igt_assert(dev >= 0); > + > + /* collect information required for bus rescan */ > + bus = openat(dev, "device/subsystem", O_DIRECTORY); > + igt_assert(bus >= 0); > + > + igt_debug("unplugging device\n"); > + device_unplug(dev); > + > + igt_debug("recovering device\n"); > + bus_rescan(bus); > + > + igt_debug("closing device\n"); > + close(fd); > + > + igt_debug("reopening driver\n"); > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + close(fd); > +} > + > +static void i915_context_hotunplug(int chipset) > +{ > + int fd, dev, bus; > + > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + gem_require_contexts(fd); > + > + igt_debug("creating GEM context\n"); > + igt_ignore_warn(gem_context_create(fd)); > + > + dev = igt_sysfs_open(fd); > + igt_assert(dev >= 0); > + > + /* collect information required for bus rescan */ > + bus = openat(dev, "device/subsystem", O_DIRECTORY); > + igt_assert(bus >= 0); > + > + igt_debug("unplugging device\n"); > + device_unplug(dev); > + > + igt_debug("recovering device\n"); > + bus_rescan(bus); > + > + igt_debug("closing device\n"); > + close(fd); > + > + igt_debug("reopening driver\n"); > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + igt_debug("performing healthcheck\n"); > + gem_test_engine(fd, ALL_ENGINES); > + > + close(fd); I think for context we again have the issue that allocating one doesn't do much, we need to use it first. But for a simple context test we want to make sure that the batch has stopped. Also, you don't need to allocate a context, there's a default context allocated when you open an fd. Here's my testcase idea: - open fd - run a simple batch (this means you need some buffers and stuff, and the kernel will allocate contexts, buffers and map them all into your context). gem_test_engine might do this, minus the "keep the buffer mapped" part. - make sure you don't release your batchbuffer (we want the kernel to do the cleanup for us). - hotunplug and usual tail of the testcase > +} > + > +static void i915_spin_hotunplug(int chipset) > +{ > + int fd, dev, bus; > + > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + igt_debug("submitting dummy load\n"); > + igt_ignore_warn(igt_spin_new(fd)); > + > + dev = igt_sysfs_open(fd); > + igt_assert(dev >= 0); > + > + /* collect information required for bus rescan */ > + bus = openat(dev, "device/subsystem", O_DIRECTORY); > + igt_assert(bus >= 0); > + > + igt_debug("unplugging device\n"); > + device_unplug(dev); > + > + igt_debug("recovering device\n"); > + bus_rescan(bus); > + > + igt_debug("closing device\n"); > + close(fd); > + > + igt_debug("reopening driver\n"); > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + igt_debug("performing healthcheck\n"); > + gem_test_engine(fd, ALL_ENGINES); > + > + close(fd); > +} > + > +static void drm_hotunplug_unload(int chipset, const char *module) > +{ > + int fd, dev, bus; > + > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + dev = igt_sysfs_open(fd); > + igt_assert(dev >= 0); > + > + /* collect information required for bus rescan */ > + bus = openat(dev, "device/subsystem", O_DIRECTORY); > + igt_assert(bus >= 0); > + > + igt_debug("unplugging device\n"); > + device_unplug(dev); > + > + igt_debug("trying to unload module\n"); > + igt_assert(!module_unload(chipset, module)); > + > + igt_debug("closing device\n"); > + close(fd); > + > + igt_debug("unloading module\n"); > + igt_assert(module_unload(chipset, module)); > + > + igt_debug("recovering device\n"); > + bus_rescan(bus); > + > + igt_debug("reopening driver\n"); > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + close(fd); > +} > + > +static void i915_hotunplug_write(int chipset) > +{ > + int fd, dev, bus, gem; > + const uint32_t bbe = MI_BATCH_BUFFER_END; > + > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + igt_require_gem(fd); > + > + igt_debug("creating GEM buffer object\n"); > + gem = gem_create(fd, 1); > + > + dev = igt_sysfs_open(fd); > + igt_assert(dev >= 0); > + > + /* collect information required for bus rescan */ > + bus = openat(dev, "device/subsystem", O_DIRECTORY); > + igt_assert(bus >= 0); > + > + igt_debug("unplugging device\n"); > + device_unplug(dev); > + > + igt_debug("trying to write to GEM buffer\n"); > + igt_assert_neq(__gem_write(fd, gem, 0, &bbe, sizeof(bbe)), 0); I think we could rename this to our general "test ioctls after hotunplug" testcase, and go through the entire list of ioctls. Also I think testing for an explicit errno would be good here, I think -EIO is the right one for "oops the device is gone". Need to double check with Chris Wilson, he tends to have good insights on these uapi details. These hotunplug ioctl testcase might be a good 2nd step of landing this. The module unload testcase should also be fairly easy to get all fixed up and landed. Then we can start looking at the nastier ones, maybe start with mmap, and the used-but-now-idle context. Then busybatch. And even later (we're talking months here I think) we can start looking at dma-buf/dma-fence sharing and stuff like that. Even later then in-flight kms requests. This is all going to be lots of fun :-) Cheers, Daniel > + > + igt_debug("recovering device\n"); > + bus_rescan(bus); > + > + igt_debug("closing device\n"); > + close(fd); > + > + igt_debug("reopening driver\n"); > + fd = __drm_open_driver(chipset); > + igt_assert(fd >= 0); > + > + igt_debug("performing healthcheck\n"); > + gem_test_engine(fd, ALL_ENGINES); > + > + close(fd); > +} > + > +igt_main { > + int chipset; > + char *module; > + > + igt_fixture { > + char path[PATH_MAX]; > + int fd, dev, len; > + > + /** > + * Since some subtests depend on successful unload of a driver > + * module, don't use drm_open_driver() as it keeps a device file > + * descriptor open for exit handler use and that effectively > + * prevents the module from being unloaded. > + */ > + fd = __drm_open_driver(DRIVER_ANY); > + igt_assert(fd >= 0); > + > + if (is_i915_device(fd)) { > + chipset = DRIVER_INTEL; > + module = strdup("i915"); > + } else { > + chipset = DRIVER_ANY; > + > + /* Capture module name to be unloaded */ > + dev = igt_sysfs_open(fd); > + len = readlinkat(dev, "device/driver/module", path, > + sizeof(path) - 1); > + close(dev); > + path[len] = '\0'; > + module = strdup(strrchr(path, '/') + 1); > + } > + close(fd); > + > + igt_info("Running the test on driver \"%s\", chipset mask %#0x\n", > + module, chipset); > + } > + > + igt_subtest("unbind-rebind") > + unbind_rebind(chipset); > + > + igt_subtest("unplug-rescan") > + unplug_rescan(chipset); > + > + igt_subtest("drm_open-hotunplug") > + drm_open_hotunplug(chipset); > + > + igt_subtest("gem_buffer-hotunplug") > + gem_buffer_hotunplug(chipset); > + > + igt_subtest("gem_mmap-hotunplug") > + gem_mmap_hotunplug(chipset); > + > + igt_subtest("i915_context-hotunplug") > + i915_context_hotunplug(chipset); > + > + igt_subtest("i915_spin-hotunplug") > + i915_spin_hotunplug(chipset); > + > + igt_subtest("drm-hotunplug-unload") > + drm_hotunplug_unload(chipset, module); > + > + igt_subtest("i915-hotunplug-write") > + i915_hotunplug_write(chipset); > +} > diff --git a/tests/meson.build b/tests/meson.build > index 711979b4..ff391c94 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_vs_auth', > 'debugfs_test', > 'drm_import_export', > -- > 2.20.1 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 5+ messages in thread
* [igt-dev] ✓ Fi.CI.BAT: success for tests: Add a new test for device hot unplug 2019-05-09 8:09 [igt-dev] [PATCH i-g-t v9 0/1] tests: Add a new test for device hot unplug Janusz Krzysztofik 2019-05-09 8:09 ` [igt-dev] [PATCH i-g-t v9 1/1] " Janusz Krzysztofik @ 2019-05-09 11:19 ` Patchwork 2019-05-09 14:19 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork 2 siblings, 0 replies; 5+ messages in thread From: Patchwork @ 2019-05-09 11:19 UTC (permalink / raw) To: Janusz Krzysztofik; +Cc: igt-dev == Series Details == Series: tests: Add a new test for device hot unplug URL : https://patchwork.freedesktop.org/series/60454/ State : success == Summary == CI Bug Log - changes from CI_DRM_6069 -> IGTPW_2956 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://patchwork.freedesktop.org/api/1.0/series/60454/revisions/1/mbox/ Known issues ------------ Here are the changes found in IGTPW_2956 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@i915_selftest@live_evict: - fi-bsw-kefka: [PASS][1] -> [DMESG-WARN][2] ([fdo#107709]) [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/fi-bsw-kefka/igt@i915_selftest@live_evict.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/fi-bsw-kefka/igt@i915_selftest@live_evict.html [fdo#107709]: https://bugs.freedesktop.org/show_bug.cgi?id=107709 Participating hosts (51 -> 44) ------------------------------ Missing (7): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-pnv-d510 fi-byt-clapper Build changes ------------- * IGT: IGT_4974 -> IGTPW_2956 CI_DRM_6069: 7dcd3d663bc180ef9e7dcc5d5f5adebee1f285bf @ git://anongit.freedesktop.org/gfx-ci/linux IGTPW_2956: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/ IGT_4974: 23200bc1b008542bd4d744755540b07881d41fae @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools == Testlist changes == +igt@core_hotunplug@drm-hotunplug-unload +igt@core_hotunplug@drm_open-hotunplug +igt@core_hotunplug@gem_buffer-hotunplug +igt@core_hotunplug@gem_mmap-hotunplug +igt@core_hotunplug@i915-hotunplug-write +igt@core_hotunplug@i915_context-hotunplug +igt@core_hotunplug@i915_spin-hotunplug +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_2956/ _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 5+ messages in thread
* [igt-dev] ✗ Fi.CI.IGT: failure for tests: Add a new test for device hot unplug 2019-05-09 8:09 [igt-dev] [PATCH i-g-t v9 0/1] tests: Add a new test for device hot unplug Janusz Krzysztofik 2019-05-09 8:09 ` [igt-dev] [PATCH i-g-t v9 1/1] " Janusz Krzysztofik 2019-05-09 11:19 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork @ 2019-05-09 14:19 ` Patchwork 2 siblings, 0 replies; 5+ messages in thread From: Patchwork @ 2019-05-09 14:19 UTC (permalink / raw) To: Janusz Krzysztofik; +Cc: igt-dev == Series Details == Series: tests: Add a new test for device hot unplug URL : https://patchwork.freedesktop.org/series/60454/ State : failure == Summary == CI Bug Log - changes from CI_DRM_6069_full -> IGTPW_2956_full ==================================================== Summary ------- **FAILURE** Serious unknown changes coming with IGTPW_2956_full absolutely need to be verified manually. If you think the reported changes have nothing to do with the changes introduced in IGTPW_2956_full, please notify your bug team to allow them to document this new failure mode, which will reduce false positives in CI. External URL: https://patchwork.freedesktop.org/api/1.0/series/60454/revisions/1/mbox/ Possible new issues ------------------- Here are the unknown changes that may have been introduced in IGTPW_2956_full: ### IGT changes ### #### Possible regressions #### * {igt@core_hotunplug@drm-hotunplug-unload} (NEW): - shard-snb: NOTRUN -> [DMESG-WARN][1] +6 similar issues [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-snb5/igt@core_hotunplug@drm-hotunplug-unload.html - shard-hsw: NOTRUN -> [DMESG-WARN][2] +5 similar issues [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-hsw8/igt@core_hotunplug@drm-hotunplug-unload.html * {igt@core_hotunplug@gem_buffer-hotunplug} (NEW): - shard-iclb: NOTRUN -> [DMESG-WARN][3] +2 similar issues [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb4/igt@core_hotunplug@gem_buffer-hotunplug.html - shard-apl: NOTRUN -> [DMESG-WARN][4] +5 similar issues [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-apl6/igt@core_hotunplug@gem_buffer-hotunplug.html * {igt@core_hotunplug@gem_mmap-hotunplug} (NEW): - shard-kbl: NOTRUN -> [DMESG-WARN][5] +5 similar issues [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-kbl5/igt@core_hotunplug@gem_mmap-hotunplug.html * {igt@core_hotunplug@i915-hotunplug-write} (NEW): - shard-hsw: NOTRUN -> [DMESG-FAIL][6] +2 similar issues [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-hsw8/igt@core_hotunplug@i915-hotunplug-write.html * {igt@core_hotunplug@i915_context-hotunplug} (NEW): - shard-iclb: NOTRUN -> [DMESG-FAIL][7] +1 similar issue [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb1/igt@core_hotunplug@i915_context-hotunplug.html * igt@gem_exec_basic@gtt-bsd: - shard-iclb: [PASS][8] -> [SKIP][9] +66 similar issues [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb6/igt@gem_exec_basic@gtt-bsd.html [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb8/igt@gem_exec_basic@gtt-bsd.html * igt@kms_frontbuffer_tracking@fbc-indfb-scaledprimary: - shard-iclb: [PASS][10] -> [FAIL][11] +19 similar issues [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb5/igt@kms_frontbuffer_tracking@fbc-indfb-scaledprimary.html [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb8/igt@kms_frontbuffer_tracking@fbc-indfb-scaledprimary.html * igt@runner@aborted: - shard-hsw: NOTRUN -> ([FAIL][12], [FAIL][13], [FAIL][14], [FAIL][15], [FAIL][16], [FAIL][17], [FAIL][18], [FAIL][19], [FAIL][20]) [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-hsw6/igt@runner@aborted.html [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-hsw7/igt@runner@aborted.html [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-hsw7/igt@runner@aborted.html [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-hsw6/igt@runner@aborted.html [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-hsw8/igt@runner@aborted.html [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-hsw8/igt@runner@aborted.html [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-hsw8/igt@runner@aborted.html [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-hsw8/igt@runner@aborted.html [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-hsw1/igt@runner@aborted.html - shard-snb: NOTRUN -> ([FAIL][21], [FAIL][22], [FAIL][23], [FAIL][24], [FAIL][25], [FAIL][26], [FAIL][27]) [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-snb2/igt@runner@aborted.html [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-snb5/igt@runner@aborted.html [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-snb7/igt@runner@aborted.html [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-snb4/igt@runner@aborted.html [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-snb1/igt@runner@aborted.html [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-snb4/igt@runner@aborted.html [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-snb1/igt@runner@aborted.html - shard-kbl: NOTRUN -> ([FAIL][28], [FAIL][29], [FAIL][30], [FAIL][31], [FAIL][32], [FAIL][33]) [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-kbl5/igt@runner@aborted.html [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-kbl3/igt@runner@aborted.html [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-kbl4/igt@runner@aborted.html [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-kbl2/igt@runner@aborted.html [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-kbl2/igt@runner@aborted.html [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-kbl2/igt@runner@aborted.html - shard-iclb: NOTRUN -> ([FAIL][34], [FAIL][35], [FAIL][36], [FAIL][37], [FAIL][38]) ([fdo#110586] / [k.org#203557]) [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb7/igt@runner@aborted.html [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb7/igt@runner@aborted.html [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb1/igt@runner@aborted.html [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb4/igt@runner@aborted.html [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb3/igt@runner@aborted.html - shard-apl: NOTRUN -> ([FAIL][39], [FAIL][40], [FAIL][41], [FAIL][42], [FAIL][43], [FAIL][44]) [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-apl8/igt@runner@aborted.html [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-apl3/igt@runner@aborted.html [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-apl1/igt@runner@aborted.html [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-apl2/igt@runner@aborted.html [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-apl6/igt@runner@aborted.html [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-apl6/igt@runner@aborted.html #### Warnings #### * igt@gem_exec_parse@bitmasks: - shard-iclb: [SKIP][45] ([fdo#109289]) -> [SKIP][46] [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb7/igt@gem_exec_parse@bitmasks.html [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb8/igt@gem_exec_parse@bitmasks.html * igt@kms_busy@extended-modeset-hang-newfb-render-d: - shard-iclb: [SKIP][47] ([fdo#109278]) -> [SKIP][48] +2 similar issues [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb1/igt@kms_busy@extended-modeset-hang-newfb-render-d.html [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb8/igt@kms_busy@extended-modeset-hang-newfb-render-d.html * igt@kms_flip@2x-flip-vs-panning-vs-hang-interruptible: - shard-iclb: [SKIP][49] ([fdo#109274]) -> [SKIP][50] [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb7/igt@kms_flip@2x-flip-vs-panning-vs-hang-interruptible.html [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb8/igt@kms_flip@2x-flip-vs-panning-vs-hang-interruptible.html * igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw: - shard-iclb: [FAIL][51] ([fdo#103167]) -> [FAIL][52] +1 similar issue [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb4/igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw.html [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb8/igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw.html * igt@prime_vgem@fence-write-hang: - shard-iclb: [SKIP][53] ([fdo#109295]) -> [SKIP][54] [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb8/igt@prime_vgem@fence-write-hang.html [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb8/igt@prime_vgem@fence-write-hang.html New tests --------- New tests have been introduced between CI_DRM_6069_full and IGTPW_2956_full: ### New IGT tests (9) ### * igt@core_hotunplug@drm-hotunplug-unload: - Statuses : 4 dmesg-warn(s) 2 incomplete(s) - Exec time: [0.0, 2.65] s * igt@core_hotunplug@drm_open-hotunplug: - Statuses : 6 dmesg-warn(s) - Exec time: [0.35, 4.09] s * igt@core_hotunplug@gem_buffer-hotunplug: - Statuses : 6 dmesg-warn(s) - Exec time: [0.39, 3.98] s * igt@core_hotunplug@gem_mmap-hotunplug: - Statuses : 6 dmesg-warn(s) - Exec time: [0.33, 5.11] s * igt@core_hotunplug@i915-hotunplug-write: - Statuses : 3 dmesg-fail(s) 3 dmesg-warn(s) - Exec time: [0.51, 3.83] s * igt@core_hotunplug@i915_context-hotunplug: - Statuses : 3 dmesg-fail(s) 3 dmesg-warn(s) - Exec time: [0.41, 3.85] s * igt@core_hotunplug@i915_spin-hotunplug: - Statuses : 1 dmesg-fail(s) 1 dmesg-warn(s) 4 incomplete(s) - Exec time: [0.0, 1.32] s * igt@core_hotunplug@unbind-rebind: - Statuses : 1 dmesg-warn(s) 5 pass(s) - Exec time: [0.37, 1.82] s * igt@core_hotunplug@unplug-rescan: - Statuses : 2 dmesg-warn(s) 4 pass(s) - Exec time: [0.36, 4.02] s Known issues ------------ Here are the changes found in IGTPW_2956_full that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_exec_blt@dumb-buf: - shard-glk: [PASS][55] -> [INCOMPLETE][56] ([fdo#103359] / [k.org#198133]) [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-glk7/igt@gem_exec_blt@dumb-buf.html [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-glk9/igt@gem_exec_blt@dumb-buf.html * igt@gem_exec_params@invalid-bsd1-flag-on-blt: - shard-iclb: [PASS][57] -> [SKIP][58] ([fdo#109276]) +1 similar issue [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb1/igt@gem_exec_params@invalid-bsd1-flag-on-blt.html [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb8/igt@gem_exec_params@invalid-bsd1-flag-on-blt.html * igt@i915_pm_rc6_residency@rc6-accuracy: - shard-kbl: [PASS][59] -> [SKIP][60] ([fdo#109271]) [59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-kbl5/igt@i915_pm_rc6_residency@rc6-accuracy.html [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-kbl2/igt@i915_pm_rc6_residency@rc6-accuracy.html * igt@kms_cursor_crc@cursor-64x21-random: - shard-apl: [PASS][61] -> [FAIL][62] ([fdo#103232]) +1 similar issue [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-apl7/igt@kms_cursor_crc@cursor-64x21-random.html [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-apl7/igt@kms_cursor_crc@cursor-64x21-random.html - shard-kbl: [PASS][63] -> [FAIL][64] ([fdo#103232]) +1 similar issue [63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-kbl6/igt@kms_cursor_crc@cursor-64x21-random.html [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-kbl5/igt@kms_cursor_crc@cursor-64x21-random.html * igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic: - shard-glk: [PASS][65] -> [FAIL][66] ([fdo#106509] / [fdo#107409]) [65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-glk8/igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic.html [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-glk7/igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic.html * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible: - shard-glk: [PASS][67] -> [FAIL][68] ([fdo#105363]) [67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-glk4/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-glk3/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-render: - shard-iclb: [PASS][69] -> [FAIL][70] ([fdo#103167]) +3 similar issues [69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-render.html [70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-render.html * igt@kms_frontbuffer_tracking@fbc-suspend: - shard-kbl: [PASS][71] -> [DMESG-WARN][72] ([fdo#108566]) +4 similar issues [71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-kbl3/igt@kms_frontbuffer_tracking@fbc-suspend.html [72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-kbl1/igt@kms_frontbuffer_tracking@fbc-suspend.html - shard-apl: [PASS][73] -> [DMESG-WARN][74] ([fdo#108566]) +5 similar issues [73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-apl2/igt@kms_frontbuffer_tracking@fbc-suspend.html [74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-apl3/igt@kms_frontbuffer_tracking@fbc-suspend.html * igt@kms_plane@pixel-format-pipe-a-planes: - shard-iclb: [PASS][75] -> [INCOMPLETE][76] ([fdo#107713] / [fdo#110036 ]) +1 similar issue [75]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb1/igt@kms_plane@pixel-format-pipe-a-planes.html [76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb8/igt@kms_plane@pixel-format-pipe-a-planes.html * igt@kms_plane@pixel-format-pipe-b-planes: - shard-iclb: [PASS][77] -> [INCOMPLETE][78] ([fdo#107713] / [fdo#110036 ] / [fdo#110566]) [77]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb8/igt@kms_plane@pixel-format-pipe-b-planes.html [78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb8/igt@kms_plane@pixel-format-pipe-b-planes.html * igt@kms_psr@primary_render: - shard-iclb: [PASS][79] -> [INCOMPLETE][80] ([fdo#107713]) [79]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb1/igt@kms_psr@primary_render.html [80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb8/igt@kms_psr@primary_render.html * igt@kms_psr@psr2_primary_mmap_gtt: - shard-iclb: [PASS][81] -> [SKIP][82] ([fdo#109441]) +1 similar issue [81]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb2/igt@kms_psr@psr2_primary_mmap_gtt.html [82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb5/igt@kms_psr@psr2_primary_mmap_gtt.html * igt@kms_setmode@basic: - shard-iclb: [PASS][83] -> [FAIL][84] ([fdo#99912]) [83]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb5/igt@kms_setmode@basic.html [84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb5/igt@kms_setmode@basic.html - shard-kbl: [PASS][85] -> [FAIL][86] ([fdo#99912]) [85]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-kbl6/igt@kms_setmode@basic.html [86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-kbl4/igt@kms_setmode@basic.html * igt@kms_sysfs_edid_timing: - shard-iclb: [PASS][87] -> [FAIL][88] ([fdo#100047]) [87]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb6/igt@kms_sysfs_edid_timing.html [88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb2/igt@kms_sysfs_edid_timing.html * igt@kms_vblank@pipe-b-ts-continuation-idle-hang: - shard-iclb: [PASS][89] -> [SKIP][90] ([fdo#109278]) +2 similar issues [89]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb6/igt@kms_vblank@pipe-b-ts-continuation-idle-hang.html [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb8/igt@kms_vblank@pipe-b-ts-continuation-idle-hang.html #### Possible fixes #### * igt@gem_ctx_isolation@vcs0-s3: - shard-kbl: [DMESG-WARN][91] ([fdo#108566]) -> [PASS][92] +1 similar issue [91]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-kbl7/igt@gem_ctx_isolation@vcs0-s3.html [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-kbl4/igt@gem_ctx_isolation@vcs0-s3.html * igt@i915_pm_rpm@system-suspend-execbuf: - shard-kbl: [INCOMPLETE][93] ([fdo#103665] / [fdo#107807]) -> [PASS][94] [93]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-kbl1/igt@i915_pm_rpm@system-suspend-execbuf.html [94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-kbl5/igt@i915_pm_rpm@system-suspend-execbuf.html * igt@i915_suspend@sysfs-reader: - shard-apl: [DMESG-WARN][95] ([fdo#108566]) -> [PASS][96] +3 similar issues [95]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-apl5/igt@i915_suspend@sysfs-reader.html [96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-apl3/igt@i915_suspend@sysfs-reader.html * igt@kms_cursor_crc@cursor-128x42-offscreen: - shard-hsw: [INCOMPLETE][97] ([fdo#103540]) -> [PASS][98] [97]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-hsw7/igt@kms_cursor_crc@cursor-128x42-offscreen.html [98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-hsw4/igt@kms_cursor_crc@cursor-128x42-offscreen.html * igt@kms_cursor_legacy@cursor-vs-flip-toggle: - shard-hsw: [FAIL][99] ([fdo#103355]) -> [PASS][100] [99]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-hsw8/igt@kms_cursor_legacy@cursor-vs-flip-toggle.html [100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-hsw1/igt@kms_cursor_legacy@cursor-vs-flip-toggle.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-mmap-gtt: - shard-glk: [FAIL][101] ([fdo#103167]) -> [PASS][102] [101]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-glk8/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-mmap-gtt.html [102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-glk7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-mmap-gtt.html * igt@kms_frontbuffer_tracking@fbc-rgb565-draw-pwrite: - shard-iclb: [FAIL][103] ([fdo#103167]) -> [PASS][104] +2 similar issues [103]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb2/igt@kms_frontbuffer_tracking@fbc-rgb565-draw-pwrite.html [104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb4/igt@kms_frontbuffer_tracking@fbc-rgb565-draw-pwrite.html * igt@kms_psr@psr2_cursor_plane_onoff: - shard-iclb: [SKIP][105] ([fdo#109441]) -> [PASS][106] +2 similar issues [105]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6069/shard-iclb6/igt@kms_psr@psr2_cursor_plane_onoff.html [106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/shard-iclb2/igt@kms_psr@psr2_cursor_plane_onoff.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [fdo#100047]: https://bugs.freedesktop.org/show_bug.cgi?id=100047 [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167 [fdo#103232]: https://bugs.freedesktop.org/show_bug.cgi?id=103232 [fdo#103355]: https://bugs.freedesktop.org/show_bug.cgi?id=103355 [fdo#103359]: https://bugs.freedesktop.org/show_bug.cgi?id=103359 [fdo#103540]: https://bugs.freedesktop.org/ == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2956/ _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2019-05-13 9:19 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-05-09 8:09 [igt-dev] [PATCH i-g-t v9 0/1] tests: Add a new test for device hot unplug Janusz Krzysztofik 2019-05-09 8:09 ` [igt-dev] [PATCH i-g-t v9 1/1] " Janusz Krzysztofik 2019-05-13 9:19 ` Daniel Vetter 2019-05-09 11:19 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork 2019-05-09 14:19 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox