diff --git a/kernel/sched/walt/sysctl.c b/kernel/sched/walt/sysctl.c index 485ea5c858b4..a0bbb0b30927 100644 --- a/kernel/sched/walt/sysctl.c +++ b/kernel/sched/walt/sysctl.c @@ -61,6 +61,7 @@ unsigned int sysctl_sched_many_wakeup_threshold = WALT_MANY_WAKEUP_DEFAULT; const int sched_user_hint_max = 1000; unsigned int sysctl_walt_rtg_cfs_boost_prio = 99; /* disabled by default */ unsigned int sysctl_sched_sync_hint_enable = 1; +unsigned int sysctl_sched_bug_on_rt_throttle; unsigned int sysctl_panic_on_walt_bug; unsigned int sysctl_sched_suppress_region2; @@ -713,6 +714,15 @@ struct ctl_table walt_table[] = { .extra1 = SYSCTL_ZERO, .extra2 = SYSCTL_ONE, }, + { + .procname = "sched_bug_on_rt_throttle", + .data = &sysctl_sched_bug_on_rt_throttle, + .maxlen = sizeof(unsigned int), + .mode = 0644, + .proc_handler = proc_dointvec_minmax, + .extra1 = SYSCTL_ZERO, + .extra2 = SYSCTL_ONE, + }, { .procname = "sched_suppress_region2", .data = &sysctl_sched_suppress_region2, diff --git a/kernel/sched/walt/walt.c b/kernel/sched/walt/walt.c index bd5b9ab4cf85..48c8e15b92b2 100644 --- a/kernel/sched/walt/walt.c +++ b/kernel/sched/walt/walt.c @@ -4130,6 +4130,23 @@ static void android_rvh_force_compatible_post(void *unused, void *unused2) cpu_maps_update_done(); } +static void dump_throttled_rt_tasks(void *unused, int cpu, u64 clock, + ktime_t rt_period, u64 rt_runtime, s64 rt_period_timer_expires) +{ + printk_deferred("sched: RT throttling activated for cpu %d\n", cpu); + printk_deferred("rt_period_timer: expires=%lld now=%llu rt_time=%llu runtime=%llu period=%llu\n", + rt_period_timer_expires, ktime_get_ns(), + task_rq(current)->rt.rt_time, rt_runtime, rt_period); + printk_deferred("potential CPU hogs:\n"); +#ifdef CONFIG_SCHED_INFO + if (sched_info_on()) + printk_deferred("current %s (%d) is running for %llu nsec\n", + current->comm, current->pid, + clock - current->sched_info.last_arrival); +#endif + BUG_ON(sysctl_sched_bug_on_rt_throttle); +} + static void register_walt_hooks(void) { register_trace_android_rvh_wake_up_new_task(android_rvh_wake_up_new_task, NULL); @@ -4161,6 +4178,7 @@ static void register_walt_hooks(void) register_trace_cpu_frequency_limits(walt_cpu_frequency_limits, NULL); register_trace_android_rvh_force_compatible_pre(android_rvh_force_compatible_pre, NULL); register_trace_android_rvh_force_compatible_post(android_rvh_force_compatible_post, NULL); + register_trace_android_vh_dump_throttled_rt_tasks(dump_throttled_rt_tasks, NULL); } atomic64_t walt_irq_work_lastq_ws; diff --git a/kernel/sched/walt/walt.h b/kernel/sched/walt/walt.h index b5ff6da7b34e..64c097f92ab3 100644 --- a/kernel/sched/walt/walt.h +++ b/kernel/sched/walt/walt.h @@ -286,6 +286,7 @@ extern unsigned int sysctl_sched_task_unfilter_period; extern unsigned int __read_mostly sysctl_sched_asym_cap_sibling_freq_match_pct; extern unsigned int sysctl_walt_low_latency_task_threshold; /* disabled by default */ extern unsigned int sysctl_sched_sync_hint_enable; +extern unsigned int sysctl_sched_bug_on_rt_throttle; extern unsigned int sysctl_sched_suppress_region2; extern struct ctl_table walt_table[]; extern struct ctl_table walt_base_table[]; diff --git a/kernel/sched/walt/walt_debug.c b/kernel/sched/walt/walt_debug.c index 26a345c3c357..09ac094c2371 100644 --- a/kernel/sched/walt/walt_debug.c +++ b/kernel/sched/walt/walt_debug.c @@ -11,23 +11,6 @@ #include "walt.h" #include "walt_debug.h" -static void dump_throttled_rt_tasks(void *unused, int cpu, u64 clock, - ktime_t rt_period, u64 rt_runtime, s64 rt_period_timer_expires) -{ - printk_deferred("sched: RT throttling activated for cpu %d\n", cpu); - printk_deferred("rt_period_timer: expires=%lld now=%llu rt_time=%llu runtime=%llu period=%llu\n", - rt_period_timer_expires, ktime_get_ns(), - task_rq(current)->rt.rt_time, rt_runtime, rt_period); - printk_deferred("potential CPU hogs:\n"); -#ifdef CONFIG_SCHED_INFO - if (sched_info_on()) - printk_deferred("current %s (%d) is running for %llu nsec\n", - current->comm, current->pid, - clock - current->sched_info.last_arrival); -#endif - BUG(); -} - static void android_rvh_schedule_bug(void *unused, struct task_struct *unused2) { BUG(); @@ -41,7 +24,6 @@ static int __init walt_debug_init(void) if (ret) return ret; - register_trace_android_vh_dump_throttled_rt_tasks(dump_throttled_rt_tasks, NULL); register_trace_android_rvh_schedule_bug(android_rvh_schedule_bug, NULL); return 0;