--- zzzz-none-000/linux-4.4.271/kernel/sched/core.c 2021-06-03 06:22:09.000000000 +0000 +++ hawkeye-5590-750/linux-4.4.271/kernel/sched/core.c 2023-04-19 10:22:30.000000000 +0000 @@ -90,6 +90,11 @@ #define CREATE_TRACE_POINTS #include +#if defined(CONFIG_AVM_SIMPLE_PROFILING) +#include +#endif/*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ + + DEFINE_MUTEX(sched_domains_mutex); DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues); @@ -2597,12 +2602,18 @@ * running on another CPU and we could rave with its RUNNING -> DEAD * transition, resulting in a double drop. */ + prev_state = prev->state; +#if defined(CONFIG_AVM_SIMPLE_PROFILING) + avm_simple_profiling_sched(); +#endif/*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ vtime_task_switch(prev); perf_event_task_sched_in(prev, current); finish_lock_switch(rq, prev); finish_arch_post_lock_switch(); + + fire_sched_in_preempt_notifiers(current); if (mm) mmdrop(mm); @@ -2936,16 +2947,6 @@ } #endif -notrace unsigned long get_parent_ip(unsigned long addr) -{ - if (in_lock_functions(addr)) { - addr = CALLER_ADDR2; - if (in_lock_functions(addr)) - addr = CALLER_ADDR3; - } - return addr; -} - #if defined(CONFIG_PREEMPT) && (defined(CONFIG_DEBUG_PREEMPT) || \ defined(CONFIG_PREEMPT_TRACER)) @@ -2967,7 +2968,7 @@ PREEMPT_MASK - 10); #endif if (preempt_count() == val) { - unsigned long ip = get_parent_ip(CALLER_ADDR1); + unsigned long ip = get_lock_parent_ip(); #ifdef CONFIG_DEBUG_PREEMPT current->preempt_disable_ip = ip; #endif @@ -2994,7 +2995,7 @@ #endif if (preempt_count() == val) - trace_preempt_on(CALLER_ADDR0, get_parent_ip(CALLER_ADDR1)); + trace_preempt_on(CALLER_ADDR0, get_lock_parent_ip()); __preempt_count_sub(val); } EXPORT_SYMBOL(preempt_count_sub); @@ -7678,6 +7679,8 @@ print_irqtrace_events(current); #ifdef CONFIG_DEBUG_PREEMPT if (!preempt_count_equals(preempt_offset)) { + pr_err("preempt_count() = %d; rcu_preempt_depth() = %d; preempt_offset = %d\n", preempt_count(), + rcu_preempt_depth(), preempt_offset); pr_err("Preemption disabled at:"); print_ip_sym(current->preempt_disable_ip); pr_cont("\n");