summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/staging/android/ion/ion_system_secure_heap.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/staging/android/ion/ion_system_secure_heap.c b/drivers/staging/android/ion/ion_system_secure_heap.c
index ab681c9418a2..62974c79fe63 100644
--- a/drivers/staging/android/ion/ion_system_secure_heap.c
+++ b/drivers/staging/android/ion/ion_system_secure_heap.c
@@ -52,9 +52,12 @@ static int get_secure_vmid(unsigned long flags)
static void ion_system_secure_heap_free(struct ion_buffer *buffer)
{
int ret = 0;
+ int i;
u32 source_vm;
int dest_vmid;
int dest_perms;
+ struct sg_table *sgt;
+ struct scatterlist *sg;
struct ion_heap *heap = buffer->heap;
struct ion_system_secure_heap *secure_heap = container_of(heap,
struct ion_system_secure_heap,
@@ -76,6 +79,10 @@ static void ion_system_secure_heap_free(struct ion_buffer *buffer)
return;
}
+ sgt = buffer->priv_virt;
+ for_each_sg(sgt->sgl, sg, sgt->nents, i)
+ ClearPagePrivate(sg_page(sg));
+
buffer->heap = secure_heap->sys_heap;
secure_heap->sys_heap->ops->free(buffer);
}
@@ -86,9 +93,12 @@ static int ion_system_secure_heap_allocate(struct ion_heap *heap,
unsigned long flags)
{
int ret = 0;
+ int i;
u32 source_vm;
int dest_vmid;
int dest_perms;
+ struct sg_table *sgt;
+ struct scatterlist *sg;
struct ion_system_secure_heap *secure_heap = container_of(heap,
struct ion_system_secure_heap,
heap);
@@ -123,6 +133,11 @@ static int ion_system_secure_heap_allocate(struct ion_heap *heap,
pr_err("%s: Assign call failed\n", __func__);
goto err;
}
+
+ sgt = buffer->priv_virt;
+ for_each_sg(sgt->sgl, sg, sgt->nents, i)
+ SetPagePrivate(sg_page(sg));
+
return ret;
err: