[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