Merge tag 'LA.UM.9.12.c25-04100-SMxx50.QSSI13c28.0' of https://git.codelinaro.org/clo/la/kernel/msm-4.19 into android13-4.19-kona

"LA.UM.9.12.c25-04100-SMxx50.QSSI13c28.0"

* tag 'LA.UM.9.12.c25-04100-SMxx50.QSSI13c28.0' of https://git.codelinaro.org/clo/la/kernel/msm-4.19:
  UPSTREAM: vsock: Do not allow binding to VMADDR_PORT_ANY
  kgsl: Add buffer overflow check for perfcounter dynamic list
  kgsl: Use the page compound order when freeing pages
  kgsl: Avoid use after free in kgsl_destroy_ion()
  kgsl: Prevent sign extension on alignments
  UPSTREAM: posix-cpu-timers: fix race between handle_posix_cpu_timers() and posix_cpu_timer_del()

 Conflicts:
	drivers/gpu/msm/kgsl_iommu.c

Change-Id: I769cbb8dcdffef3cb3767b8252746235ee81c334
This commit is contained in:
Michael Bestas committed 2026-04-30 19:16:47 +03:00
commit eeca493415
7 files changed
+45 -25

No files matched your search

+10 -1
View File
@@ -2659,6 +2659,8 @@ static int a6xx_perfcounter_update(struct adreno_device *adreno_dev,
struct cpu_gpu_lock *lock = ptr;
u32 *data = ptr + sizeof(*lock);
int i, offset = 0;
/* No of pairs to add: <reg,val> */
u32 pending_pairs = adreno_is_a612(adreno_dev) ? 2 : 1;
if (cpu_gpu_lock(lock)) {
cpu_gpu_unlock(lock);
@@ -2679,6 +2681,13 @@ static int a6xx_perfcounter_update(struct adreno_device *adreno_dev,
offset += 2;
}
/* Ensure there is enough space in the reglist buffer for new pairs */
if ((offset + (pending_pairs * 2)) >=
(adreno_dev->pwrup_reglist.size / sizeof(u32))) {
cpu_gpu_unlock(lock);
return -ENOSPC;
}
/*
* For a612 targets A6XX_RBBM_PERFCTR_CNTL needs to be the last entry,
* so overwrite the existing A6XX_RBBM_PERFCNTL_CTRL and add it back to
@@ -2688,7 +2697,7 @@ static int a6xx_perfcounter_update(struct adreno_device *adreno_dev,
data[offset - 2] = reg->select;
data[offset - 1] = reg->countable;
data[offset] = A6XX_RBBM_PERFCTR_CNTL,
data[offset] = A6XX_RBBM_PERFCTR_CNTL;
data[offset + 1] = 1;
} else {
data[offset] = reg->select;
+17 -14
View File
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2008-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
*/
#include <uapi/linux/sched/types.h>
@@ -318,6 +318,7 @@ static void kgsl_destroy_ion(struct kgsl_memdesc *memdesc)
* doesn't try to free it again
*/
memdesc->sgt = NULL;
entry->priv_data = NULL;
}
static struct kgsl_memdesc_ops kgsl_dmabuf_ops = {
@@ -4942,27 +4943,29 @@ static unsigned long _search_range(struct kgsl_process_private *private,
return result;
}
unsigned long kgsl_get_align(struct kgsl_memdesc *memdesc)
{
u32 bit = kgsl_memdesc_get_align(memdesc);
if (bit >= ilog2(SZ_2M))
return SZ_2M;
else if (bit >= ilog2(SZ_1M))
return SZ_1M;
else if (bit >= ilog2(SZ_64K))
return SZ_64K;
return PAGE_SIZE;
}
static unsigned long _get_svm_area(struct kgsl_process_private *private,
struct kgsl_mem_entry *entry, unsigned long hint,
unsigned long len, unsigned long flags)
{
uint64_t start, end;
int align_shift = kgsl_memdesc_get_align(&entry->memdesc);
uint64_t align;
unsigned long align = kgsl_get_align(&entry->memdesc);
unsigned long result;
unsigned long addr;
if (align_shift >= ilog2(SZ_2M))
align = SZ_2M;
else if (align_shift >= ilog2(SZ_1M))
align = SZ_1M;
else if (align_shift >= ilog2(SZ_64K))
align = SZ_64K;
else
align = SZ_4K;
align = max_t(uint64_t, align, PAGE_SIZE);
/* get the GPU pagetable's SVM range */
if (kgsl_mmu_svm_range(private->pagetable, &start, &end,
entry->memdesc.flags))
+3 -1
View File
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2008-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
*/
#ifndef __KGSL_H
#define __KGSL_H
@@ -489,6 +489,8 @@ void kgsl_mmu_remove_global(struct kgsl_device *device,
struct kgsl_memdesc *memdesc);
/* Helper functions */
unsigned long kgsl_get_align(struct kgsl_memdesc *memdesc);
int kgsl_request_irq(struct platform_device *pdev, const char *name,
irq_handler_t handler, void *data);
+2 -1
View File
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2002,2008-2020, The Linux Foundation. All rights reserved.
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
*/
#include <linux/debugfs.h>
@@ -106,7 +107,7 @@ static const char *memtype_str(int memtype)
static char get_alignflag(const struct kgsl_memdesc *m)
{
int align = kgsl_memdesc_get_align(m);
u32 align = kgsl_memdesc_get_align(m);
if (align >= ilog2(SZ_1M))
return 'L';
+2 -3
View File
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2011-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2022-2024, Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
*/
#include <linux/compat.h>
@@ -2528,8 +2528,7 @@ static int kgsl_iommu_get_gpuaddr(struct kgsl_pagetable *pagetable,
size = kgsl_memdesc_footprint(memdesc);
align = max_t(uint64_t, 1 << kgsl_memdesc_get_align(memdesc),
PAGE_SIZE);
align = kgsl_get_align(memdesc);
if (memdesc->flags & KGSL_MEMFLAGS_FORCE_32BIT) {
start = pt->compat_va_start;
+9 -4
View File
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2002,2007-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
*/
#include <asm/cacheflush.h>
@@ -960,11 +960,16 @@ static int kgsl_shmem_alloc_page(struct page **pages,
void kgsl_shmem_free_pages(struct kgsl_memdesc *memdesc)
{
int i;
u32 i, n = 1;
for (i = 0; i < memdesc->page_count; i++)
if (memdesc->pages[i])
for (i = 0; i < memdesc->page_count; i += n) {
n = 1;
if (memdesc->pages[i]) {
n = 1 << compound_order(memdesc->pages[i]);
put_page(memdesc->pages[i]);
}
}
}
static int kgsl_memdesc_file_setup(struct kgsl_memdesc *memdesc, uint64_t size)
+2 -1
View File
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2002, 2007-2020, The Linux Foundation. All rights reserved.
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
*/
#ifndef __KGSL_SHAREDMEM_H
#define __KGSL_SHAREDMEM_H
@@ -106,7 +107,7 @@ void kgsl_free_pages_from_sgt(struct kgsl_memdesc *memdesc);
*
* Returns the alignment requested, as power of 2 exponent.
*/
static inline int
static inline u32
kgsl_memdesc_get_align(const struct kgsl_memdesc *memdesc)
{
return MEMFLAGS(memdesc->flags, KGSL_MEMALIGN_MASK,