Commit 8c35a195 authored by Dan Carpenter's avatar Dan Carpenter Committed by Chris Wilson
Browse files

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: 1dd47b54 ("drm/i915: Add live selftests for indirect ctx batchbuffers")
Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarAndi Shyti <andi.shyti@intel.com>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20200429132425.GE815283@mwanda
parent 24aac336
Loading
Loading
Loading
Loading
+18 −12
Original line number Diff line number Diff line
@@ -5795,26 +5795,29 @@ static int indirect_ctx_bb_check(struct intel_context *ce)
static int __live_lrc_indirect_ctx_bb(struct intel_engine_cs *engine)
{
	struct intel_context *a, *b;
	int err = 0;
	int err;

	a = intel_context_create(engine);
	b = intel_context_create(engine);

	if (IS_ERR(a))
		return PTR_ERR(a);
	err = intel_context_pin(a);
	if (err)
		return err;
		goto put_a;

	err = intel_context_pin(b);
	if (err) {
		intel_context_put(a);
		return err;
	b = intel_context_create(engine);
	if (IS_ERR(b)) {
		err = PTR_ERR(b);
		goto unpin_a;
	}
	err = intel_context_pin(b);
	if (err)
		goto put_b;

	/* We use the already reserved extra page in context state */
	if (!a->wa_bb_page) {
		GEM_BUG_ON(b->wa_bb_page);
		GEM_BUG_ON(INTEL_GEN(engine->i915) == 12);
		goto out;
		goto unpin_b;
	}

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

	err = indirect_ctx_bb_check(a);
	if (err)
		goto out;
		goto unpin_b;

	err = indirect_ctx_bb_check(b);
out:

unpin_b:
	intel_context_unpin(b);
put_b:
	intel_context_put(b);

unpin_a:
	intel_context_unpin(a);
put_a:
	intel_context_put(a);

	return err;