
When entering cluster-wide or system-wide power mode, Exynos cpu power management driver checks the next hrtimer events of cpu composing the power domain to prevent unnecessary attempts to enter the power mode. Since struct cpuidle_device has next_hrtimer, it can be solved by passing cpuidle device as a parameter of vh. In order to improve responsiveness, it is necessary to prevent entering the deep idle state in boosting scenario. So, vendor driver should be able to control the idle state. Due to above requirements, the parameters required for idle enter and exit different, so the vendor hook is separated into cpu_idle_enter and cpu_idle_exit. Bug: 176198732 Change-Id: I2262ba1bae5e6622a8e76bc1d5d16fb27af0bb8a Signed-off-by: Park Bumgyu <bumgyu.park@samsung.com>
118 lines
5.8 KiB
C
118 lines
5.8 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/* vendor_hook.c
|
|
*
|
|
* Android Vendor Hook Support
|
|
*
|
|
* Copyright 2020 Google LLC
|
|
*/
|
|
|
|
#define CREATE_TRACE_POINTS
|
|
#include <trace/hooks/vendor_hooks.h>
|
|
#include <trace/hooks/sched.h>
|
|
#include <trace/hooks/fpsimd.h>
|
|
#include <trace/hooks/binder.h>
|
|
#include <trace/hooks/rwsem.h>
|
|
#include <trace/hooks/futex.h>
|
|
#include <trace/hooks/dtask.h>
|
|
#include <trace/hooks/cpuidle.h>
|
|
#include <trace/hooks/topology.h>
|
|
#include <trace/hooks/mpam.h>
|
|
#include <trace/hooks/gic.h>
|
|
#include <trace/hooks/wqlockup.h>
|
|
#include <trace/hooks/debug.h>
|
|
#include <trace/hooks/sysrqcrash.h>
|
|
#include <trace/hooks/printk.h>
|
|
#include <trace/hooks/gic_v3.h>
|
|
#include <trace/hooks/epoch.h>
|
|
#include <trace/hooks/cpufreq.h>
|
|
#include <trace/hooks/mm.h>
|
|
#include <trace/hooks/preemptirq.h>
|
|
|
|
/*
|
|
* Export tracepoints that act as a bare tracehook (ie: have no trace event
|
|
* associated with them) to allow external modules to probe them.
|
|
*/
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_task_rq_fair);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_task_rq_rt);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_fallback_rq);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_scheduler_tick);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_enqueue_task);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_dequeue_task);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_can_migrate_task);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_lowest_rq);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_rtmutex_prepare_setprio);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_prepare_prio_fork);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_finish_prio_fork);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_user_nice);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_setscheduler);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_arch_set_freq_scale);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_is_fpsimd_save);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_transaction_init);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_set_priority);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_restore_priority);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_wakeup_ilocked);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_init);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_wake);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_finished);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_rwsem_list_add);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_futex_plist_add);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_start);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_finish);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_wait_start);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_wait_finish);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_start);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_finish);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_show_task);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle_enter);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle_exit);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mpam_set);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_busiest_group);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_resume);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_wq_lockup_pool);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ipi_stop);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sysrq_crash);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dump_throttled_rt_tasks);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_printk_hotplug);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_jiffies_update);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_v3_set_affinity);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_v3_affinity_init);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_suspend_epoch_val);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_resume_epoch_val);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_max_freq);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_freq_table_limits);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_newidle_balance);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_nohz_balancer_kick);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_busiest_queue);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_migrate_queued_task);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_resume_cpus);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_energy_efficient_cpu);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_sugov_sched_attr);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_iowait);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_sugov_update);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_setaffinity);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_cpus_allowed);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_skip_swapcache_flags);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_gfp_zone_flags);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_readahead_gfp_mask);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_preempt_disable);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_preempt_enable);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_irqs_disable);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_irqs_enable);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_task_cpu);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_try_to_wake_up);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_try_to_wake_up_success);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_fork);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_wake_up_new_task);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_new_task_stats);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_flush_task);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_tick_entry);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_schedule);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_cpu_starting);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_cpu_dying);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_account_irq);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_place_entity);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_cpu_capacity);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_misfit_status);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpu_cgroup_attach);
|
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpu_cgroup_can_attach);
|