mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-07 12:25:00 -04:00
msm: kgsl: skip if requested address doesn't fall in the svm range
User should not be provided address out of SVM region. Return error for any such requests from user. Change-Id: If149044039b156f8192f405714f5c1a0571004e7 Signed-off-by: gkiranku <gkiranku@codeaurora.org>
This commit is contained in:
parent
197f1cc98f
commit
66222aaf87
1 changed files with 18 additions and 3 deletions
|
|
@ -2278,6 +2278,22 @@ static uint64_t kgsl_iommu_find_svm_region(struct kgsl_pagetable *pagetable,
|
|||
return addr;
|
||||
}
|
||||
|
||||
static bool iommu_addr_in_svm_ranges(struct kgsl_iommu_pt *pt,
|
||||
u64 gpuaddr, u64 size)
|
||||
{
|
||||
if ((gpuaddr >= pt->compat_va_start && gpuaddr < pt->compat_va_end) &&
|
||||
((gpuaddr + size) > pt->compat_va_start &&
|
||||
(gpuaddr + size) <= pt->compat_va_end))
|
||||
return true;
|
||||
|
||||
if ((gpuaddr >= pt->svm_start && gpuaddr < pt->svm_end) &&
|
||||
((gpuaddr + size) > pt->svm_start &&
|
||||
(gpuaddr + size) <= pt->svm_end))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static int kgsl_iommu_set_svm_region(struct kgsl_pagetable *pagetable,
|
||||
uint64_t gpuaddr, uint64_t size)
|
||||
{
|
||||
|
|
@ -2285,9 +2301,8 @@ static int kgsl_iommu_set_svm_region(struct kgsl_pagetable *pagetable,
|
|||
struct kgsl_iommu_pt *pt = pagetable->priv;
|
||||
struct rb_node *node;
|
||||
|
||||
/* Make sure the requested address doesn't fall in the global range */
|
||||
if (ADDR_IN_GLOBAL(pagetable->mmu, gpuaddr) ||
|
||||
ADDR_IN_GLOBAL(pagetable->mmu, gpuaddr + size))
|
||||
/* Make sure the requested address doesn't fall out of SVM range */
|
||||
if (!iommu_addr_in_svm_ranges(pt, gpuaddr, size))
|
||||
return -ENOMEM;
|
||||
|
||||
spin_lock(&pagetable->lock);
|
||||
|
|
|
|||
Loading…
Reference in a new issue