diff options
-rw-r--r-- | drivers/gpu/msm/adreno_dispatch.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/drivers/gpu/msm/adreno_dispatch.c b/drivers/gpu/msm/adreno_dispatch.c index 49b14fbf439c..da9d4e17b7c7 100644 --- a/drivers/gpu/msm/adreno_dispatch.c +++ b/drivers/gpu/msm/adreno_dispatch.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2019, The Linux Foundation. All rights reserved. +/* Copyright (c) 2013-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -1210,7 +1210,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; } @@ -1225,15 +1234,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, |