Skip to content

Commit cf3bd1a

Browse files
committed
drm/i915/selftests: Reorder error cleanup for whitelist checking
Reorder the error paths so that we unwind all the locals from any error path and so avoid setting off divers alarum in case we find an error in case we find an error. References: https://bugs.freedesktop.org/show_bug.cgi?id=111048 Signed-off-by: Chris Wilson <[email protected]> Cc: Tvrtko Ursulin <[email protected]> Reviewed-by: Mika Kuoppala <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 77adbd8 commit cf3bd1a

File tree

1 file changed

+19
-16
lines changed

1 file changed

+19
-16
lines changed

drivers/gpu/drm/i915/gt/selftest_workarounds.c

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -287,64 +287,67 @@ static int check_whitelist_across_reset(struct intel_engine_cs *engine,
287287
const char *name)
288288
{
289289
struct drm_i915_private *i915 = engine->i915;
290-
struct i915_gem_context *ctx;
290+
struct i915_gem_context *ctx, *tmp;
291291
struct igt_spinner spin;
292292
intel_wakeref_t wakeref;
293293
int err;
294294

295295
pr_info("Checking %d whitelisted registers (RING_NONPRIV) [%s]\n",
296296
engine->whitelist.count, name);
297297

298-
err = igt_spinner_init(&spin, i915);
299-
if (err)
300-
return err;
301-
302298
ctx = kernel_context(i915);
303299
if (IS_ERR(ctx))
304300
return PTR_ERR(ctx);
305301

302+
err = igt_spinner_init(&spin, i915);
303+
if (err)
304+
goto out_ctx;
305+
306306
err = check_whitelist(ctx, engine);
307307
if (err) {
308308
pr_err("Invalid whitelist *before* %s reset!\n", name);
309-
goto out;
309+
goto out_spin;
310310
}
311311

312312
err = switch_to_scratch_context(engine, &spin);
313313
if (err)
314-
goto out;
314+
goto out_spin;
315315

316316
with_intel_runtime_pm(&i915->runtime_pm, wakeref)
317317
err = reset(engine);
318318

319319
igt_spinner_end(&spin);
320-
igt_spinner_fini(&spin);
321320

322321
if (err) {
323322
pr_err("%s reset failed\n", name);
324-
goto out;
323+
goto out_spin;
325324
}
326325

327326
err = check_whitelist(ctx, engine);
328327
if (err) {
329328
pr_err("Whitelist not preserved in context across %s reset!\n",
330329
name);
331-
goto out;
330+
goto out_spin;
332331
}
333332

333+
tmp = kernel_context(i915);
334+
if (IS_ERR(tmp)) {
335+
err = PTR_ERR(tmp);
336+
goto out_spin;
337+
}
334338
kernel_context_close(ctx);
335-
336-
ctx = kernel_context(i915);
337-
if (IS_ERR(ctx))
338-
return PTR_ERR(ctx);
339+
ctx = tmp;
339340

340341
err = check_whitelist(ctx, engine);
341342
if (err) {
342343
pr_err("Invalid whitelist *after* %s reset in fresh context!\n",
343344
name);
344-
goto out;
345+
goto out_spin;
345346
}
346347

347-
out:
348+
out_spin:
349+
igt_spinner_fini(&spin);
350+
out_ctx:
348351
kernel_context_close(ctx);
349352
return err;
350353
}

0 commit comments

Comments
 (0)