Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 354d036f authored by Tvrtko Ursulin's avatar Tvrtko Ursulin
Browse files

drm/i915/tracepoints: Add request submit and execute tracepoints



These new tracepoints are emitted once the request is ready to
be submitted to the GPU and once the request is about to
be submitted to the GPU, respectively.

Former condition triggers as soon as all the fences and
dependencies have been resolved, and the latter once the
backend is about to submit it to the GPU.

New tracepoint are enabled via the new
DRM_I915_LOW_LEVEL_TRACEPOINTS Kconfig option which is disabled
by default to alleviate the performance impact concerns.

v2: Move execute tracepoint to __i915_gem_request_submit.
    (Chris Wilson)

Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
parent 90aa412d
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -76,3 +76,14 @@ config DRM_I915_SELFTEST
	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_I915_LOW_LEVEL_TRACEPOINTS
        bool "Enable low level request tracing events"
        depends on DRM_I915
        default n
        help
          Choose this option to turn on low level request tracing events.
          This provides the ability to precisely monitor engine utilisation
          and also analyze the request dependency resolving timeline.

          If in doubt, say "N".
+2 −0
Original line number Diff line number Diff line
@@ -426,6 +426,7 @@ void __i915_gem_request_submit(struct drm_i915_gem_request *request)
	spin_unlock(&request->timeline->lock);

	i915_sw_fence_commit(&request->execute);
	trace_i915_gem_request_execute(request);
}

void i915_gem_request_submit(struct drm_i915_gem_request *request)
@@ -449,6 +450,7 @@ submit_notify(struct i915_sw_fence *fence, enum i915_sw_fence_notify state)

	switch (state) {
	case FENCE_COMPLETE:
		trace_i915_gem_request_submit(request);
		request->engine->submit_request(request);
		break;

+24 −0
Original line number Diff line number Diff line
@@ -477,6 +477,30 @@ DEFINE_EVENT(i915_gem_request, i915_gem_request_add,
	    TP_ARGS(req)
);

#if defined(CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS)
DEFINE_EVENT(i915_gem_request, i915_gem_request_submit,
	     TP_PROTO(struct drm_i915_gem_request *req),
	     TP_ARGS(req)
);

DEFINE_EVENT(i915_gem_request, i915_gem_request_execute,
	     TP_PROTO(struct drm_i915_gem_request *req),
	     TP_ARGS(req)
);
#else
#if !defined(TRACE_HEADER_MULTI_READ)
static inline void
trace_i915_gem_request_submit(struct drm_i915_gem_request *req)
{
}

static inline void
trace_i915_gem_request_execute(struct drm_i915_gem_request *req)
{
}
#endif
#endif

TRACE_EVENT(i915_gem_request_notify,
	    TP_PROTO(struct intel_engine_cs *engine),
	    TP_ARGS(engine),