iris: Rename iris_syncpt to iris_syncobj for clarity.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 29 Apr 2020 06:24:38 +0000 (23:24 -0700)
committerMarge Bot <eric+marge@anholt.net>
Fri, 1 May 2020 19:00:02 +0000 (19:00 +0000)
This is just a refcounted wrapper around a drm_syncobj.  There is
enough terminology going on in the area of synchronization (sync
objects, sync files, ...) that I'd rather not invent our own.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3802>

src/gallium/drivers/iris/iris_batch.c
src/gallium/drivers/iris/iris_batch.h
src/gallium/drivers/iris/iris_fence.c
src/gallium/drivers/iris/iris_fence.h
src/gallium/drivers/iris/iris_query.c

index fd5cb26cfdaeb4f06d18644fd27fca9016814c33..177ba3a848fb649cadf0e250699da2d79f7dcb40 100644 (file)
@@ -188,7 +188,7 @@ iris_init_batch(struct iris_batch *batch,
    iris_hw_context_set_priority(screen->bufmgr, batch->hw_ctx_id, priority);
 
    util_dynarray_init(&batch->exec_fences, ralloc_context(NULL));
-   util_dynarray_init(&batch->syncpts, ralloc_context(NULL));
+   util_dynarray_init(&batch->syncobjs, ralloc_context(NULL));
 
    batch->exec_count = 0;
    batch->exec_array_size = 100;
@@ -315,8 +315,8 @@ iris_use_pinned_bo(struct iris_batch *batch,
          if (other_entry &&
              ((other_entry->flags & EXEC_OBJECT_WRITE) || writable)) {
             iris_batch_flush(batch->other_batches[b]);
-            iris_batch_add_syncpt(batch, batch->other_batches[b]->last_syncpt,
-                                  I915_EXEC_FENCE_WAIT);
+            iris_batch_add_syncobj(batch, batch->other_batches[b]->last_syncobj,
+                                   I915_EXEC_FENCE_WAIT);
          }
       }
    }
@@ -387,9 +387,9 @@ iris_batch_reset(struct iris_batch *batch)
    create_batch(batch);
    assert(batch->bo->index == 0);
 
-   struct iris_syncpt *syncpt = iris_create_syncpt(screen);
-   iris_batch_add_syncpt(batch, syncpt, I915_EXEC_FENCE_SIGNAL);
-   iris_syncpt_reference(screen, &syncpt, NULL);
+   struct iris_syncobj *syncobj = iris_create_syncobj(screen);
+   iris_batch_add_syncobj(batch, syncobj, I915_EXEC_FENCE_SIGNAL);
+   iris_syncobj_reference(screen, &syncobj, NULL);
 
    iris_cache_sets_clear(batch);
 
@@ -410,11 +410,11 @@ iris_batch_free(struct iris_batch *batch)
 
    ralloc_free(batch->exec_fences.mem_ctx);
 
-   util_dynarray_foreach(&batch->syncpts, struct iris_syncpt *, s)
-      iris_syncpt_reference(screen, s, NULL);
-   ralloc_free(batch->syncpts.mem_ctx);
+   util_dynarray_foreach(&batch->syncobjs, struct iris_syncobj *, s)
+      iris_syncobj_reference(screen, s, NULL);
+   ralloc_free(batch->syncobjs.mem_ctx);
 
-   iris_syncpt_reference(screen, &batch->last_syncpt, NULL);
+   iris_syncobj_reference(screen, &batch->last_syncobj, NULL);
 
    iris_bo_unreference(batch->bo);
    batch->bo = NULL;
@@ -689,13 +689,13 @@ _iris_batch_flush(struct iris_batch *batch, const char *file, int line)
    batch->exec_count = 0;
    batch->aperture_space = 0;
 
-   struct iris_syncpt *syncpt =
-      ((struct iris_syncpt **) util_dynarray_begin(&batch->syncpts))[0];
-   iris_syncpt_reference(screen, &batch->last_syncpt, syncpt);
+   struct iris_syncobj *syncobj =
+      ((struct iris_syncobj **) util_dynarray_begin(&batch->syncobjs))[0];
+   iris_syncobj_reference(screen, &batch->last_syncobj, syncobj);
 
