summaryrefslogtreecommitdiff
path: root/kgsl_sharedmem.c
diff options
context:
space:
mode:
Diffstat (limited to 'kgsl_sharedmem.c')
-rw-r--r--kgsl_sharedmem.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/kgsl_sharedmem.c b/kgsl_sharedmem.c
index 5ee7e07..979a129 100644
--- a/kgsl_sharedmem.c
+++ b/kgsl_sharedmem.c
@@ -986,6 +986,9 @@ static void kgsl_contiguous_free(struct kgsl_memdesc *memdesc)
if (!memdesc->hostptr)
return;
+ if (memdesc->priv & KGSL_MEMDESC_MAPPED)
+ return;
+
atomic_long_sub(memdesc->size, &kgsl_driver.stats.coherent);
_kgsl_contiguous_free(memdesc);
@@ -1198,6 +1201,9 @@ static void kgsl_free_pages(struct kgsl_memdesc *memdesc)
kgsl_paged_unmap_kernel(memdesc);
WARN_ON(memdesc->hostptr);
+ if (memdesc->priv & KGSL_MEMDESC_MAPPED)
+ return;
+
atomic_long_sub(memdesc->size, &kgsl_driver.stats.page_alloc);
_kgsl_free_pages(memdesc, memdesc->page_count);
@@ -1216,6 +1222,9 @@ static void kgsl_free_system_pages(struct kgsl_memdesc *memdesc)
kgsl_paged_unmap_kernel(memdesc);
WARN_ON(memdesc->hostptr);
+ if (memdesc->priv & KGSL_MEMDESC_MAPPED)
+ return;
+
atomic_long_sub(memdesc->size, &kgsl_driver.stats.page_alloc);
for (i = 0; i < memdesc->page_count; i++)
@@ -1292,7 +1301,12 @@ static void kgsl_free_secure_system_pages(struct kgsl_memdesc *memdesc)
{
int i;
struct scatterlist *sg;
- int ret = kgsl_unlock_sgt(memdesc->sgt);
+ int ret;
+
+ if (memdesc->priv & KGSL_MEMDESC_MAPPED)
+ return;
+
+ ret = kgsl_unlock_sgt(memdesc->sgt);
if (ret) {
/*
@@ -1322,8 +1336,12 @@ static void kgsl_free_secure_system_pages(struct kgsl_memdesc *memdesc)
static void kgsl_free_secure_pages(struct kgsl_memdesc *memdesc)
{
- int ret = kgsl_unlock_sgt(memdesc->sgt);
+ int ret;
+
+ if (memdesc->priv & KGSL_MEMDESC_MAPPED)
+ return;
+ ret = kgsl_unlock_sgt(memdesc->sgt);
if (ret) {
/*
* Unlock of the secure buffer failed. This buffer will