@@ -287,64 +287,67 @@ static int check_whitelist_across_reset(struct intel_engine_cs *engine,
287
287
const char * name )
288
288
{
289
289
struct drm_i915_private * i915 = engine -> i915 ;
290
- struct i915_gem_context * ctx ;
290
+ struct i915_gem_context * ctx , * tmp ;
291
291
struct igt_spinner spin ;
292
292
intel_wakeref_t wakeref ;
293
293
int err ;
294
294
295
295
pr_info ("Checking %d whitelisted registers (RING_NONPRIV) [%s]\n" ,
296
296
engine -> whitelist .count , name );
297
297
298
- err = igt_spinner_init (& spin , i915 );
299
- if (err )
300
- return err ;
301
-
302
298
ctx = kernel_context (i915 );
303
299
if (IS_ERR (ctx ))
304
300
return PTR_ERR (ctx );
305
301
302
+ err = igt_spinner_init (& spin , i915 );
303
+ if (err )
304
+ goto out_ctx ;
305
+
306
306
err = check_whitelist (ctx , engine );
307
307
if (err ) {
308
308
pr_err ("Invalid whitelist *before* %s reset!\n" , name );
309
- goto out ;
309
+ goto out_spin ;
310
310
}
311
311
312
312
err = switch_to_scratch_context (engine , & spin );
313
313
if (err )
314
- goto out ;
314
+ goto out_spin ;
315
315
316
316
with_intel_runtime_pm (& i915 -> runtime_pm , wakeref )
317
317
err = reset (engine );
318
318
319
319
igt_spinner_end (& spin );
320
- igt_spinner_fini (& spin );
321
320
322
321
if (err ) {
323
322
pr_err ("%s reset failed\n" , name );
324
- goto out ;
323
+ goto out_spin ;
325
324
}
326
325
327
326
err = check_whitelist (ctx , engine );
328
327
if (err ) {
329
328
pr_err ("Whitelist not preserved in context across %s reset!\n" ,
330
329
name );
331
- goto out ;
330
+ goto out_spin ;
332
331
}
333
332
333
+ tmp = kernel_context (i915 );
334
+ if (IS_ERR (tmp )) {
335
+ err = PTR_ERR (tmp );
336
+ goto out_spin ;
337
+ }
334
338
kernel_context_close (ctx );
335
-
336
- ctx = kernel_context (i915 );
337
- if (IS_ERR (ctx ))
338
- return PTR_ERR (ctx );
339
+ ctx = tmp ;
339
340
340
341
err = check_whitelist (ctx , engine );
341
342
if (err ) {
342
343
pr_err ("Invalid whitelist *after* %s reset in fresh context!\n" ,
343
344
name );
344
- goto out ;
345
+ goto out_spin ;
345
346
}
346
347
347
- out :
348
+ out_spin :
349
+ igt_spinner_fini (& spin );
350
+ out_ctx :
348
351
kernel_context_close (ctx );
349
352
return err ;
350
353
}
0 commit comments