[PATCH] drm/xe/guc: Skip CLEANUP message when GuC is stopped
Varun Gupta <[email protected]>
| Newsgroups | org.freedesktop.lists.intel-xe,org.kernel.vger.stable |
|---|---|
| Message-ID | <[email protected]> |
Attempting to enqueue a CLEANUP message while the GuC is stopped
(during a device reset or suspend) triggers a missing outer runtime
PM protection warning in xe_pm_runtime_get_noresume().
Since the GuC cannot service Command Transport (CT) requests while
stopped, skip the message and route directly to local teardown.
Fixes: d930c19fdff3 ("drm/xe: Build PM into GuC CT layer")
Cc: [email protected]
Signed-off-by: Varun Gupta <[email protected]>
---
drivers/gpu/drm/xe/xe_guc_submit.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
index 9036f89dff7d..24f35b0179e1 100644
--- a/drivers/gpu/drm/xe/xe_guc_submit.c
+++ b/drivers/gpu/drm/xe/xe_guc_submit.c
@@ -2180,12 +2180,14 @@ static bool guc_exec_queue_try_add_msg(struct xe_exec_queue *q,
#define STATIC_MSG_CGP_SYNC 3
static void guc_exec_queue_destroy(struct xe_exec_queue *q)
{
+ struct xe_guc *guc = exec_queue_to_guc(q);
struct xe_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_CLEANUP;
- if (!(q->flags & EXEC_QUEUE_FLAG_PERMANENT) && !exec_queue_wedged(q))
+ if (!(q->flags & EXEC_QUEUE_FLAG_PERMANENT) && !exec_queue_wedged(q) &&
+ !xe_guc_read_stopped(guc))
guc_exec_queue_add_msg(q, msg, CLEANUP);
else
- __guc_exec_queue_destroy(exec_queue_to_guc(q), q);
+ __guc_exec_queue_destroy(guc, q);
}
static int guc_exec_queue_set_priority(struct xe_exec_queue *q,
--
2.43.0