diff options
Diffstat (limited to 'src/mesa/drivers/dri')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_bufmgr.h | 5 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_reset.c | 36 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_bufmgr_gem.c | 32 |
3 files changed, 17 insertions, 56 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_bufmgr.h b/src/mesa/drivers/dri/i965/brw_bufmgr.h index 87e67602bd9..026cc00c792 100644 --- a/src/mesa/drivers/dri/i965/brw_bufmgr.h +++ b/src/mesa/drivers/dri/i965/brw_bufmgr.h @@ -317,11 +317,6 @@ int drm_bacon_reg_read(drm_bacon_bufmgr *bufmgr, uint32_t offset, uint64_t *result); -int drm_bacon_get_reset_stats(drm_bacon_context *ctx, - uint32_t *reset_count, - uint32_t *active, - uint32_t *pending); - /** @{ */ #if defined(__cplusplus) diff --git a/src/mesa/drivers/dri/i965/brw_reset.c b/src/mesa/drivers/dri/i965/brw_reset.c index b91ffd723b9..aa68102d2e3 100644 --- a/src/mesa/drivers/dri/i965/brw_reset.c +++ b/src/mesa/drivers/dri/i965/brw_reset.c @@ -23,6 +23,7 @@ #include "main/context.h" +#include <xf86drm.h> #include "brw_context.h" /** @@ -34,10 +35,8 @@ GLenum brw_get_graphics_reset_status(struct gl_context *ctx) { struct brw_context *brw = brw_context(ctx); - int err; - uint32_t reset_count; - uint32_t active; - uint32_t pending; + __DRIscreen *dri_screen = brw->screen->driScrnPriv; + struct drm_i915_reset_stats stats; /* If hardware contexts are not being used (or * DRM_IOCTL_I915_GET_RESET_STATS is not supported), this function should @@ -45,6 +44,9 @@ brw_get_graphics_reset_status(struct gl_context *ctx) */ assert(brw->hw_ctx != NULL); + memset(&stats, 0, sizeof(stats)); + drm_bacon_gem_context_get_id(brw->hw_ctx, &stats.ctx_id); + /* A reset status other than NO_ERROR was returned last time. I915 returns * nonzero active/pending only if reset has been encountered and completed. * Return NO_ERROR from now on. @@ -52,16 +54,14 @@ brw_get_graphics_reset_status(struct gl_context *ctx) if (brw->reset_count != 0) return GL_NO_ERROR; - err = drm_bacon_get_reset_stats(brw->hw_ctx, &reset_count, &active, - &pending); - if (err) + if (drmIoctl(dri_screen->fd, DRM_IOCTL_I915_GET_RESET_STATS, &stats) != 0) return GL_NO_ERROR; /* A reset was observed while a batch from this context was executing. * Assume that this context was at fault. */ - if (active != 0) { - brw->reset_count = reset_count; + if (stats.batch_active != 0) { + brw->reset_count = stats.reset_count; return GL_GUILTY_CONTEXT_RESET_ARB; } @@ -69,8 +69,8 @@ brw_get_graphics_reset_status(struct gl_context *ctx) * but the batch was not executing. In this case, assume that the context * was not at fault. */ - if (pending != 0) { - brw->reset_count = reset_count; + if (stats.batch_pending != 0) { + brw->reset_count = stats.reset_count; return GL_INNOCENT_CONTEXT_RESET_ARB; } @@ -80,16 +80,14 @@ brw_get_graphics_reset_status(struct gl_context *ctx) void brw_check_for_reset(struct brw_context *brw) { - uint32_t reset_count; - uint32_t active; - uint32_t pending; - int err; + __DRIscreen *dri_screen = brw->screen->driScrnPriv; + struct drm_i915_reset_stats stats; + memset(&stats, 0, sizeof(stats)); + drm_bacon_gem_context_get_id(brw->hw_ctx, &stats.ctx_id); - err = drm_bacon_get_reset_stats(brw->hw_ctx, &reset_count, &active, - &pending); - if (err) + if (drmIoctl(dri_screen->fd, DRM_IOCTL_I915_GET_RESET_STATS, &stats) != 0) return; - if (active > 0 || pending > 0) + if (stats.batch_active > 0 || stats.batch_pending > 0) _mesa_set_context_lost_dispatch(&brw->ctx); } diff --git a/src/mesa/drivers/dri/i965/intel_bufmgr_gem.c b/src/mesa/drivers/dri/i965/intel_bufmgr_gem.c index 03a44d5e278..bb42ea8b7f9 100644 --- a/src/mesa/drivers/dri/i965/intel_bufmgr_gem.c +++ b/src/mesa/drivers/dri/i965/intel_bufmgr_gem.c @@ -1476,38 +1476,6 @@ drm_bacon_gem_context_destroy(drm_bacon_context *ctx) } int -drm_bacon_get_reset_stats(drm_bacon_context *ctx, - uint32_t *reset_count, - uint32_t *active, - uint32_t *pending) -{ - struct drm_i915_reset_stats stats; - int ret; - - if (ctx == NULL) - return -EINVAL; - - memclear(stats); - - stats.ctx_id = ctx->ctx_id; - ret = drmIoctl(ctx->bufmgr->fd, - DRM_IOCTL_I915_GET_RESET_STATS, - &stats); - if (ret == 0) { - if (reset_count != NULL) - *reset_count = stats.reset_count; - - if (active != NULL) - *active = stats.batch_active; - - if (pending != NULL) - *pending = stats.batch_pending; - } - - return ret; -} - -int drm_bacon_reg_read(drm_bacon_bufmgr *bufmgr, uint32_t offset, uint64_t *result) |