drm/xe/oa: Don't reset OAC_CONTEXT_ENABLE on OA stream close
authorJosé Roberto de Souza <jose.souza@intel.com>
Tue, 24 Sep 2024 21:37:13 +0000 (14:37 -0700)
committerLucas De Marchi <lucas.demarchi@intel.com>
Thu, 3 Oct 2024 06:23:18 +0000 (01:23 -0500)
Mesa testing on Xe2+ revealed that when OA metrics are collected for an
exec_queue, after the OA stream is closed, future batch buffers submitted
on that exec_queue do not complete. Not resetting OAC_CONTEXT_ENABLE on OA
stream close resolves these hangs and should not have any adverse effects.

v2: Make the change that we don't reset the bit clearer (Ashutosh)
    Also make the same fix for OAC as OAR (Ashutosh)

Bspec: 60314
Fixes: 2f4a730fcd2d ("drm/xe/oa: Add OAR support")
Fixes: 14e077f8006d ("drm/xe/oa: Add OAC support")
Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/2821
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Cc: stable@vger.kernel.org
Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240924213713.3497992-1-ashutosh.dixit@intel.com
(cherry picked from commit 0c8650b09a365f4a31fca1d1d1e9d99c56071128)
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
drivers/gpu/drm/xe/xe_oa.c

index eae38a49ee8e592d48b8f00fb9c3eeb1b6ccdcf2..2804f14f8f2979d9b6ec0309a2a6a5ad86d2c9f0 100644 (file)
@@ -709,8 +709,7 @@ static int xe_oa_configure_oar_context(struct xe_oa_stream *stream, bool enable)
                {
                        RING_CONTEXT_CONTROL(stream->hwe->mmio_base),
                        regs_offset + CTX_CONTEXT_CONTROL,
-                       _MASKED_FIELD(CTX_CTRL_OAC_CONTEXT_ENABLE,
-                                     enable ? CTX_CTRL_OAC_CONTEXT_ENABLE : 0)
+                       _MASKED_BIT_ENABLE(CTX_CTRL_OAC_CONTEXT_ENABLE),
                },
        };
        struct xe_oa_reg reg_lri = { OAR_OACONTROL, oacontrol };
@@ -742,10 +741,8 @@ static int xe_oa_configure_oac_context(struct xe_oa_stream *stream, bool enable)
                {
                        RING_CONTEXT_CONTROL(stream->hwe->mmio_base),
                        regs_offset + CTX_CONTEXT_CONTROL,
-                       _MASKED_FIELD(CTX_CTRL_OAC_CONTEXT_ENABLE,
-                                     enable ? CTX_CTRL_OAC_CONTEXT_ENABLE : 0) |
-                       _MASKED_FIELD(CTX_CTRL_RUN_ALONE,
-                                     enable ? CTX_CTRL_RUN_ALONE : 0),
+                       _MASKED_BIT_ENABLE(CTX_CTRL_OAC_CONTEXT_ENABLE) |
+                       _MASKED_FIELD(CTX_CTRL_RUN_ALONE, enable ? CTX_CTRL_RUN_ALONE : 0),
                },
        };
        struct xe_oa_reg reg_lri = { OAC_OACONTROL, oacontrol };