1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _LINUX_PROFILE_H 3 #define _LINUX_PROFILE_H 4 5 #include <linux/kernel.h> 6 #include <linux/init.h> 7 #include <linux/cache.h> 8 9 #include <asm/errno.h> 10 11 #define CPU_PROFILING 1 12 #define SCHED_PROFILING 2 13 #define KVM_PROFILING 4 14 15 struct proc_dir_entry; 16 struct notifier_block; 17 18 #if defined(CONFIG_PROFILING) && defined(CONFIG_PROC_FS) 19 int create_proc_profile(void); 20 #else 21 static inline int create_proc_profile(void) 22 { 23 return 0; 24 } 25 #endif 26 27 #ifdef CONFIG_PROFILING 28 29 extern int prof_on __read_mostly; 30 31 /* init basic kernel profiler */ 32 int profile_init(void); 33 int profile_setup(char *str); 34 void profile_tick(int type); 35 int setup_profiling_timer(unsigned int multiplier); 36 37 /* 38 * Add multiple profiler hits to a given address: 39 */ 40 void profile_hits(int type, void *ip, unsigned int nr_hits); 41 42 /* 43 * Single profiler hit: 44 */ 45 static inline void profile_hit(int type, void *ip) 46 { 47 /* 48 * Speedup for the common (no profiling enabled) case: 49 */ 50 if (unlikely(prof_on == type)) 51 profile_hits(type, ip, 1); 52 } 53 54 struct task_struct; 55 struct mm_struct; 56 57 #else 58 59 #define prof_on 0 60 61 static inline int profile_init(void) 62 { 63 return 0; 64 } 65 66 static inline void profile_tick(int type) 67 { 68 return; 69 } 70 71 static inline void profile_hits(int type, void *ip, unsigned int nr_hits) 72 { 73 return; 74 } 75 76 static inline void profile_hit(int type, void *ip) 77 { 78 return; 79 } 80 81 82 #endif /* CONFIG_PROFILING */ 83 84 #endif /* _LINUX_PROFILE_H */ 85