diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2017-06-05 11:55:57 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2017-06-21 15:12:54 +0100 |
commit | 310eaeb60579110c5a8e2f31d87ec659ab66b3b8 (patch) | |
tree | 2bdfce0dd80ff3280fa85daf0e80cf705ec00c56 /lib/igt_aux.c | |
parent | d517ee729ddbe2bb8a5c6cc10e7ce35d73a8bd82 (diff) |
lib: Force global reset + uevents for hang detector
The hang detector relies on a uevent for notification and aborting the
test. As proposed, fine-grained resets may not produce a global uevent
and so this hang detection becomes void. As we don't expect any hang, we
can just reduce the reset to only a global + uevent and so maintain
functionality, and switch back to fine-grained resets afterwards.
Note that any test that requires testing fine-grained resets should
ensure that they are enabled first as igt may leave the global
parameters in an inconsistent state.
v2: Restore fine-grained resets for explict igt_allow_hang()
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Michel Thierry <michel.thierry@intel.com>
Reviewed-by: Michel Thierry <michel.thierry@intel.com>
Diffstat (limited to 'lib/igt_aux.c')
-rw-r--r-- | lib/igt_aux.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/igt_aux.c b/lib/igt_aux.c index f76e55d5..eb563f72 100644 --- a/lib/igt_aux.c +++ b/lib/igt_aux.c @@ -58,6 +58,7 @@ #include "igt_debugfs.h" #include "igt_gt.h" #include "igt_rand.h" +#include "igt_sysfs.h" #include "config.h" #include "intel_reg.h" #include "ioctl_wrappers.h" @@ -451,6 +452,15 @@ void igt_fork_hang_detector(int fd) igt_assert(fstat(fd, &st) == 0); + /* + * Disable per-engine reset to force an error uevent. We don't + * expect to get any hangs whilst the detector is enabled (if we do + * they are a test failure!) and so the loss of per-engine reset + * functionality is not an issue. + */ + igt_assert(igt_sysfs_set_parameter + (fd, "reset", "%d", 1 /* only global reset */)); + signal(SIGIO, sig_abort); igt_fork_helper(&hang_detector) hang_detector_process(getppid(), st.st_rdev); |