From 3a50b928159613e78e00bc0259ca0a581b20ef48 Mon Sep 17 00:00:00 2001 From: Raghu Ananya Arabolu Date: Wed, 13 May 2020 14:38:42 -0700 Subject: [PATCH] msm: kgsl: Add a flag for guard page allocation Add a flag to the user-space API header. Set this flag if a guard page is needed for each mapped region. Change-Id: I383fd9893e417195e7bfb03eabe008cd160b59c7 Signed-off-by: Raghu Ananya Arabolu --- drivers/gpu/msm/kgsl.c | 6 ++++-- drivers/gpu/msm/kgsl_sharedmem.c | 3 ++- include/uapi/linux/msm_kgsl.h | 19 ++++++++++--------- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c index 7263f60be36b..86c790f816a3 100644 --- a/drivers/gpu/msm/kgsl.c +++ b/drivers/gpu/msm/kgsl.c @@ -2590,7 +2590,8 @@ long kgsl_ioctl_gpuobj_import(struct kgsl_device_private *dev_priv, | KGSL_MEMFLAGS_USE_CPU_MAP | KGSL_MEMFLAGS_SECURE | KGSL_MEMFLAGS_FORCE_32BIT - | KGSL_MEMFLAGS_IOCOHERENT; + | KGSL_MEMFLAGS_IOCOHERENT + | KGSL_MEMFLAGS_GUARD_PAGE; kgsl_memdesc_init(dev_priv->device, &entry->memdesc, param->flags); if (param->type == KGSL_USER_MEM_TYPE_ADDR) @@ -3269,7 +3270,8 @@ struct kgsl_mem_entry *gpumem_alloc_entry( | KGSL_MEMFLAGS_USE_CPU_MAP | KGSL_MEMFLAGS_SECURE | KGSL_MEMFLAGS_FORCE_32BIT - | KGSL_MEMFLAGS_IOCOHERENT; + | KGSL_MEMFLAGS_IOCOHERENT + | KGSL_MEMFLAGS_GUARD_PAGE; /* Return not supported error if secure memory isn't enabled */ if (!kgsl_mmu_is_secured(mmu) && diff --git a/drivers/gpu/msm/kgsl_sharedmem.c b/drivers/gpu/msm/kgsl_sharedmem.c index 1017c38a6d85..d2d63bae3695 100644 --- a/drivers/gpu/msm/kgsl_sharedmem.c +++ b/drivers/gpu/msm/kgsl_sharedmem.c @@ -696,7 +696,8 @@ void kgsl_memdesc_init(struct kgsl_device *device, cachemode == KGSL_CACHEMODE_UNCACHED)) flags &= ~((u64) KGSL_MEMFLAGS_IOCOHERENT); - if (kgsl_mmu_has_feature(device, KGSL_MMU_NEED_GUARD_PAGE)) + if (kgsl_mmu_has_feature(device, KGSL_MMU_NEED_GUARD_PAGE) || + (flags & KGSL_MEMFLAGS_GUARD_PAGE)) memdesc->priv |= KGSL_MEMDESC_GUARD_PAGE; if (flags & KGSL_MEMFLAGS_SECURE) diff --git a/include/uapi/linux/msm_kgsl.h b/include/uapi/linux/msm_kgsl.h index 2de01c5ab4d3..1c627345ea1c 100644 --- a/include/uapi/linux/msm_kgsl.h +++ b/include/uapi/linux/msm_kgsl.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* - * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. */ #ifndef _UAPI_MSM_KGSL_H @@ -126,10 +126,10 @@ /* --- Memory allocation flags --- */ /* General allocation hints */ -#define KGSL_MEMFLAGS_SECURE 0x00000008ULL -#define KGSL_MEMFLAGS_GPUREADONLY 0x01000000U -#define KGSL_MEMFLAGS_GPUWRITEONLY 0x02000000U -#define KGSL_MEMFLAGS_FORCE_32BIT 0x100000000ULL +#define KGSL_MEMFLAGS_SECURE (1ULL << 3) +#define KGSL_MEMFLAGS_GPUREADONLY (1ULL << 24) +#define KGSL_MEMFLAGS_GPUWRITEONLY (1ULL << 25) +#define KGSL_MEMFLAGS_FORCE_32BIT (1ULL << 32) /* Flag for binding all the virt range to single phys data */ #define KGSL_SPARSE_BIND_MULTIPLE_TO_PHYS 0x400000000ULL @@ -145,10 +145,11 @@ #define KGSL_CACHEMODE_WRITETHROUGH 2 #define KGSL_CACHEMODE_WRITEBACK 3 -#define KGSL_MEMFLAGS_USE_CPU_MAP 0x10000000ULL -#define KGSL_MEMFLAGS_SPARSE_PHYS 0x20000000ULL -#define KGSL_MEMFLAGS_SPARSE_VIRT 0x40000000ULL -#define KGSL_MEMFLAGS_IOCOHERENT 0x80000000ULL +#define KGSL_MEMFLAGS_USE_CPU_MAP (1ULL << 28) +#define KGSL_MEMFLAGS_SPARSE_PHYS (1ULL << 29) +#define KGSL_MEMFLAGS_SPARSE_VIRT (1ULL << 30) +#define KGSL_MEMFLAGS_IOCOHERENT (1ULL << 31) +#define KGSL_MEMFLAGS_GUARD_PAGE (1ULL << 33) /* Memory types for which allocations are made */ #define KGSL_MEMTYPE_MASK 0x0000FF00