Skip to content

Commit 8c35a19

Browse files
Dan Carpenterickle
authored andcommitted
drm/i915/selftests: fix error handling in __live_lrc_indirect_ctx_bb()
If intel_context_create() fails then it leads to an error pointer dereference. I shuffled things around to make error handling easier. Fixes: 1dd47b5 ("drm/i915: Add live selftests for indirect ctx batchbuffers") Signed-off-by: Dan Carpenter <[email protected]> Reviewed-by: Chris Wilson <[email protected]> Reviewed-by: Andi Shyti <[email protected]> Signed-off-by: Chris Wilson <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/20200429132425.GE815283@mwanda
1 parent 24aac33 commit 8c35a19

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

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

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5795,26 +5795,29 @@ static int indirect_ctx_bb_check(struct intel_context *ce)
57955795
static int __live_lrc_indirect_ctx_bb(struct intel_engine_cs *engine)
57965796
{
57975797
struct intel_context *a, *b;
5798-
int err = 0;
5798+
int err;
57995799

58005800
a = intel_context_create(engine);
5801-
b = intel_context_create(engine);
5802-
5801+
if (IS_ERR(a))
5802+
return PTR_ERR(a);
58035803
err = intel_context_pin(a);
58045804
if (err)
5805-
return err;
5805+
goto put_a;
58065806

5807-
err = intel_context_pin(b);
5808-
if (err) {
5809-
intel_context_put(a);
5810-
return err;
5807+
b = intel_context_create(engine);
5808+
if (IS_ERR(b)) {
5809+
err = PTR_ERR(b);
5810+
goto unpin_a;
58115811
}
5812+
err = intel_context_pin(b);
5813+
if (err)
5814+
goto put_b;
58125815

58135816
/* We use the already reserved extra page in context state */
58145817
if (!a->wa_bb_page) {
58155818
GEM_BUG_ON(b->wa_bb_page);
58165819
GEM_BUG_ON(INTEL_GEN(engine->i915) == 12);
5817-
goto out;
5820+
goto unpin_b;
58185821
}
58195822

58205823
/*
@@ -5829,14 +5832,17 @@ static int __live_lrc_indirect_ctx_bb(struct intel_engine_cs *engine)
58295832

58305833
err = indirect_ctx_bb_check(a);
58315834
if (err)
5832-
goto out;
5835+
goto unpin_b;
58335836

58345837
err = indirect_ctx_bb_check(b);
5835-
out:
5838+
5839+
unpin_b:
58365840
intel_context_unpin(b);
5841+
put_b:
58375842
intel_context_put(b);
5838-
5843+
unpin_a:
58395844
intel_context_unpin(a);
5845+
put_a:
58405846
intel_context_put(a);
58415847

58425848
return err;

0 commit comments

Comments
 (0)