https://bugs.freedesktop.org/show_bug.cgi?id=110354
Bug ID: 110354 Summary: Confusing Junk in the results: Last errno: 25, Inappropriate ioctl for device Product: DRI Version: unspecified Hardware: Other OS: All Status: NEW Severity: major Priority: medium Component: IGT Assignee: dri-devel@lists.freedesktop.org Reporter: arkadiusz.hiler@intel.com
IGT's asserts log the last errno if it's not 0, and it seems like we get this "Inappropriate ioctl for device" quite often polluting the CI results and confusing people.
We have to locate where is it originating from and set errno to 0 after handling it to stop the pollution.
Some examples: https://bugs.freedesktop.org/show_bug.cgi?id=109358 https://bugs.freedesktop.org/show_bug.cgi?id=110037 https://bugs.freedesktop.org/show_bug.cgi?id=110279
https://bugs.freedesktop.org/show_bug.cgi?id=110354
--- Comment #1 from Arek Hiler arkadiusz.hiler@intel.com --- diff --git a/lib/igt_aux.c b/lib/igt_aux.c index 266aa832..b235b18c 100644 --- a/lib/igt_aux.c +++ b/lib/igt_aux.c @@ -984,8 +984,11 @@ void igt_debug_wait_for_keypress(const char *var) { struct termios oldt, newt;
- if (!isatty(STDIN_FILENO)) + if (!isatty(STDIN_FILENO)) { + errno = 0; /* otherwise may be ENOTTY */ return; + } +
if (!igt_interactive_debug) return;
Found the culprit in this particular case. This would suppress most of the weird errno logged in kms tests.
The questions is now: do we really want to hunt all similar cases down? A round of gdb through a couple of tests with 'watch errno' shows that it gets set to non-zero value about a dozen times every single subtest. Depending when we hit an assert we may get any of those printed out adding to confusion.
I see 3 options: 1. make sure that errno is reset to 0 by everything that touches it and change my nickname to Sisyphus 2. get rid of printing errno in igt_assert(), but then lose valuable information for all those igt_assert(write(...)); 3. change igt_assert*(expr,...) macros so that they 'errno = 0;' before evaluating expr
I think that 3 makes the most sense, then we can quickly go through all the 4000-ish of calls we have to make sure that we don't have any weird 'int ret = write(); igt_assert(ret);' for those functions where errno matters.
https://bugs.freedesktop.org/show_bug.cgi?id=110354
Arek Hiler arkadiusz.hiler@intel.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |FIXED
--- Comment #2 from Arek Hiler arkadiusz.hiler@intel.com --- There was a patch merged that resets errno in the few places where errno pollution is likely and in the few places where it may require resetting:
commit a558c2e2405473f4157ca71638e5a111ebfa80d1 Author: Arkadiusz Hiler arkadiusz.hiler@intel.com Date: Tue Apr 9 17:21:41 2019 +0300
lib: Reset errno to 0 after isatty
Since igt_assert family of functions logs last errno we get a lot of those: "Last errno: 25, Inappropriate ioctl for device"
isatty() seems to be the biggest offender in that area, so this patch should limit amount of confusing messages significantly.
Cc: Martin Peres martin.peres@linux.intel.com Cc: Petri Latvala petri.latvala@intel.com Signed-off-by: Arkadiusz Hiler arkadiusz.hiler@intel.com Reviewed-by: Petri Latvala petri.latvala@intel.com
commit 02b1706e8b1ca93a53d4ef0f9c484a6f1a0d18f2 Author: Arkadiusz Hiler arkadiusz.hiler@intel.com Date: Thu Apr 4 16:17:40 2019 +0300
lib/igt_kms: Be more verbose about failure in kmstest_wait_for_pageflip
First, we set errno to 0 before doing select() to avoid random pollution of the assert message with things like: "Last errno: 25, Inappropriate ioctl for device"
Second, we log explicitly if we exceeded the timeout (ret == 0).
Third, if we fail the select() we log that with some explanation.
Cc: Petri Latvala petri.latvala@intel.com Cc: Daniel Vetter daniel.vetter@ffwll.ch Signed-off-by: Arkadiusz Hiler arkadiusz.hiler@intel.com Reviewed-by: Petri Latvala petri.latvala@intel.com
dri-devel@lists.freedesktop.org