mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 05:39:54 -04:00
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: Harshitha Sai Neelati <hsaine@codeaurora.org>
This commit is contained in:
parent
49eff519b8
commit
d8d0a5138d
2 changed files with 22 additions and 20 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in a new issue