mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-21 21:11:47 +07:00
drm/i915/perf: Fix OA context id overlap with idle context id
Engine context pinned in perf OA was set to same context id as the idle context. Set the context id to an unused value. Clear the sw context id field in lrc descriptor before ORing with ce->tag (Chris) Closes: https://gitlab.freedesktop.org/drm/intel/issues/756 Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20200124013701.40609-1-umesh.nerlige.ramappa@intel.com
This commit is contained in:
parent
e5429340bf
commit
6f280b133d
@ -1211,12 +1211,12 @@ __execlists_schedule_in(struct i915_request *rq)
|
||||
if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
|
||||
execlists_check_context(ce, engine);
|
||||
|
||||
ce->lrc_desc &= ~GENMASK_ULL(47, 37);
|
||||
if (ce->tag) {
|
||||
/* Use a fixed tag for OA and friends */
|
||||
ce->lrc_desc |= (u64)ce->tag << 32;
|
||||
} else {
|
||||
/* We don't need a strict matching tag, just different values */
|
||||
ce->lrc_desc &= ~GENMASK_ULL(47, 37);
|
||||
ce->lrc_desc |=
|
||||
(u64)(++engine->context_tag % NUM_CONTEXT_TAG) <<
|
||||
GEN11_SW_CTX_ID_SHIFT;
|
||||
|
@ -1323,7 +1323,13 @@ static int oa_get_render_ctx_id(struct i915_perf_stream *stream)
|
||||
case 12: {
|
||||
stream->specific_ctx_id_mask =
|
||||
((1U << GEN11_SW_CTX_ID_WIDTH) - 1) << (GEN11_SW_CTX_ID_SHIFT - 32);
|
||||
stream->specific_ctx_id = stream->specific_ctx_id_mask;
|
||||
/*
|
||||
* Pick an unused context id
|
||||
* 0 - (NUM_CONTEXT_TAG - 1) are used by other contexts
|
||||
* GEN12_MAX_CONTEXT_HW_ID (0x7ff) is used by idle context
|
||||
*/
|
||||
stream->specific_ctx_id = (GEN12_MAX_CONTEXT_HW_ID - 1) << (GEN11_SW_CTX_ID_SHIFT - 32);
|
||||
BUILD_BUG_ON((GEN12_MAX_CONTEXT_HW_ID - 1) < NUM_CONTEXT_TAG);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1331,7 +1337,7 @@ static int oa_get_render_ctx_id(struct i915_perf_stream *stream)
|
||||
MISSING_CASE(INTEL_GEN(ce->engine->i915));
|
||||
}
|
||||
|
||||
ce->tag = stream->specific_ctx_id_mask;
|
||||
ce->tag = stream->specific_ctx_id;
|
||||
|
||||
DRM_DEBUG_DRIVER("filtering on ctx_id=0x%x ctx_id_mask=0x%x\n",
|
||||
stream->specific_ctx_id,
|
||||
|
Loading…
Reference in New Issue
Block a user