Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 16dd4e63 authored by Puranam V G Tejaswi's avatar Puranam V G Tejaswi
Browse files

msm: kgsl: do not set private flag for secure allocations



The intention to set page private flag was to avoid
importing secure buffers as non secure buffers. This would
result in secure buffers being incorrectly mapped to a non
secure context bank. This problem can arise when importing
ion buffers, but never with a secure allocation from kgsl.
There is no means to import a secure kgsl buffer as
non secure buffer. So setting page private for secure
allocations done by kgsl can be safely removed.

Change-Id: I9ea879ec36f945a0f1fd57055dc7d4fa3bfe8905
Signed-off-by: default avatarPuranam V G Tejaswi <pvgtejas@codeaurora.org>
parent ffda1ab8
Loading
Loading
Loading
Loading
+2 −15
Original line number Original line Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
// SPDX-License-Identifier: GPL-2.0-only
/*
/*
 * Copyright (c) 2002,2007-2019, The Linux Foundation. All rights reserved.
 * Copyright (c) 2002,2007-2020, The Linux Foundation. All rights reserved.
 */
 */


#include <asm/cacheflush.h>
#include <asm/cacheflush.h>
@@ -505,12 +505,10 @@ static void kgsl_page_alloc_unmap_kernel(struct kgsl_memdesc *memdesc)


static int kgsl_lock_sgt(struct sg_table *sgt, u64 size)
static int kgsl_lock_sgt(struct sg_table *sgt, u64 size)
{
{
	struct scatterlist *sg;
	int dest_perms = PERM_READ | PERM_WRITE;
	int dest_perms = PERM_READ | PERM_WRITE;
	int source_vm = VMID_HLOS;
	int source_vm = VMID_HLOS;
	int dest_vm = VMID_CP_PIXEL;
	int dest_vm = VMID_CP_PIXEL;
	int ret;
	int ret;
	int i;


	do {
	do {
		ret = hyp_assign_table(sgt, &source_vm, 1, &dest_vm,
		ret = hyp_assign_table(sgt, &source_vm, 1, &dest_vm,
@@ -532,10 +530,6 @@ static int kgsl_lock_sgt(struct sg_table *sgt, u64 size)
		return ret;
		return ret;
	}
	}


	/* Set private bit for each sg to indicate that its secured */
	for_each_sg(sgt->sgl, sg, sgt->nents, i)
		SetPagePrivate(sg_page(sg));

	return 0;
	return 0;
}
}


@@ -545,7 +539,6 @@ static int kgsl_unlock_sgt(struct sg_table *sgt)
	int source_vm = VMID_CP_PIXEL;
	int source_vm = VMID_CP_PIXEL;
	int dest_vm = VMID_HLOS;
	int dest_vm = VMID_HLOS;
	int ret;
	int ret;
	struct sg_page_iter sg_iter;


	do {
	do {
		ret = hyp_assign_table(sgt, &source_vm, 1, &dest_vm,
		ret = hyp_assign_table(sgt, &source_vm, 1, &dest_vm,
@@ -555,8 +548,6 @@ static int kgsl_unlock_sgt(struct sg_table *sgt)
	if (ret)
	if (ret)
		return ret;
		return ret;


	for_each_sg_page(sgt->sgl, &sg_iter, sgt->nents, 0)
		ClearPagePrivate(sg_page_iter_page(&sg_iter));
	return 0;
	return 0;
}
}


@@ -1475,9 +1466,6 @@ static int kgsl_cma_alloc_secure(struct kgsl_device *device,
	if (result != 0)
	if (result != 0)
		goto err;
		goto err;


	/* Set the private bit to indicate that we've secured this */
	SetPagePrivate(sg_page(memdesc->sgt->sgl));

	memdesc->priv |= KGSL_MEMDESC_TZ_LOCKED;
	memdesc->priv |= KGSL_MEMDESC_TZ_LOCKED;


	/* Record statistics */
	/* Record statistics */
@@ -1502,8 +1490,7 @@ static void kgsl_cma_unlock_secure(struct kgsl_memdesc *memdesc)
	if (memdesc->size == 0 || !(memdesc->priv & KGSL_MEMDESC_TZ_LOCKED))
	if (memdesc->size == 0 || !(memdesc->priv & KGSL_MEMDESC_TZ_LOCKED))
		return;
		return;


	if (!scm_lock_chunk(memdesc, 0))
	scm_lock_chunk(memdesc, 0);
		ClearPagePrivate(sg_page(memdesc->sgt->sgl));
}
}


void kgsl_sharedmem_set_noretry(bool val)
void kgsl_sharedmem_set_noretry(bool val)