garbage() explicitly pins the context to corrupt its register state, but
only releases that pin when request creation fails. On success, its caller
waits for the request and drops the context reference without unpinning.
The request's own context pin does not account for this extra pin.

Release the explicit pin immediately after creating the request, on both
success and failure. A successful request already holds the context pin
it needs until retirement, as in the other context selftests.

Fixes: 24eba7a9981d ("drm/i915/selftests: Check recovery from corrupted LRC")
Cc: [email protected]
Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex
Signed-off-by: Wentao Liang <[email protected]>
---
 drivers/gpu/drm/i915/gt/selftest_lrc.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/selftest_lrc.c 
b/drivers/gpu/drm/i915/gt/selftest_lrc.c
index 23f04f6f8fba..314922e778a8 100644
--- a/drivers/gpu/drm/i915/gt/selftest_lrc.c
+++ b/drivers/gpu/drm/i915/gt/selftest_lrc.c
@@ -1782,18 +1782,13 @@ static struct i915_request *garbage(struct 
intel_context *ce,
                            LRC_STATE_OFFSET);
 
        rq = intel_context_create_request(ce);
-       if (IS_ERR(rq)) {
-               err = PTR_ERR(rq);
-               goto err_unpin;
-       }
+       intel_context_unpin(ce);
+       if (IS_ERR(rq))
+               return rq;
 
        i915_request_get(rq);
        i915_request_add(rq);
        return rq;
-
-err_unpin:
-       intel_context_unpin(ce);
-       return ERR_PTR(err);
 }
 
 static int __lrc_garbage(struct intel_engine_cs *engine, struct rnd_state 
*prng)
-- 
2.34.1

Reply via email to