anv: Add an option to abort on device loss
authorJason Ekstrand <jason@jlekstrand.net>
Thu, 18 May 2017 20:51:16 +0000 (13:51 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 18 May 2017 23:32:11 +0000 (16:32 -0700)
This is mostly for running in our CI system to prevent dEQP from
continuing on to the next test if we get a GPU hang.  As it currently
stands, dEQP uses the same VkDevice for almost all tests and if one of
the tests hangs, we set the anv_device::device_lost flag and report
VK_ERROR_DEVICE_LOST for all queue operations from that point forward
without sending anything to the GPU.  dEQP will happily continue trying
to run tests and reporting failures until it eventually gets crash that
forces the test runner to start over.  This circumvents the problem by
just aborting the process if we ever get a GPU hang.  Since this is not
the recommended behavior most of the time, we hide it behind an
environment variable.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
src/intel/vulkan/anv_util.c

index ba91733d82bd2371f1fefea85ee259df007c3206..4b916e27f2c910c20d75ea199b90bf6510c688f3 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "anv_private.h"
 #include "vk_enum_to_str.h"
+#include "util/debug.h"
 
 /** Log an error message.  */
 void anv_printflike(1, 2)
@@ -95,5 +96,9 @@ __vk_errorf(VkResult error, const char *file, int line, const char *format, ...)
       fprintf(stderr, "%s:%d: %s\n", file, line, error_str);
    }
 
+   if (error == VK_ERROR_DEVICE_LOST &&
+       env_var_as_boolean("ANV_ABORT_ON_DEVICE_LOSS", false))
+      abort();
+
    return error;
 }