msm: kgsl: Do not save context if it is being destroyed
No need to save a context if it is being destroyed since
it will no longer be used at all. This is better for
performance and also avoids the use of legacy kgsl
context save code for contexts that use preambles
Change-Id: I19a64e82188b4132f353bb61c21e4ed2281092fc
Signed-off-by: Shubhraprakash Das <sadas@codeaurora.org>
Signed-off-by: Rajeev Kulkarni <krajeev@codeaurora.org>
diff --git a/drivers/gpu/msm/adreno_a2xx.c b/drivers/gpu/msm/adreno_a2xx.c
index 5ba3778..23d61ff 100644
--- a/drivers/gpu/msm/adreno_a2xx.c
+++ b/drivers/gpu/msm/adreno_a2xx.c
@@ -1507,7 +1507,7 @@
{
struct kgsl_device *device = &adreno_dev->dev;
- if (context == NULL)
+ if (context == NULL || (context->flags & CTXT_FLAGS_BEING_DESTOYED))
return;
if (context->flags & CTXT_FLAGS_GPU_HANG)
diff --git a/drivers/gpu/msm/adreno_a3xx.c b/drivers/gpu/msm/adreno_a3xx.c
index 548ef3c..c9f7daf 100644
--- a/drivers/gpu/msm/adreno_a3xx.c
+++ b/drivers/gpu/msm/adreno_a3xx.c
@@ -2347,7 +2347,7 @@
{
struct kgsl_device *device = &adreno_dev->dev;
- if (context == NULL)
+ if (context == NULL || (context->flags & CTXT_FLAGS_BEING_DESTOYED))
return;
if (context->flags & CTXT_FLAGS_GPU_HANG)
diff --git a/drivers/gpu/msm/adreno_drawctxt.c b/drivers/gpu/msm/adreno_drawctxt.c
index 74493f4..a50747d 100644
--- a/drivers/gpu/msm/adreno_drawctxt.c
+++ b/drivers/gpu/msm/adreno_drawctxt.c
@@ -221,6 +221,8 @@
CTXT_FLAGS_GMEM_SHADOW |
CTXT_FLAGS_STATE_SHADOW);
+ drawctxt->flags |= CTXT_FLAGS_BEING_DESTOYED;
+
adreno_drawctxt_switch(adreno_dev, NULL, 0);
}
diff --git a/drivers/gpu/msm/adreno_drawctxt.h b/drivers/gpu/msm/adreno_drawctxt.h
index 5b14a69..d58f2da 100644
--- a/drivers/gpu/msm/adreno_drawctxt.h
+++ b/drivers/gpu/msm/adreno_drawctxt.h
@@ -46,6 +46,8 @@
#define CTXT_FLAGS_PER_CONTEXT_TS 0x00040000
/* Context has caused a GPU hang and recovered properly */
#define CTXT_FLAGS_GPU_HANG_RECOVERED 0x00008000
+/* Context is being destroyed so dont save it */
+#define CTXT_FLAGS_BEING_DESTOYED 0x00010000
struct kgsl_device;
struct adreno_device;