sna: Apply DEBUG_SYNC prior to emitting error report

This is handy for the case where the batch triggers a GPU hang rather
than being rejected by the kernel.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2013-01-20 01:39:12 +00:00
parent 42ab789cce
commit c9263f192e
1 changed files with 20 additions and 19 deletions

View File

@ -2649,6 +2649,26 @@ void _kgem_submit(struct kgem *kgem)
kgem_throttle(kgem);
ret = 0;
}
if (DEBUG_FLUSH_SYNC && ret == 0) {
struct drm_i915_gem_set_domain set_domain;
DBG(("%s: debug sync, starting\n", __FUNCTION__));
VG_CLEAR(set_domain);
set_domain.handle = handle;
set_domain.read_domains = I915_GEM_DOMAIN_GTT;
set_domain.write_domain = I915_GEM_DOMAIN_GTT;
ret = drmIoctl(kgem->fd, DRM_IOCTL_I915_GEM_SET_DOMAIN, &set_domain);
if (ret == -1) {
DBG(("%s: sync: GPU hang detected\n", __FUNCTION__));
kgem_throttle(kgem);
}
DBG(("%s: debug sync, completed\n", __FUNCTION__));
}
#if !NDEBUG
if (ret < 0) {
ret = errno;
@ -2695,25 +2715,6 @@ void _kgem_submit(struct kgem *kgem)
FatalError("SNA: failed to submit batchbuffer, errno=%d\n", ret);
}
#endif
if (DEBUG_FLUSH_SYNC) {
struct drm_i915_gem_set_domain set_domain;
DBG(("%s: debug sync, starting\n", __FUNCTION__));
VG_CLEAR(set_domain);
set_domain.handle = handle;
set_domain.read_domains = I915_GEM_DOMAIN_GTT;
set_domain.write_domain = I915_GEM_DOMAIN_GTT;
ret = drmIoctl(kgem->fd, DRM_IOCTL_I915_GEM_SET_DOMAIN, &set_domain);
if (ret == -1) {
DBG(("%s: sync: GPU hang detected\n", __FUNCTION__));
kgem_throttle(kgem);
}
DBG(("%s: debug sync, completed\n", __FUNCTION__));
}
}
kgem_commit(kgem);