diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 7a9858df90cf..c292892b07bd 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -9,7 +9,7 @@ #define CREATE_TRACE_POINTS #include #include -#include + #include #include #include @@ -41,19 +41,6 @@ * 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_is_fpsimd_save); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_transaction_init); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_set_priority); @@ -62,24 +49,13 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_wakeup_ilocked); 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_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_show_suspend_epoch_val); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_resume_epoch_val); 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_sched_rebalance_domains); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_busiest_queue); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_migrate_queued_task); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpu_overutilized); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_setaffinity); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_cpus_allowed); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_preempt_disable); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_preempt_enable); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_irqs_disable); @@ -110,26 +86,11 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ptype_head); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_allow_domain_state); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpuidle_psci_enter); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpuidle_psci_exit); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_check_preempt_tick); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_check_preempt_wakeup_ignore); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_replace_next_task_fair); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_wait_for_work); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sync_txn_recvd); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_build_sched_domains); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_balance_rt); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_pick_next_entity); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_check_preempt_wakeup); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpufreq_transition); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_balance_anon_file_reclaim); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_show_max_freq); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_task); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_after_enqueue_task); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_after_dequeue_task); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_enqueue_entity); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_dequeue_entity); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_entity_tick); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_enqueue_task_fair); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_dequeue_task_fair); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_avc_insert); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_avc_node_delete); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_avc_node_replace); @@ -142,11 +103,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_is_initialized); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_mmap_file); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_file_open); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_bpf_syscall); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_cpus_allowed_by_task); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_post_init_entity_util_avg); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_uclamp_eff_get); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_util_est_update); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_setscheduler_uclamp); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rproc_recovery); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rproc_recovery_set); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_uninterruptible_tasks); diff --git a/include/trace/hooks/cgroup.h b/include/trace/hooks/cgroup.h index 75521077bfc6..fad9df2e5579 100644 --- a/include/trace/hooks/cgroup.h +++ b/include/trace/hooks/cgroup.h @@ -17,6 +17,24 @@ struct cgroup_taskset; DECLARE_HOOK(android_vh_cgroup_attach, TP_PROTO(struct cgroup_subsys *ss, struct cgroup_taskset *tset), TP_ARGS(ss, tset)) +DECLARE_RESTRICTED_HOOK(android_rvh_cgroup_force_kthread_migration, + TP_PROTO(struct task_struct *tsk, struct cgroup *dst_cgrp, bool *force_migration), + TP_ARGS(tsk, dst_cgrp, force_migration), 1); + +struct cgroup_taskset; +struct cgroup_subsys; + +DECLARE_RESTRICTED_HOOK(android_rvh_cpu_cgroup_attach, + TP_PROTO(struct cgroup_taskset *tset), + TP_ARGS(tset), 1); + +DECLARE_RESTRICTED_HOOK(android_rvh_cpu_cgroup_can_attach, + TP_PROTO(struct cgroup_taskset *tset, int *retval), + TP_ARGS(tset, retval), 1); + +DECLARE_RESTRICTED_HOOK(android_rvh_cpu_cgroup_online, + TP_PROTO(struct cgroup_subsys_state *css), + TP_ARGS(css), 1); #endif #include diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index 1e9f81ff3cbd..37b988996d97 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -117,20 +117,6 @@ DECLARE_RESTRICTED_HOOK(android_rvh_update_cpus_allowed, const struct cpumask *new_mask, int *ret), TP_ARGS(p, cpus_requested, new_mask, ret), 1); -struct cgroup_taskset; -DECLARE_RESTRICTED_HOOK(android_rvh_cpu_cgroup_attach, - TP_PROTO(struct cgroup_taskset *tset), - TP_ARGS(tset), 1); - -DECLARE_RESTRICTED_HOOK(android_rvh_cpu_cgroup_can_attach, - TP_PROTO(struct cgroup_taskset *tset, int *retval), - TP_ARGS(tset, retval), 1); - -struct cgroup_subsys_state; -DECLARE_RESTRICTED_HOOK(android_rvh_cpu_cgroup_online, - TP_PROTO(struct cgroup_subsys_state *css), - TP_ARGS(css), 1); - DECLARE_HOOK(android_vh_build_sched_domains, TP_PROTO(bool has_asym), TP_ARGS(has_asym)); diff --git a/kernel/sched/Makefile b/kernel/sched/Makefile index 976092b7bd45..ff1738cecd4c 100644 --- a/kernel/sched/Makefile +++ b/kernel/sched/Makefile @@ -32,3 +32,4 @@ obj-y += core.o obj-y += fair.o obj-y += build_policy.o obj-y += build_utility.o +obj-$(CONFIG_ANDROID_VENDOR_HOOKS) += vendor_hooks.o diff --git a/kernel/sched/core.c b/kernel/sched/core.c index f887ea4657d0..fa092e6df44a 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -95,6 +95,7 @@ #include "../smpboot.h" #include +#include /* * Export tracepoints that act as a bare tracehook (ie: have no trace event diff --git a/kernel/sched/vendor_hooks.c b/kernel/sched/vendor_hooks.c new file mode 100644 index 000000000000..0682fd4b1c22 --- /dev/null +++ b/kernel/sched/vendor_hooks.c @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* vendor_hook.c + * + * Copyright 2022 Google LLC + */ +#include "sched.h" +#include "pelt.h" +#include "smp.h" + +#define CREATE_TRACE_POINTS +#include +#include +#include +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_prepare_prio_fork); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_finish_prio_fork); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_rtmutex_prepare_setprio); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_user_nice); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_setscheduler); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_busiest_group); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dump_throttled_rt_tasks); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_jiffies_update); +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_sched_rebalance_domains); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_busiest_queue); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_migrate_queued_task); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpu_overutilized); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_setaffinity); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_cpus_allowed); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_build_sched_domains); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_check_preempt_tick); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_check_preempt_wakeup_ignore); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_replace_next_task_fair); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_balance_rt); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_pick_next_entity); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_check_preempt_wakeup); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_cpus_allowed_by_task); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_task); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_uclamp_eff_get); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_after_enqueue_task); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_after_dequeue_task); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_enqueue_entity); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_dequeue_entity); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_entity_tick); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_enqueue_task_fair); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_dequeue_task_fair); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_post_init_entity_util_avg); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_util_est_update); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_setscheduler_uclamp);