Loading arch/arm64/configs/vendor/sdm660_defconfig +1 −1 Original line number Diff line number Diff line Loading @@ -623,7 +623,6 @@ CONFIG_MSM_PIL=y CONFIG_MSM_SYSMON_QMI_COMM=y CONFIG_MSM_PIL_SSR_GENERIC=y CONFIG_MSM_BOOT_STATS=y CONFIG_QCOM_DCC_V2=y CONFIG_QCOM_EUD=y CONFIG_QCOM_MINIDUMP=y CONFIG_MSM_CORE_HANG_DETECT=y Loading @@ -644,6 +643,7 @@ CONFIG_QCOM_SMCINVOKE=y CONFIG_MSM_EVENT_TIMER=y CONFIG_MSM_PM=y CONFIG_QTI_L2_REUSE=y CONFIG_QCOM_DCC=y CONFIG_QTI_RPM_STATS_LOG=y CONFIG_QTEE_SHM_BRIDGE=y CONFIG_MEM_SHARE_QMI_SERVICE=y Loading drivers/char/adsprpc.c +5 −0 Original line number Diff line number Diff line Loading @@ -472,6 +472,7 @@ struct fastrpc_file { struct mutex perf_mutex; struct pm_qos_request pm_qos_req; int qos_request; struct mutex pm_qos_mutex; struct mutex map_mutex; struct mutex internal_map_mutex; /* Identifies the device (MINOR_NUM_DEV / MINOR_NUM_SECURE_DEV) */ Loading Loading @@ -3859,6 +3860,7 @@ static int fastrpc_file_free(struct fastrpc_file *fl) mutex_destroy(&fl->perf_mutex); mutex_destroy(&fl->map_mutex); mutex_destroy(&fl->internal_map_mutex); mutex_destroy(&fl->pm_qos_mutex); kfree(fl); return 0; } Loading Loading @@ -4232,6 +4234,7 @@ static int fastrpc_device_open(struct inode *inode, struct file *filp) hlist_add_head(&fl->hn, &me->drivers); spin_unlock(&me->hlock); mutex_init(&fl->perf_mutex); mutex_init(&fl->pm_qos_mutex); init_completion(&fl->shutdown); return 0; } Loading Loading @@ -4359,12 +4362,14 @@ static int fastrpc_internal_control(struct fastrpc_file *fl, fl->pm_qos_req.type = PM_QOS_REQ_AFFINE_CORES; cpumask_copy(&fl->pm_qos_req.cpus_affine, &mask); mutex_lock(&fl->pm_qos_mutex); if (!fl->qos_request) { pm_qos_add_request(&fl->pm_qos_req, PM_QOS_CPU_DMA_LATENCY, latency); fl->qos_request = 1; } else pm_qos_update_request(&fl->pm_qos_req, latency); mutex_unlock(&fl->pm_qos_mutex); /* Ensure CPU feature map updated to DSP for early WakeUp */ fastrpc_send_cpuinfo_to_dsp(fl); Loading drivers/clk/qcom/clk-debug.c +7 −0 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* Copyright (c) 2016, 2019-2021 The Linux Foundation. All rights reserved. */ /* Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved. */ #include <linux/clk.h> #include <linux/export.h> Loading @@ -11,6 +12,10 @@ #include <linux/bitops.h> #include <linux/mfd/syscon.h> #include <linux/msm-bus.h> #include <trace/events/power.h> #define CREATE_TRACE_POINTS #include "trace.h" #include "clk-regmap.h" #include "clk-debug.h" Loading Loading @@ -273,6 +278,8 @@ static int clk_debug_measure_get(void *data, u64 *val) /* recursively calculate actual freq */ *val *= get_mux_divs(measure); /* enable ftrace support */ trace_clk_measure(clk_hw_get_name(hw), *val); disable_debug_clks(measure); exit: if (meas->bus_cl_id) Loading drivers/clk/qcom/trace.h 0 → 100644 +51 −0 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only * * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved. */ #undef TRACE_SYSTEM #define TRACE_SYSTEM clk_qcom #if !defined(_TRACE_CLOCK_QCOM_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_CLOCK_QCOM #include <linux/tracepoint.h> DECLARE_EVENT_CLASS(clk_measure_support, TP_PROTO(const char *name, unsigned long rate), TP_ARGS(name, rate), TP_STRUCT__entry( __string(name, name) __field(unsigned long, rate) ), TP_fast_assign( __assign_str(name, name); __entry->rate = rate; ), TP_printk("%s rate: %lu", __get_str(name), (unsigned long)__entry->rate) ); DEFINE_EVENT(clk_measure_support, clk_measure, TP_PROTO(const char *name, unsigned long rate), TP_ARGS(name, rate) ); #endif /* _TRACE_CLOCK_QCOM */ /* This part must be outside protection */ #undef TRACE_INCLUDE_PATH #define TRACE_INCLUDE_PATH . #undef TRACE_INCLUDE_FILE #define TRACE_INCLUDE_FILE trace #include <trace/define_trace.h> drivers/gpu/msm/kgsl_reclaim.c +29 −2 Original line number Diff line number Diff line Loading @@ -5,7 +5,9 @@ #include <linux/kthread.h> #include <linux/notifier.h> #include <linux/pagevec.h> #include <linux/shmem_fs.h> #include <linux/swap.h> #include "kgsl_reclaim.h" #include "kgsl_sharedmem.h" Loading Loading @@ -193,6 +195,12 @@ ssize_t kgsl_proc_max_reclaim_limit_show(struct device *dev, return scnprintf(buf, PAGE_SIZE, "%d\n", kgsl_reclaim_max_page_limit); } static void kgsl_release_page_vec(struct pagevec *pvec) { check_move_unevictable_pages(pvec->pages, pvec->nr); __pagevec_release(pvec); } static int kgsl_reclaim_callback(struct notifier_block *nb, unsigned long pid, void *data) { Loading Loading @@ -266,20 +274,39 @@ static int kgsl_reclaim_callback(struct notifier_block *nb, if (!kgsl_mmu_unmap(memdesc->pagetable, memdesc)) { int i; struct pagevec pvec; /* * Pages that are first allocated are by default added * to unevictable list. To reclaim them, we first clear * the AS_UNEVICTABLE flag of the shmem file address * space thus check_move_unevictable_pages() places * them on the evictable list. * * Once reclaim is done, hint that further shmem * allocations will have to be on the unevictable list. */ mapping_clear_unevictable( memdesc->shmem_filp->f_mapping); pagevec_init(&pvec); for (i = 0; i < memdesc->page_count; i++) { set_page_dirty_lock(memdesc->pages[i]); spin_lock(&memdesc->lock); put_page(memdesc->pages[i]); pagevec_add(&pvec, memdesc->pages[i]); memdesc->pages[i] = NULL; spin_unlock(&memdesc->lock); if (pagevec_count(&pvec) == PAGEVEC_SIZE) kgsl_release_page_vec(&pvec); } if (pagevec_count(&pvec)) kgsl_release_page_vec(&pvec); memdesc->priv |= KGSL_MEMDESC_RECLAIMED; ret = reclaim_address_space (memdesc->shmem_filp->f_mapping, data); mapping_set_unevictable(memdesc->shmem_filp->f_mapping); memdesc->reclaimed_page_count += memdesc->page_count; atomic_add(memdesc->page_count, &process->reclaimed_page_count); Loading Loading
arch/arm64/configs/vendor/sdm660_defconfig +1 −1 Original line number Diff line number Diff line Loading @@ -623,7 +623,6 @@ CONFIG_MSM_PIL=y CONFIG_MSM_SYSMON_QMI_COMM=y CONFIG_MSM_PIL_SSR_GENERIC=y CONFIG_MSM_BOOT_STATS=y CONFIG_QCOM_DCC_V2=y CONFIG_QCOM_EUD=y CONFIG_QCOM_MINIDUMP=y CONFIG_MSM_CORE_HANG_DETECT=y Loading @@ -644,6 +643,7 @@ CONFIG_QCOM_SMCINVOKE=y CONFIG_MSM_EVENT_TIMER=y CONFIG_MSM_PM=y CONFIG_QTI_L2_REUSE=y CONFIG_QCOM_DCC=y CONFIG_QTI_RPM_STATS_LOG=y CONFIG_QTEE_SHM_BRIDGE=y CONFIG_MEM_SHARE_QMI_SERVICE=y Loading
drivers/char/adsprpc.c +5 −0 Original line number Diff line number Diff line Loading @@ -472,6 +472,7 @@ struct fastrpc_file { struct mutex perf_mutex; struct pm_qos_request pm_qos_req; int qos_request; struct mutex pm_qos_mutex; struct mutex map_mutex; struct mutex internal_map_mutex; /* Identifies the device (MINOR_NUM_DEV / MINOR_NUM_SECURE_DEV) */ Loading Loading @@ -3859,6 +3860,7 @@ static int fastrpc_file_free(struct fastrpc_file *fl) mutex_destroy(&fl->perf_mutex); mutex_destroy(&fl->map_mutex); mutex_destroy(&fl->internal_map_mutex); mutex_destroy(&fl->pm_qos_mutex); kfree(fl); return 0; } Loading Loading @@ -4232,6 +4234,7 @@ static int fastrpc_device_open(struct inode *inode, struct file *filp) hlist_add_head(&fl->hn, &me->drivers); spin_unlock(&me->hlock); mutex_init(&fl->perf_mutex); mutex_init(&fl->pm_qos_mutex); init_completion(&fl->shutdown); return 0; } Loading Loading @@ -4359,12 +4362,14 @@ static int fastrpc_internal_control(struct fastrpc_file *fl, fl->pm_qos_req.type = PM_QOS_REQ_AFFINE_CORES; cpumask_copy(&fl->pm_qos_req.cpus_affine, &mask); mutex_lock(&fl->pm_qos_mutex); if (!fl->qos_request) { pm_qos_add_request(&fl->pm_qos_req, PM_QOS_CPU_DMA_LATENCY, latency); fl->qos_request = 1; } else pm_qos_update_request(&fl->pm_qos_req, latency); mutex_unlock(&fl->pm_qos_mutex); /* Ensure CPU feature map updated to DSP for early WakeUp */ fastrpc_send_cpuinfo_to_dsp(fl); Loading
drivers/clk/qcom/clk-debug.c +7 −0 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* Copyright (c) 2016, 2019-2021 The Linux Foundation. All rights reserved. */ /* Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved. */ #include <linux/clk.h> #include <linux/export.h> Loading @@ -11,6 +12,10 @@ #include <linux/bitops.h> #include <linux/mfd/syscon.h> #include <linux/msm-bus.h> #include <trace/events/power.h> #define CREATE_TRACE_POINTS #include "trace.h" #include "clk-regmap.h" #include "clk-debug.h" Loading Loading @@ -273,6 +278,8 @@ static int clk_debug_measure_get(void *data, u64 *val) /* recursively calculate actual freq */ *val *= get_mux_divs(measure); /* enable ftrace support */ trace_clk_measure(clk_hw_get_name(hw), *val); disable_debug_clks(measure); exit: if (meas->bus_cl_id) Loading
drivers/clk/qcom/trace.h 0 → 100644 +51 −0 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only * * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved. */ #undef TRACE_SYSTEM #define TRACE_SYSTEM clk_qcom #if !defined(_TRACE_CLOCK_QCOM_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_CLOCK_QCOM #include <linux/tracepoint.h> DECLARE_EVENT_CLASS(clk_measure_support, TP_PROTO(const char *name, unsigned long rate), TP_ARGS(name, rate), TP_STRUCT__entry( __string(name, name) __field(unsigned long, rate) ), TP_fast_assign( __assign_str(name, name); __entry->rate = rate; ), TP_printk("%s rate: %lu", __get_str(name), (unsigned long)__entry->rate) ); DEFINE_EVENT(clk_measure_support, clk_measure, TP_PROTO(const char *name, unsigned long rate), TP_ARGS(name, rate) ); #endif /* _TRACE_CLOCK_QCOM */ /* This part must be outside protection */ #undef TRACE_INCLUDE_PATH #define TRACE_INCLUDE_PATH . #undef TRACE_INCLUDE_FILE #define TRACE_INCLUDE_FILE trace #include <trace/define_trace.h>
drivers/gpu/msm/kgsl_reclaim.c +29 −2 Original line number Diff line number Diff line Loading @@ -5,7 +5,9 @@ #include <linux/kthread.h> #include <linux/notifier.h> #include <linux/pagevec.h> #include <linux/shmem_fs.h> #include <linux/swap.h> #include "kgsl_reclaim.h" #include "kgsl_sharedmem.h" Loading Loading @@ -193,6 +195,12 @@ ssize_t kgsl_proc_max_reclaim_limit_show(struct device *dev, return scnprintf(buf, PAGE_SIZE, "%d\n", kgsl_reclaim_max_page_limit); } static void kgsl_release_page_vec(struct pagevec *pvec) { check_move_unevictable_pages(pvec->pages, pvec->nr); __pagevec_release(pvec); } static int kgsl_reclaim_callback(struct notifier_block *nb, unsigned long pid, void *data) { Loading Loading @@ -266,20 +274,39 @@ static int kgsl_reclaim_callback(struct notifier_block *nb, if (!kgsl_mmu_unmap(memdesc->pagetable, memdesc)) { int i; struct pagevec pvec; /* * Pages that are first allocated are by default added * to unevictable list. To reclaim them, we first clear * the AS_UNEVICTABLE flag of the shmem file address * space thus check_move_unevictable_pages() places * them on the evictable list. * * Once reclaim is done, hint that further shmem * allocations will have to be on the unevictable list. */ mapping_clear_unevictable( memdesc->shmem_filp->f_mapping); pagevec_init(&pvec); for (i = 0; i < memdesc->page_count; i++) { set_page_dirty_lock(memdesc->pages[i]); spin_lock(&memdesc->lock); put_page(memdesc->pages[i]); pagevec_add(&pvec, memdesc->pages[i]); memdesc->pages[i] = NULL; spin_unlock(&memdesc->lock); if (pagevec_count(&pvec) == PAGEVEC_SIZE) kgsl_release_page_vec(&pvec); } if (pagevec_count(&pvec)) kgsl_release_page_vec(&pvec); memdesc->priv |= KGSL_MEMDESC_RECLAIMED; ret = reclaim_address_space (memdesc->shmem_filp->f_mapping, data); mapping_set_unevictable(memdesc->shmem_filp->f_mapping); memdesc->reclaimed_page_count += memdesc->page_count; atomic_add(memdesc->page_count, &process->reclaimed_page_count); Loading