summaryrefslogtreecommitdiff
path: root/drivers/gpu/msm/adreno_drawctxt.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/msm/adreno_drawctxt.c')
-rw-r--r--drivers/gpu/msm/adreno_drawctxt.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/gpu/msm/adreno_drawctxt.c b/drivers/gpu/msm/adreno_drawctxt.c
index 446df0e98217..94d0e6d6b8dd 100644
--- a/drivers/gpu/msm/adreno_drawctxt.c
+++ b/drivers/gpu/msm/adreno_drawctxt.c
@@ -1,4 +1,5 @@
/* Copyright (c) 2002,2007-2017,2020, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2024 Qualcomm Innovation Center, Inc. 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
@@ -609,8 +610,6 @@ int adreno_drawctxt_switch(struct adreno_device *adreno_dev,
if (drawctxt != NULL && kgsl_context_detached(&drawctxt->base))
return -ENOENT;
- trace_adreno_drawctxt_switch(rb, drawctxt);
-
/* Get a refcount to the new instance */
if (drawctxt) {
if (!_kgsl_context_get(&drawctxt->base))
@@ -623,7 +622,7 @@ int adreno_drawctxt_switch(struct adreno_device *adreno_dev,
}
ret = adreno_ringbuffer_set_pt_ctx(rb, new_pt, drawctxt, flags);
if (ret)
- return ret;
+ goto err;
if (rb->drawctxt_active) {
/* Wait for the timestamp to expire */
@@ -634,6 +633,13 @@ int adreno_drawctxt_switch(struct adreno_device *adreno_dev,
}
}
+ trace_adreno_drawctxt_switch(rb, drawctxt);
+
rb->drawctxt_active = drawctxt;
+
return 0;
+err:
+ if (drawctxt)
+ kgsl_context_put(&drawctxt->base);
+ return ret;
}