intel/perf: move client reference counts into perf
authorMark Janes <mark.a.janes@intel.com>
Wed, 26 Jun 2019 19:12:20 +0000 (12:12 -0700)
committerMark Janes <mark.a.janes@intel.com>
Thu, 8 Aug 2019 04:33:55 +0000 (21:33 -0700)
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/intel/perf/gen_perf.c
src/intel/perf/gen_perf.h
src/mesa/drivers/dri/i965/brw_performance_query.c

index 33c86abec18f4e956d98d7aa178d393cbe74fa84..4adcd464f1927f648e69f1aad1b7b82e13ff09a7 100644 (file)
@@ -959,3 +959,32 @@ gen_perf_open(struct gen_perf_context *perf_ctx,
 
    return true;
 }
+
+bool
+gen_perf_inc_n_users(struct gen_perf_context *perf_ctx)
+{
+   if (perf_ctx->n_oa_users == 0 &&
+       gen_ioctl(perf_ctx->oa_stream_fd, I915_PERF_IOCTL_ENABLE, 0) < 0)
+   {
+      return false;
+   }
+   ++perf_ctx->n_oa_users;
+
+   return true;
+}
+
+void
+gen_perf_dec_n_users(struct gen_perf_context *perf_ctx)
+{
+   /* Disabling the i915 perf stream will effectively disable the OA
+    * counters.  Note it's important to be sure there are no outstanding
+    * MI_RPC commands at this point since they could stall the CS
+    * indefinitely once OACONTROL is disabled.
+    */
+   --perf_ctx->n_oa_users;
+   if (perf_ctx->n_oa_users == 0 &&
+       gen_ioctl(perf_ctx->oa_stream_fd, I915_PERF_IOCTL_DISABLE, 0) < 0)
+   {
+      DBG("WARNING: Error disabling gen perf stream: %m\n");
+   }
+}
index 6aef2356015d6d9a85498d12e0ce183cf95871a5..fe6551da76cf22519f08e40bd1ff86daa0949a49 100644 (file)
@@ -597,4 +597,7 @@ bool gen_perf_open(struct gen_perf_context *perfquery,
                    int drm_fd,
                    uint32_t ctx_id);
 
+bool gen_perf_inc_n_users(struct gen_perf_context *perfquery);
+void gen_perf_dec_n_users(struct gen_perf_context *perfquery);
+
 #endif /* GEN_PERF_H */
index b6ef66322a459d235a7c78af0c5d1174b35f63f8..e6b8e0d5898364703933df64b0e3953c3f9dfda1 100644 (file)
@@ -311,38 +311,6 @@ drop_from_unaccumulated_query_list(struct brw_context *brw,
    gen_perf_reap_old_sample_buffers(&brw->perf_ctx);
 }
 
-static bool
-inc_n_oa_users(struct brw_context *brw)
-{
-   struct gen_perf_context *perf_ctx = &brw->perf_ctx;
-   if (perf_ctx->n_oa_users == 0 &&
-       drmIoctl(perf_ctx->oa_stream_fd,
-                I915_PERF_IOCTL_ENABLE, 0) < 0)
-   {
-      return false;
-   }
-   ++perf_ctx->n_oa_users;
-
-   return true;
-}
-
-static void
-dec_n_oa_users(struct brw_context *brw)
-{
-   /* Disabling the i915 perf stream will effectively disable the OA
-    * counters.  Note it's important to be sure there are no outstanding
-    * MI_RPC commands at this point since they could stall the CS
-    * indefinitely once OACONTROL is disabled.
-    */
-   struct gen_perf_context *perf_ctx = &brw->perf_ctx;
-   --perf_ctx->n_oa_users;
-   if (perf_ctx->n_oa_users == 0 &&
-       drmIoctl(perf_ctx->oa_stream_fd, I915_PERF_IOCTL_DISABLE, 0) < 0)
-   {
-      DBG("WARNING: Error disabling i915 perf stream: %m\n");
-   }
-}
-
 /* In general if we see anything spurious while accumulating results,
  * we don't try and continue accumulating the current query, hoping
  * for the best, we scrap anything outstanding, and then hope for the
@@ -358,7 +326,7 @@ discard_all_queries(struct brw_context *brw)
       obj->oa.results_accumulated = true;
       drop_from_unaccumulated_query_list(brw, perf_ctx->unaccumulated[0]);
 
-      dec_n_oa_users(brw);
+      gen_perf_dec_n_users(perf_ctx);
    }
 }
 
@@ -503,6 +471,7 @@ accumulate_oa_reports(struct brw_context *brw,
 {
    const struct gen_device_info *devinfo = &brw->screen->devinfo;
    struct gen_perf_query_object *obj = brw_query->query;
+   struct gen_perf_context *perf_ctx = &brw->perf_ctx;
    uint32_t *start;
    uint32_t *last;
    uint32_t *end;
@@ -642,7 +611,7 @@ end:
 
    obj->oa.results_accumulated = true;
    drop_from_unaccumulated_query_list(brw, obj);
-   dec_n_oa_users(brw);
+   gen_perf_dec_n_users(perf_ctx);
 
    return;
 
@@ -829,7 +798,7 @@ brw_begin_perf_query(struct gl_context *ctx,
                 perf_ctx->current_oa_format == query->oa_format);
       }
 
-      if (!inc_n_oa_users(brw)) {
+      if (!gen_perf_inc_n_users(perf_ctx)) {
          DBG("WARNING: Error enabling i915 perf stream: %m\n");
          return false;
       }
@@ -1294,7 +1263,7 @@ brw_delete_perf_query(struct gl_context *ctx,
       if (obj->oa.bo) {
          if (!obj->oa.results_accumulated) {
             drop_from_unaccumulated_query_list(brw, obj);
-            dec_n_oa_users(brw);
+            gen_perf_dec_n_users(perf_ctx);
          }
 
          perf_cfg->vtbl.bo_unreference(obj->oa.bo);