[Intel-gfx] [PATCH] drm/i915/perf: Fix OA context id overlap with idle context id
Umesh Nerlige Ramappa
umesh.nerlige.ramappa at intel.com
Fri Jan 31 21:24:01 UTC 2020
On Fri, Jan 31, 2020 at 01:00:54PM +0200, Lionel Landwerlin wrote:
>On 31/01/2020 01:54, Umesh Nerlige Ramappa wrote:
>>On Mon, Jan 27, 2020 at 11:16:32AM +0200, Lionel Landwerlin wrote:
>>
>>[snip]
>>
>>>>>>--- a/drivers/gpu/drm/i915/i915_perf.c
>>>>>>+++ b/drivers/gpu/drm/i915/i915_perf.c
>>>>>>@@ -1323,7 +1323,12 @@ 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);
>>>>>
>>>>>
>>>>>Arg yeah, we can't use an id that has all bits to 1 because
>>>>>that matches the idle value in the OA reports :/
>>>>>
>>>>>This also affects gen8-10 cases (afaik).
>>>>
>>>>For gen8-10, I did not see a specific definition for an idle
>>>>context id. The from/to idle context switches are indicated by
>>>>dedicated bits in the CSB instead (from spec).
>>>
>>>
>>>I meant that I remember the periodic OA reports when HW is idle to
>>>have the contex_id=0xffffffff.
>>
>>For these gens we use 0x1fffff as the context id. Before we return
>>reports to the user, we are setting context id to 0xffffffff for
>>invalid and irrelevant contexts.
>>
>>Thanks,
>>Umesh
>
>
>Sorry, I've been a bit out of the loop on OA reports lately.
>
>I just noticed that the context valid bit is not checked on gen12 anymore.
>
>The documentation is really horrible, but BSpec 52198 seems to
>indicate the bit is still around.
I am looking at the first table describing the report ID in 52198 which
has TGL next to it. I don't see a definition for this bit.
I will try to ask around to see if that's not the case.
>
>
>Could it be the source of the issue?
You mean - seeing 0xffffffff during idle in periodic reports?
Thanks,
Umesh
>
>
>Thanks for your help :)
>
>
>-Lionel
>
>
>>>
>>>I could remember wrong :/
>>>
>>>
>>>-Lionel
>>>
>>>
>>>>
>>>>Thanks,
>>>>Umesh
>>>>
>>>>>
>>>>>
>>>>>Thanks for spotting this!
>>>>>
>>>>>
>>>>>-Lionel
>>>>>
>>>>>
>>>>>> break;
>>>>>> }
>>>>>>@@ -1331,7 +1336,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,
>>>>>
>>>>>
>>>
>
More information about the Intel-gfx
mailing list