[Intel-gfx] [PATCH 3/3] i965: check scratch page in a locked fashion on each ioctl
kevin.rogovin at intel.com
kevin.rogovin at intel.com
Tue Dec 5 07:48:14 UTC 2017
From: Kevin Rogovin <kevin.rogovin at intel.com>
---
src/mesa/drivers/dri/i965/intel_batchbuffer.c | 27 ++++++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
index 216073129b..53b3eaf49b 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
@@ -804,7 +804,8 @@ static int
submit_batch(struct brw_context *brw, int in_fence_fd, int *out_fence_fd)
{
const struct gen_device_info *devinfo = &brw->screen->devinfo;
- __DRIscreen *dri_screen = brw->screen->driScrnPriv;
+ struct intel_screen *screen = brw->screen;
+ __DRIscreen *dri_screen = screen->driScrnPriv;
struct intel_batchbuffer *batch = &brw->batch;
int ret = 0;
@@ -875,10 +876,34 @@ submit_batch(struct brw_context *brw, int in_fence_fd, int *out_fence_fd)
batch->validation_list[index] = tmp;
}
+ if (unlikely(screen->debug_batchbuffer.enabled)) {
+ simple_mtx_lock(&screen->debug_batchbuffer.mutex);
+ }
+
ret = execbuffer(dri_screen->fd, batch, hw_ctx,
4 * USED_BATCH(*batch),
in_fence_fd, out_fence_fd, flags);
+ if (unlikely(screen->debug_batchbuffer.enabled)) {
+ struct drm_i915_scratch_page sc;
+ int ret;
+
+ while (brw_bo_busy(batch->bo)) {
+ usleep(10);
+ }
+
+ sc.buffer_size = screen->debug_batchbuffer.buffer_size;
+ sc.buffer_ptr = (__u64)(uintptr_t) screen->debug_batchbuffer.tmp;
+
+ ret = drmIoctl(dri_screen->fd, DRM_IOCTL_I915_READ_SCRATCH_PAGE, &sc);
+ assert(ret == 0);
+ assert(sc.buffer_size == screen->debug_batchbuffer.buffer_size);
+ assert(memcmp(screen->debug_batchbuffer.tmp,
+ screen->debug_batchbuffer.noise_values,
+ screen->debug_batchbuffer.buffer_size) == 0);
+ simple_mtx_unlock(&screen->debug_batchbuffer.mutex);
+ }
+
throttle(brw);
}
--
2.15.0
More information about the Intel-gfx
mailing list