Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d8d0a513 authored by Harshitha Sai Neelati's avatar Harshitha Sai Neelati
Browse files

msm: kgsl: Don't wait for room in context queue when context is invalidated



In a condition where there is no room in the drawcontext queue and the
context is invalidated while sleeping in wait_event_interruptible_timeout,
we are now polling for room after wake up. This would lead to infinite
looping.

Hence, do not wait for room in context queue if context is invalidated.

Change-Id: I12c80e71630da2f3316838bee37f13cfa3b8e7d9
Signed-off-by: default avatarHarshitha Sai Neelati <hsaine@codeaurora.org>
parent 49eff519
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -1181,7 +1181,16 @@ static inline int _wait_for_room_in_context_queue(
		spin_lock(&drawctxt->lock);
		trace_adreno_drawctxt_wake(drawctxt);

		if (ret <= 0)
		/*
		 * Account for the possibility that the context got invalidated
		 * while we were sleeping
		 */

		if (ret > 0) {
			ret = _check_context_state(&drawctxt->base);
			if (ret)
				return ret;
		} else
			return (ret == 0) ? -ETIMEDOUT : (int) ret;
	}

@@ -1196,15 +1205,7 @@ static unsigned int _check_context_state_to_queue_cmds(
	if (ret)
		return ret;

	ret = _wait_for_room_in_context_queue(drawctxt);
	if (ret)
		return ret;

	/*
	 * Account for the possiblity that the context got invalidated
	 * while we were sleeping
	 */
	return _check_context_state(&drawctxt->base);
	return _wait_for_room_in_context_queue(drawctxt);
}

static void _queue_drawobj(struct adreno_context *drawctxt,
+11 −10
Original line number Diff line number Diff line
@@ -704,7 +704,16 @@ static inline int _wait_for_room_in_context_queue(
		spin_lock(&drawctxt->lock);
		trace_adreno_drawctxt_wake(drawctxt);

		if (ret <= 0)
		/*
		 * Account for the possibility that the context got invalidated
		 * while we were sleeping
		 */

		if (ret > 0) {
			ret = _check_context_state(&drawctxt->base);
			if (ret)
				return ret;
		} else
			return (ret == 0) ? -ETIMEDOUT : (int) ret;
	}

@@ -719,15 +728,7 @@ static unsigned int _check_context_state_to_queue_cmds(
	if (ret)
		return ret;

	ret = _wait_for_room_in_context_queue(drawctxt);
	if (ret)
		return ret;

	/*
	 * Account for the possiblity that the context got invalidated
	 * while we were sleeping
	 */
	return _check_context_state(&drawctxt->base);
	return _wait_for_room_in_context_queue(drawctxt);
}

static void _queue_drawobj(struct adreno_context *drawctxt,