Re: [PATCH v4 9/9] drm/i915/perf: Add support for OA media units

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Mar 09, 2023 at 03:57:48PM -0800, Dixit, Ashutosh wrote:
On Tue, 07 Mar 2023 12:16:11 -0800, Umesh Nerlige Ramappa wrote:


Hi Umesh,

-static int gen8_configure_context(struct i915_gem_context *ctx,
+static int gen8_configure_context(struct i915_perf_stream *stream,
+				  struct i915_gem_context *ctx,
				  struct flex *flex, unsigned int count)
 {
	struct i915_gem_engines_iter it;
@@ -2573,7 +2594,8 @@ static int gen8_configure_context(struct i915_gem_context *ctx,
	for_each_gem_engine(ce, i915_gem_context_lock_engines(ctx), it) {
		GEM_BUG_ON(ce == ce->engine->kernel_context);

-		if (!engine_supports_oa(ce->engine))
+		if (!engine_supports_oa(ce->engine) ||
+		    ce->engine->class != stream->engine->class)
			continue;

		/* Otherwise OA settings will be set upon first use */
@@ -2704,7 +2726,7 @@ oa_configure_all_contexts(struct i915_perf_stream *stream,

		spin_unlock(&i915->gem.contexts.lock);

-		err = gen8_configure_context(ctx, regs, num_regs);
+		err = gen8_configure_context(stream, ctx, regs, num_regs);
		if (err) {
			i915_gem_context_put(ctx);
			return err;
@@ -2724,7 +2746,8 @@ oa_configure_all_contexts(struct i915_perf_stream *stream,
	for_each_uabi_engine(engine, i915) {
		struct intel_context *ce = engine->kernel_context;

-		if (!engine_supports_oa(ce->engine))
+		if (!engine_supports_oa(ce->engine) ||
+		    ce->engine->class != stream->engine->class)
			continue;

		regs[0].value = intel_sseu_make_rpcs(engine->gt, &ce->sseu);
@@ -2749,6 +2772,9 @@ gen12_configure_all_contexts(struct i915_perf_stream *stream,
		},
	};

+	if (stream->engine->class != RENDER_CLASS)
+		return 0;
+
	return oa_configure_all_contexts(stream,
					 regs, ARRAY_SIZE(regs),
					 active);

Can you please explain the above changes? Why are we checking for
engine->class above? Should we be checking for both class and instance? Or
all engines connected to an OA unit (multiple classes can be connected to
an OA unit and be different from stream->engine->class, e.g. VDBOX and
VEBOX)? oa_configure_all_contexts is also called from
lrc_configure_all_contexts.

Only render (and compute when we support it) have OA specific configuration in the context image. Media engines do not have any context specific configurations.

Thanks,
Umesh


Thanks.
--
Ashutosh



[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux