From 5f657b04f4f26ef44e4470ac9be42bff0f06a525 Mon Sep 17 00:00:00 2001 From: Todd Kjos Date: Fri, 19 Aug 2022 22:25:17 +0000 Subject: [PATCH] ANDROID: subsystem-specific vendor_hooks.c for sched Change how vendor hooks are instantiated to promote more complete structure definition in the ABI XML description without complicating hook definition for partners. We don't want to force partners to include all headers as part of the hook definition in include/trace/hooks/ since that causes extra headers to be included in source files that runs the risk of changing visibility resulting in CRC changes to KMI symbols. Instead continue the practice of using forward declarations in the hook header files. Instead of instantiating all hook tracepoints globally in drivers/android/vendor_hooks.c, use subsystem-specific vendor_hooks.c if inclusion of subsystem-specific header files is required. This avoids namespace collisions between internal header files and limits the exposure to the internal headers to the instantiation, not the call sites. In this patch, all of the scheduler related hooks are instantiated in kernel/sched/vendor_hooks.c which can cleanly include scheduler-related header files to provide full type visibility. Bug: 233047575 Signed-off-by: Todd Kjos Change-Id: Ife5a66c2968de73e3f6d05840411310611e2e175 --- drivers/android/vendor_hooks.c | 46 +-------------------------- include/trace/hooks/cgroup.h | 18 +++++++++++ include/trace/hooks/sched.h | 14 --------- kernel/sched/Makefile | 1 + kernel/sched/core.c | 1 + kernel/sched/vendor_hooks.c | 57 ++++++++++++++++++++++++++++++++++ 6 files changed, 78 insertions(+), 59 deletions(-) create mode 100644 kernel/sched/vendor_hooks.c 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);