-   util_dynarray_foreach(&batch->syncpts, struct iris_syncpt *, s)
-      iris_syncpt_reference(screen, s, NULL);
-   util_dynarray_clear(&batch->syncpts);
+   util_dynarray_foreach(&batch->syncobjs, struct iris_syncobj *, s)
+      iris_syncobj_reference(screen, s, NULL);
+   util_dynarray_clear(&batch->syncobjs);
 
    util_dynarray_clear(&batch->exec_fences);
 
index 19ad39597418aad53951efac197b1b5e22302d23..e285f1d6cfc7f119e1d39320ead5086c70300986 100644 (file)
@@ -96,13 +96,13 @@ struct iris_batch {
    bool noop_enabled;
 
    /**
-    * A list of iris_syncpts associated with this batch.
+    * A list of iris_syncobjs associated with this batch.
     *
     * The first list entry will always be a signalling sync-point, indicating
     * that this batch has completed.  The others are likely to be sync-points
     * to wait on before executing the batch.
     */
-   struct util_dynarray syncpts;
+   struct util_dynarray syncobjs;
 
    /** A list of drm_i915_exec_fences to have execbuf signal or wait on */
    struct util_dynarray exec_fences;
@@ -110,8 +110,8 @@ struct iris_batch {
    /** The amount of aperture space (in bytes) used by all exec_bos */
    int aperture_space;
 
-   /** A sync-point for the last batch that was submitted. */
-   struct iris_syncpt *last_syncpt;
+   /** A drm_syncobj for the last batch that was submitted. */
+   struct iris_syncobj *last_syncobj;
 
    /** List of other batches which we might need to flush to use a BO */
    struct iris_batch *other_batches[IRIS_BATCH_COUNT - 1];
@@ -218,30 +218,30 @@ iris_batch_emit(struct iris_batch *batch, const void *data, unsigned size)
 }
 
 /**
- * Get a pointer to the batch's signalling syncpt.  Does not refcount.
+ * Get a pointer to the batch's signalling syncobj.  Does not refcount.
  */
-static inline struct iris_syncpt *
-iris_batch_get_signal_syncpt(struct iris_batch *batch)
+static inline struct iris_syncobj *
+iris_batch_get_signal_syncobj(struct iris_batch *batch)
 {
-   /* The signalling syncpt is the first one in the list. */
-   struct iris_syncpt *syncpt =
-      ((struct iris_syncpt **) util_dynarray_begin(&batch->syncpts))[0];
-   return syncpt;
+   /* The signalling syncobj is the first one in the list. */
+   struct iris_syncobj *syncobj =
+      ((struct iris_syncobj **) util_dynarray_begin(&batch->syncobjs))[0];
+   return syncobj;
 }
 
 
 /**
- * Take a reference to the batch's signalling syncpt.
+ * Take a reference to the batch's signalling syncobj.
  *
  * Callers can use this to wait for the the current batch under construction
  * to complete (after flushing it).
  */
 static inline void
-iris_batch_reference_signal_syncpt(struct iris_batch *batch,
-                                   struct iris_syncpt **out_syncpt)
+iris_batch_reference_signal_syncobj(struct iris_batch *batch,
+                                   struct iris_syncobj **out_syncobj)
 {
-   struct iris_syncpt *syncpt = iris_batch_get_signal_syncpt(batch);
-   iris_syncpt_reference(batch->screen, out_syncpt, syncpt);
+   struct iris_syncobj *syncobj = iris_batch_get_signal_syncobj(batch);
+   iris_syncobj_reference(batch->screen, out_syncobj, syncobj);
 }
 
 /**
index 65982c41c7c773c3e8e02c1d0bac718feec1847b..09c1b427ef8f677d376b3a899e0507d2a799ba5c 100644 (file)
@@ -62,27 +62,27 @@ gem_syncobj_destroy(int fd, uint32_t handle)
 /**
  * Make a new sync-point.
  */
-struct iris_syncpt *
-iris_create_syncpt(struct iris_screen *screen)
+struct iris_syncobj *
+iris_create_syncobj(struct iris_screen *screen)
 {
-   struct iris_syncpt *syncpt = malloc(sizeof(*syncpt));
+   struct iris_syncobj *syncobj = malloc(sizeof(*syncobj));
 
-   if (!syncpt)
+   if (!syncobj)
       return NULL;
 
-   syncpt->handle = gem_syncobj_create(screen->fd, 0);
-   assert(syncpt->handle);
+   syncobj->handle = gem_syncobj_create(screen->fd, 0);
+   assert(syncobj->handle);
 
-   pipe_reference_init(&syncpt->ref, 1);
+   pipe_reference_init(&syncobj->ref, 1);
 
-   return syncpt;
+   return syncobj;
 }
 
 void
-iris_syncpt_destroy(struct iris_screen *screen, struct iris_syncpt *syncpt)
+iris_syncobj_destroy(struct iris_screen *screen, struct iris_syncobj *syncobj)
 {
-   gem_syncobj_destroy(screen->fd, syncpt->handle);
-   free(syncpt);
+   gem_syncobj_destroy(screen->fd, syncobj->handle);
+   free(syncobj);
 }
 
 /**
@@ -91,30 +91,30 @@ iris_syncpt_destroy(struct iris_screen *screen, struct iris_syncpt *syncpt)
  * \p flags   One of I915_EXEC_FENCE_WAIT or I915_EXEC_FENCE_SIGNAL.
  */
 void
-iris_batch_add_syncpt(struct iris_batch *batch,
-                      struct iris_syncpt *syncpt,
-                      unsigned flags)
+iris_batch_add_syncobj(struct iris_batch *batch,
+                       struct iris_syncobj *syncobj,
+                       unsigned flags)
 {
    struct drm_i915_gem_exec_fence *fence =
       util_dynarray_grow(&batch->exec_fences, struct drm_i915_gem_exec_fence, 1);
 
    *fence = (struct drm_i915_gem_exec_fence) {
-      .handle = syncpt->handle,
+      .handle = syncobj->handle,
       .flags = flags,
    };
 
-   struct iris_syncpt **store =
-      util_dynarray_grow(&batch->syncpts, struct iris_syncpt *, 1);
+   struct iris_syncobj **store =
+      util_dynarray_grow(&batch->syncobjs, struct iris_syncobj *, 1);
 
    *store = NULL;
-   iris_syncpt_reference(batch->screen, store, syncpt);
+   iris_syncobj_reference(batch->screen, store, syncobj);
 }
 
 /* ------------------------------------------------------------------- */
 
 struct pipe_fence_handle {
    struct pipe_reference ref;
-   struct iris_syncpt *syncpt[IRIS_BATCH_COUNT];
+   struct iris_syncobj *syncobj[IRIS_BATCH_COUNT];
    unsigned count;
 };
 
@@ -125,7 +125,7 @@ iris_fence_destroy(struct pipe_screen *p_screen,
    struct iris_screen *screen = (struct iris_screen *)p_screen;
 
    for (unsigned i = 0; i < fence->count; i++)
-      iris_syncpt_reference(screen, &fence->syncpt[i], NULL);
+      iris_syncobj_reference(screen, &fence->syncobj[i], NULL);
 
    free(fence);
 }
@@ -143,16 +143,16 @@ iris_fence_reference(struct pipe_screen *p_screen,
 }
 
 bool
-iris_wait_syncpt(struct pipe_screen *p_screen,
-                 struct iris_syncpt *syncpt,
-                 int64_t timeout_nsec)
+iris_wait_syncobj(struct pipe_screen *p_screen,
+                  struct iris_syncobj *syncobj,
+                  int64_t timeout_nsec)
 {
-   if (!syncpt)
+   if (!syncobj)
       return false;
 
    struct iris_screen *screen = (struct iris_screen *)p_screen;
    struct drm_syncobj_wait args = {
-      .handles = (uintptr_t)&syncpt->handle,
+      .handles = (uintptr_t)&syncobj->handle,
       .count_handles = 1,
       .timeout_nsec = timeout_nsec,
    };
@@ -196,11 +196,11 @@ iris_fence_flush(struct pipe_context *ctx,
    pipe_reference_init(&fence->ref, 1);
 
    for (unsigned b = 0; b < IRIS_BATCH_COUNT; b++) {
-      if (!iris_wait_syncpt(ctx->screen, ice->batches[b].last_syncpt, 0))
+      if (!iris_wait_syncobj(ctx->screen, ice->batches[b].last_syncobj, 0))
          continue;
 
-      iris_syncpt_reference(screen, &fence->syncpt[fence->count++],
-                            ice->batches[b].last_syncpt);
+      iris_syncobj_reference(screen, &fence->syncobj[fence->count++],
+                             ice->batches[b].last_syncobj);
    }
 
    iris_fence_reference(ctx->screen, out_fence, NULL);
@@ -215,7 +215,7 @@ iris_fence_await(struct pipe_context *ctx,
 
    for (unsigned b = 0; b < IRIS_BATCH_COUNT; b++) {
       for (unsigned i = 0; i < fence->count; i++) {
-         iris_batch_add_syncpt(&ice->batches[b], fence->syncpt[i],
+         iris_batch_add_syncobj(&ice->batches[b], fence->syncobj[i],
                                I915_EXEC_FENCE_WAIT);
       }
    }
@@ -258,9 +258,9 @@ iris_fence_finish(struct pipe_screen *p_screen,
    if (!fence->count)
       return true;
 
-   uint32_t handles[ARRAY_SIZE(fence->syncpt)];
+   uint32_t handles[ARRAY_SIZE(fence->syncobj)];
    for (unsigned i = 0; i < fence->count; i++)
-      handles[i] = fence->syncpt[i]->handle;
+      handles[i] = fence->syncobj[i]->handle;
 
    struct drm_syncobj_wait args = {
       .handles = (uintptr_t)handles,
@@ -318,7 +318,7 @@ iris_fence_get_fd(struct pipe_screen *p_screen,
 
    for (unsigned i = 0; i < fence->count; i++) {
       struct drm_syncobj_handle args = {
-         .handle = fence->syncpt[i]->handle,
+         .handle = fence->syncobj[i]->handle,
          .flags = DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE,
          .fd = -1,
       };
@@ -352,13 +352,13 @@ iris_fence_create_fd(struct pipe_context *ctx,
       return;
    }
 
-   struct iris_syncpt *syncpt = malloc(sizeof(*syncpt));
-   syncpt->handle = args.handle;
-   pipe_reference_init(&syncpt->ref, 1);
+   struct iris_syncobj *syncobj = malloc(sizeof(*syncobj));
+   syncobj->handle = args.handle;
+   pipe_reference_init(&syncobj->ref, 1);
 
    struct pipe_fence_handle *fence = malloc(sizeof(*fence));
    pipe_reference_init(&fence->ref, 1);
-   fence->syncpt[0] = syncpt;
+   fence->syncobj[0] = syncobj;
    fence->count = 1;
 
    *out = fence;
index 0ce5fa8ebfb7a0d45b35dd149d3b6afaf821d218..069662779666b2cd350dfb4c10ca05ad32140736 100644 (file)
@@ -30,32 +30,39 @@ struct pipe_screen;
 struct iris_screen;
 struct iris_batch;
 
-struct iris_syncpt {
+/**
+ * A refcounted DRM Sync Object (drm_syncobj).
+ */
+struct iris_syncobj {
    struct pipe_reference ref;
    uint32_t handle;
 };
 
-void iris_init_context_fence_functions(struct pipe_context *ctx);
-void iris_init_screen_fence_functions(struct pipe_screen *screen);
+struct iris_syncobj *iris_create_syncobj(struct iris_screen *screen);
+void iris_syncobj_destroy(struct iris_screen *, struct iris_syncobj *);
+
+void iris_batch_add_syncobj(struct iris_batch *batch,
+                            struct iris_syncobj *syncobj,
+                            unsigned flags);
+bool iris_wait_syncobj(struct pipe_screen *screen,
+                       struct iris_syncobj *syncobj,
+                       int64_t timeout_nsec);
 
-struct iris_syncpt *iris_create_syncpt(struct iris_screen *screen);
-void iris_syncpt_destroy(struct iris_screen *, struct iris_syncpt *);
-void iris_batch_add_syncpt(struct iris_batch *batch,
-                           struct iris_syncpt *syncpt,
-                           unsigned flags);
-bool iris_wait_syncpt(struct pipe_screen *screen,
-                      struct iris_syncpt *syncpt,
-                      int64_t timeout_nsec);
 static inline void
-iris_syncpt_reference(struct iris_screen *screen,
-                      struct iris_syncpt **dst,
-                      struct iris_syncpt *src)
+iris_syncobj_reference(struct iris_screen *screen,
+                       struct iris_syncobj **dst,
+                       struct iris_syncobj *src)
 {
    if (pipe_reference(*dst ? &(*dst)->ref : NULL,
-                      src ? &src->ref: NULL))
-      iris_syncpt_destroy(screen, *dst);
+                      src ? &src->ref : NULL))
+      iris_syncobj_destroy(screen, *dst);
 
    *dst = src;
 }
 
+/* ------------------------------------------------------------------- */
+
+void iris_init_context_fence_functions(struct pipe_context *ctx);
+void iris_init_screen_fence_functions(struct pipe_screen *screen);
+
 #endif
index e626692881d15797ff99c85d7fbc70b33831c0c4..26d15a833b8c8ff9d374679612f52a290d5003d9 100644 (file)
@@ -63,7 +63,7 @@ struct iris_query {
 
    struct iris_state_ref query_state_ref;
    struct iris_query_snapshots *map;
-   struct iris_syncpt *syncpt;
+   struct iris_syncobj *syncobj;
 
    int batch_idx;
 
@@ -481,7 +481,7 @@ iris_destroy_query(struct pipe_context *ctx, struct pipe_query *p_query)
       iris_destroy_monitor_object(ctx, query->monitor);
       query->monitor = NULL;
    } else {
-      iris_syncpt_reference(screen, &query->syncpt, NULL);
+      iris_syncobj_reference(screen, &query->syncobj, NULL);
       screen->base.fence_reference(ctx->screen, &query->fence, NULL);
    }
    free(query);
@@ -555,7 +555,7 @@ iris_end_query(struct pipe_context *ctx, struct pipe_query *query)
 
    if (q->type == PIPE_QUERY_TIMESTAMP) {
       iris_begin_query(ctx, query);
-      iris_batch_reference_signal_syncpt(batch, &q->syncpt);
+      iris_batch_reference_signal_syncobj(batch, &q->syncobj);
       mark_available(ice, q);
       return true;
    }
@@ -573,7 +573,7 @@ iris_end_query(struct pipe_context *ctx, struct pipe_query *query)
                   q->query_state_ref.offset +
                   offsetof(struct iris_query_snapshots, end));
 
-   iris_batch_reference_signal_syncpt(batch, &q->syncpt);
+   iris_batch_reference_signal_syncobj(batch, &q->syncobj);
    mark_available(ice, q);
 
    return true;
@@ -624,12 +624,12 @@ iris_get_query_result(struct pipe_context *ctx,
 
    if (!q->ready) {
       struct iris_batch *batch = &ice->batches[q->batch_idx];
-      if (q->syncpt == iris_batch_get_signal_syncpt(batch))
+      if (q->syncobj == iris_batch_get_signal_syncobj(batch))
          iris_batch_flush(batch);
 
       while (!READ_ONCE(q->map->snapshots_landed)) {
          if (wait)
-            iris_wait_syncpt(ctx->screen, q->syncpt, INT64_MAX);
+            iris_wait_syncobj(ctx->screen, q->syncobj, INT64_MAX);
          else
             return false;
       }
@@ -672,7 +672,7 @@ iris_get_query_result_resource(struct pipe_context *ctx,
        * now so that progress happens.  Either way, copy the snapshots
        * landed field to the destination resource.
        */
-      if (q->syncpt == iris_batch_get_signal_syncpt(batch))
+      if (q->syncobj == iris_batch_get_signal_syncobj(batch))
          iris_batch_flush(batch);
 
       batch->screen->vtbl.copy_mem_mem(batch, dst_bo, offset,