https://bugs.freedesktop.org/show_bug.cgi?id=108891
Bug ID: 108891 Summary: Test enumeration becomes funky on some tests due to fd FILE* stream change Product: DRI Version: XOrg git Hardware: Other OS: All Status: NEW Severity: normal Priority: medium Component: IGT Assignee: dri-devel@lists.freedesktop.org Reporter: casey.g.bowman@intel.com
Testing on ChromeOS KBL device with a 4.4 kernel
IGT SHA used was: dbe1fc1e13c4e4eebaa9e1bbc5d188b5109c09d3
Running the igt@gem_busy@basic-busy-default test resulted in the following failure:
(gem_busy:13397) igt-gt-CRITICAL: Test assertion failure function igt_allow_hang, file ../../intel-gpu-tools-9999/lib/igt_gt.c:174: (gem_busy:13397) igt-gt-CRITICAL: Failed assertion: igt_sysfs_set_parameter (fd, "reset", "%d", INT_MAX ) (gem_busy:13397) igt-gt-CRITICAL: Last errno: 22, Invalid argument Test gem_busy failed. **** DEBUG **** (gem_busy:13397) DEBUG: Test requirement passed: gem_has_ring(fd, e->exec_id | e->flags) (gem_busy:13397) igt-debugfs-DEBUG: Opening debugfs directory '/sys/kernel/debug/dri/0' (gem_busy:13397) drmtest-DEBUG: Test requirement passed: is_i915_device(fd) && has_known_intel_chipset(fd) (gem_busy:13397) igt-debugfs-DEBUG: Opening debugfs directory '/sys/kernel/debug/dri/0' (gem_busy:13397) ioctl-wrappers-DEBUG: Test requirement passed: dir >= 0 (gem_busy:13397) ioctl-wrappers-DEBUG: Test requirement passed: err == 0 (gem_busy:13397) ioctl-wrappers-DEBUG: Test requirement passed: gem_has_ring(fd, ring) (gem_busy:13397) igt-dummyload-DEBUG: Test requirement passed: nengine (gem_busy:13397) igt-core-INFO: Subtest basic-busy-default: SUCCESS (0.013s) (gem_busy:13397) drmtest-DEBUG: Test requirement passed: is_i915_device(fd) && has_known_intel_chipset(fd) (gem_busy:13397) igt-debugfs-DEBUG: Opening debugfs directory '/sys/kernel/debug/dri/0' (gem_busy:13397) ioctl-wrappers-DEBUG: Test requirement passed: dir >= 0 (gem_busy:13397) ioctl-wrappers-DEBUG: Test requirement passed: err == 0 (gem_busy:13397) ioctl-wrappers-DEBUG: Test requirement passed: gem_has_ring(fd, ring) (gem_busy:13397) igt-dummyload-DEBUG: Test requirement passed: nengine (gem_busy:13397) DEBUG: Test requirement passed: has_extended_busy_ioctl(fd) (gem_busy:13397) drmtest-DEBUG: Test requirement passed: is_i915_device(fd) && has_known_intel_chipset(fd) (gem_busy:13397) igt-debugfs-DEBUG: Opening debugfs directory '/sys/kernel/debug/dri/0' (gem_busy:13397) ioctl-wrappers-DEBUG: Test requirement passed: dir >= 0 (gem_busy:13397) ioctl-wrappers-DEBUG: Test requirement passed: err == 0 (gem_busy:13397) ioctl-wrappers-DEBUG: Test requirement passed: gem_has_ring(fd, ring) (gem_busy:13397) igt-dummyload-DEBUG: Test requirement passed: nengine (gem_busy:13397) DEBUG: Test requirement passed: has_extended_busy_ioctl(fd) (gem_busy:13397) drmtest-DEBUG: Test requirement passed: is_i915_device(fd) && has_known_intel_chipset(fd) (gem_busy:13397) igt-debugfs-DEBUG: Opening debugfs directory '/sys/kernel/debug/dri/0' (gem_busy:13397) ioctl-wrappers-DEBUG: Test requirement passed: dir >= 0 (gem_busy:13397) ioctl-wrappers-DEBUG: Test requirement passed: err == 0 (gem_busy:13397) igt-gt-CRITICAL: Test assertion failure function igt_allow_hang, file ../../intel-gpu-tools-9999/lib/igt_gt.c:174: (gem_busy:13397) igt-gt-CRITICAL: Failed assertion: igt_sysfs_set_parameter (fd, "reset", "%d", INT_MAX ) (gem_busy:13397) igt-gt-CRITICAL: Last errno: 22, Invalid argument (gem_busy:13397) igt-core-INFO: Stack trace: **** END ****
The Stderr output clearly shows that the test passed with: (gem_busy:13397) igt-core-INFO: Subtest basic-busy-default: SUCCESS (0.013s)
But the test continues on.
Doing a bisect resulted in the offending commit:
commit 3f89d7b02dcf662e994c7135b13d52bc8e09a4ea Author: Chris Wilson chris@chris-wilson.co.uk Date: Thu Aug 30 09:38:55 2018 +0100
lib/sysfs: Avoid using FILE* temporary for igt_sysfs_[v]printf
Currently we wrap our fd inside a FILE* stream to make use of vfprintf, but the man page leaves the question of errno and signal handling in doubt. It is documented as returning a negative value and setting ferror(), but we have been interpreting errno to handle signal restarting. As that is in doubt, reduce it to a sprintf and reuse our common interrupt handling write() that already returns -errno.
Signed-off-by: Chris Wilson chris@chris-wilson.co.uk Cc: Katarzyna Dec katarzyna.dec@intel.com Reviewed-by: Katarzyna Dec katarzyna.dec@intel.com
Reverting the commit fixed the behavior and 30+ subtests on the fast-feedback.testlist changed back to passing.
https://bugs.freedesktop.org/show_bug.cgi?id=108891
--- Comment #1 from Casey Bowman casey.g.bowman@intel.com --- Note that the invalid argument error is most likely an unrelated error, but most likely attributed to this bug being found.
https://bugs.freedesktop.org/show_bug.cgi?id=108891
Chris Wilson chris@chris-wilson.co.uk changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |NOTABUG
--- Comment #2 from Chris Wilson chris@chris-wilson.co.uk --- Different subgroup, not affecting basic-busy-default, but rightfully preventing you from running any of the hang tests.
https://bugs.freedesktop.org/show_bug.cgi?id=108891
--- Comment #3 from Chris Wilson chris@chris-wilson.co.uk --- diff --git a/lib/igt_core.c b/lib/igt_core.c index e0989f53..bd600762 100644 --- a/lib/igt_core.c +++ b/lib/igt_core.c @@ -1116,30 +1116,28 @@ void igt_fail(int exitcode) if (in_atexit_handler) _exit(IGT_EXIT_FAILURE);
- if (!failed_one) - igt_exitcode = exitcode; - - failed_one = true; - /* Silent exit, parent will do the yelling. */ if (test_child) exit(exitcode);
+ if (in_fixture) { + skip_subtests_henceforth = FAIL; + __igt_fixture_end(); + } + _igt_log_buffer_dump();
+ if (!failed_one) { + igt_exitcode = exitcode; + failed_one = true; + } + if (in_subtest) { if (exitcode == IGT_EXIT_TIMEOUT) exit_subtest("TIMEOUT"); else exit_subtest("FAIL"); } else { - assert(igt_can_fail()); - - if (in_fixture) { - skip_subtests_henceforth = FAIL; - __igt_fixture_end(); - } - igt_exit(); } }
https://bugs.freedesktop.org/show_bug.cgi?id=108891
Chris Wilson chris@chris-wilson.co.uk changed:
What |Removed |Added ---------------------------------------------------------------------------- Resolution|NOTABUG |--- Status|RESOLVED |REOPENED
--- Comment #4 from Chris Wilson chris@chris-wilson.co.uk --- Just a very misleading bisect.
https://bugs.freedesktop.org/show_bug.cgi?id=108891
--- Comment #5 from Casey Bowman casey.g.bowman@intel.com --- (In reply to Chris Wilson from comment #4)
Just a very misleading bisect.
Agreed, the commit found would probably just cause the gem -hang tests to fail in the kernel we're using as you mentioned earlier.
However, for the cases in which a basic subtest is run (for example, igt@gem_busy@basic-busy-default or igt@gem_exec_reloc@basic-cpu) there shouldn't be any hang checks (igt_allow_hang) for the requirements of those subtests, right?
If so, should we change the bug title to reflect that some requirement checks are being run on subtests that don't reflect the subtest names, like how igt@gem_busy@basic-busy-default doesn't have 'hang' in it?
https://bugs.freedesktop.org/show_bug.cgi?id=108891
Martin Peres martin.peres@free.fr changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|REOPENED |RESOLVED Resolution|--- |MOVED
--- Comment #6 from Martin Peres martin.peres@free.fr --- -- GitLab Migration Automatic Message --
This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity.
You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/11.
dri-devel@lists.freedesktop.org