Commit f8d2c26d authored by Jonathan Cavitt's avatar Jonathan Cavitt Committed by Andi Shyti
Browse files

drm/i915/gt: Fix memory leak in hangcheck selftest



In active_engines, if intel_context_create fails, we need to go
backwards through all the created contexts to free/put them.  However,
the way this is currently performed skips the first created context, as
if count == 1, then --count returns 0 and exits the while-loop
prematurely without performing the intel_context_put on context 0.

Fix this by post-decrementing count in the while-loop, rather than
pre-decrementing it.  This change makes the prior guard against count
underflowing unnecessary, as the while-loop exits when count == 0.

Signed-off-by: default avatarJonathan Cavitt <jonathan.cavitt@intel.com>
Cc: Krzysztof Karas <krzysztof.karas@intel.com>
Cc: Andi Shyti <andi.shyti@linux.intel.com>
Cc: Sebastian Brzezinka <sebastian.brzezinka@intel.com>
Reviewed-by: default avatarKrzysztof Karas <krzysztof.karas@intel.com>
Reviewed-by: default avatarAndi Shyti <andi.shyti@linux.intel.com>
Signed-off-by: default avatarAndi Shyti <andi.shyti@linux.intel.com>
Link: https://lore.kernel.org/r/20250904193041.12888-2-jonathan.cavitt@intel.com
parent 82b13dd5
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -904,9 +904,7 @@ static void active_engine(struct kthread_work *work)
			arg->result = PTR_ERR(ce[count]);
			pr_err("[%s] Create context #%ld failed: %d!\n",
			       engine->name, count, arg->result);
			if (!count)
				return;
			while (--count)
			while (count--)
				intel_context_put(ce[count]);
			return;
		}