anv: Return VK_ERROR_DEVICE_LOST from anv_device_set_lost
This lets us get rid of a bunch of duplicated error messages. Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
This commit is contained in:
parent
ade22ae1ac
commit
07eb8e7466
|
@ -2048,21 +2048,26 @@ void anv_GetDeviceQueue2(
|
|||
*pQueue = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
anv_device_set_lost(struct anv_device *device, const char *msg, ...)
|
||||
VkResult
|
||||
_anv_device_set_lost(struct anv_device *device,
|
||||
const char *file, int line,
|
||||
const char *msg, ...)
|
||||
{
|
||||
VkResult err;
|
||||
va_list ap;
|
||||
|
||||
device->_lost = true;
|
||||
|
||||
if (env_var_as_boolean("ANV_ABORT_ON_DEVICE_LOSS", false)) {
|
||||
intel_loge("Device lost!");
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, msg);
|
||||
intel_loge_v(msg, ap);
|
||||
va_end(ap);
|
||||
va_start(ap, msg);
|
||||
err = __vk_errorv(device->instance, device,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
|
||||
VK_ERROR_DEVICE_LOST, file, line, msg, ap);
|
||||
va_end(ap);
|
||||
|
||||
if (env_var_as_boolean("ANV_ABORT_ON_DEVICE_LOSS", false))
|
||||
abort();
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
VkResult
|
||||
|
@ -2079,19 +2084,13 @@ anv_device_query_status(struct anv_device *device)
|
|||
int ret = anv_gem_gpu_get_reset_stats(device, &active, &pending);
|
||||
if (ret == -1) {
|
||||
/* We don't know the real error. */
|
||||
anv_device_set_lost(device, "get_reset_stats failed: %m");
|
||||
return vk_errorf(device->instance, device, VK_ERROR_DEVICE_LOST,
|
||||
"get_reset_stats failed: %m");
|
||||
return anv_device_set_lost(device, "get_reset_stats failed: %m");
|
||||
}
|
||||
|
||||
if (active) {
|
||||
anv_device_set_lost(device, "GPU hung on one of our command buffers");
|
||||
return vk_errorf(device->instance, device, VK_ERROR_DEVICE_LOST,
|
||||
"GPU hung on one of our command buffers");
|
||||
return anv_device_set_lost(device, "GPU hung on one of our command buffers");
|
||||
} else if (pending) {
|
||||
anv_device_set_lost(device, "GPU hung with commands in-flight");
|
||||
return vk_errorf(device->instance, device, VK_ERROR_DEVICE_LOST,
|
||||
"GPU hung with commands in-flight");
|
||||
return anv_device_set_lost(device, "GPU hung with commands in-flight");
|
||||
}
|
||||
|
||||
return VK_SUCCESS;
|
||||
|
@ -2109,9 +2108,7 @@ anv_device_bo_busy(struct anv_device *device, struct anv_bo *bo)
|
|||
return VK_NOT_READY;
|
||||
} else if (ret == -1) {
|
||||
/* We don't know the real error. */
|
||||
anv_device_set_lost(device, "gem wait failed: %m");
|
||||
return vk_errorf(device->instance, device, VK_ERROR_DEVICE_LOST,
|
||||
"gem wait failed: %m");
|
||||
return anv_device_set_lost(device, "gem wait failed: %m");
|
||||
}
|
||||
|
||||
/* Query for device status after the busy call. If the BO we're checking
|
||||
|
@ -2132,9 +2129,7 @@ anv_device_wait(struct anv_device *device, struct anv_bo *bo,
|
|||
return VK_TIMEOUT;
|
||||
} else if (ret == -1) {
|
||||
/* We don't know the real error. */
|
||||
anv_device_set_lost(device, "gem wait failed: %m");
|
||||
return vk_errorf(device->instance, device, VK_ERROR_DEVICE_LOST,
|
||||
"gem wait failed: %m");
|
||||
return anv_device_set_lost(device, "gem wait failed: %m");
|
||||
}
|
||||
|
||||
/* Query for device status after the wait. If the BO we're waiting on got
|
||||
|
@ -3111,9 +3106,8 @@ VkResult anv_GetCalibratedTimestampsEXT(
|
|||
&pTimestamps[d]);
|
||||
|
||||
if (ret != 0) {
|
||||
anv_device_set_lost(device, "Failed to get a timestamp");
|
||||
return vk_errorf(device->instance, device, VK_ERROR_DEVICE_LOST,
|
||||
"Failed to read the TIMESTAMP register: %m");
|
||||
return anv_device_set_lost(device, "Failed to read the TIMESTAMP "
|
||||
"register: %m");
|
||||
}
|
||||
uint64_t device_period = DIV_ROUND_UP(1000000000, timestamp_frequency);
|
||||
max_clock_period = MAX2(max_clock_period, device_period);
|
||||
|
|
|
@ -1083,8 +1083,11 @@ anv_state_flush(struct anv_device *device, struct anv_state state)
|
|||
void anv_device_init_blorp(struct anv_device *device);
|
||||
void anv_device_finish_blorp(struct anv_device *device);
|
||||
|
||||
void anv_device_set_lost(struct anv_device *device,
|
||||
const char *msg, ...);
|
||||
VkResult _anv_device_set_lost(struct anv_device *device,
|
||||
const char *file, int line,
|
||||
const char *msg, ...);
|
||||
#define anv_device_set_lost(dev, ...) \
|
||||
_anv_device_set_lost(dev, __FILE__, __LINE__, __VA_ARGS__)
|
||||
|
||||
static inline bool
|
||||
anv_device_is_lost(struct anv_device *device)
|
||||
|
|
|
@ -42,9 +42,7 @@ anv_device_execbuf(struct anv_device *device,
|
|||
int ret = device->no_hw ? 0 : anv_gem_execbuffer(device, execbuf);
|
||||
if (ret != 0) {
|
||||
/* We don't know the real error. */
|
||||
anv_device_set_lost(device, "execbuf2 failed: %m");
|
||||
return vk_errorf(device->instance, device, VK_ERROR_DEVICE_LOST,
|
||||
"execbuf2 failed: %m");
|
||||
return anv_device_set_lost(device, "execbuf2 failed: %m");
|
||||
}
|
||||
|
||||
struct drm_i915_gem_exec_object2 *objects =
|
||||
|
@ -243,9 +241,7 @@ out:
|
|||
* VK_ERROR_DEVICE_LOST to ensure that clients do not attempt to
|
||||
* submit the same job again to this device.
|
||||
*/
|
||||
result = vk_errorf(device->instance, device, VK_ERROR_DEVICE_LOST,
|
||||
"vkQueueSubmit() failed");
|
||||
anv_device_set_lost(device, "vkQueueSubmit() failed");
|
||||
result = anv_device_set_lost(device, "vkQueueSubmit() failed");
|
||||
}
|
||||
|
||||
pthread_mutex_unlock(&device->mutex);
|
||||
|
@ -438,9 +434,7 @@ VkResult anv_GetFenceStatus(
|
|||
return VK_NOT_READY;
|
||||
} else {
|
||||
/* We don't know the real error. */
|
||||
anv_device_set_lost(device, "drm_syncobj_wait failed: %m");
|
||||
return vk_errorf(device->instance, device, VK_ERROR_DEVICE_LOST,
|
||||
"drm_syncobj_wait failed: %m");
|
||||
return anv_device_set_lost(device, "drm_syncobj_wait failed: %m");
|
||||
}
|
||||
} else {
|
||||
return VK_SUCCESS;
|
||||
|
@ -526,9 +520,7 @@ anv_wait_for_syncobj_fences(struct anv_device *device,
|
|||
return VK_TIMEOUT;
|
||||
} else {
|
||||
/* We don't know the real error. */
|
||||
anv_device_set_lost(device, "drm_syncobj_wait failed: %m");
|
||||
return vk_errorf(device->instance, device, VK_ERROR_DEVICE_LOST,
|
||||
"drm_syncobj_wait failed: %m");
|
||||
return anv_device_set_lost(device, "drm_syncobj_wait failed: %m");
|
||||
}
|
||||
} else {
|
||||
return VK_SUCCESS;
|
||||
|
|
|
@ -181,9 +181,7 @@ wait_for_available(struct anv_device *device,
|
|||
continue;
|
||||
} else if (ret == -1) {
|
||||
/* We don't know the real error. */
|
||||
anv_device_set_lost(device, "gem wait failed: %m");
|
||||
return vk_errorf(device->instance, device, VK_ERROR_DEVICE_LOST,
|
||||
"gem wait failed: %m");
|
||||
return anv_device_set_lost(device, "gem wait failed: %m");
|
||||
} else {
|
||||
assert(ret == 0);
|
||||
/* The BO is no longer busy. */
|
||||
|
|
Loading…
Reference in New Issue