xref: /openbmc/linux/include/linux/profile.h (revision 2873cd31)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds #ifndef _LINUX_PROFILE_H
31da177e4SLinus Torvalds #define _LINUX_PROFILE_H
41da177e4SLinus Torvalds 
51da177e4SLinus Torvalds #include <linux/kernel.h>
61da177e4SLinus Torvalds #include <linux/init.h>
71da177e4SLinus Torvalds #include <linux/cpumask.h>
8ece8a684SIngo Molnar #include <linux/cache.h>
9ece8a684SIngo Molnar 
101da177e4SLinus Torvalds #include <asm/errno.h>
111da177e4SLinus Torvalds 
121da177e4SLinus Torvalds #define CPU_PROFILING	1
131da177e4SLinus Torvalds #define SCHED_PROFILING	2
14ece8a684SIngo Molnar #define SLEEP_PROFILING	3
1507031e14SIngo Molnar #define KVM_PROFILING	4
161da177e4SLinus Torvalds 
171da177e4SLinus Torvalds struct proc_dir_entry;
18772a0dc5SAndrew Morton struct notifier_block;
191da177e4SLinus Torvalds 
20b03f6489SAdrian Bunk #if defined(CONFIG_PROFILING) && defined(CONFIG_PROC_FS)
21fbd387aeSAl Viro void create_prof_cpu_mask(void);
2266f50ee3SPaul Mundt int create_proc_profile(void);
23b03f6489SAdrian Bunk #else
create_prof_cpu_mask(void)24fbd387aeSAl Viro static inline void create_prof_cpu_mask(void)
25cebbd3fbSAndrew Morton {
26cebbd3fbSAndrew Morton }
2766f50ee3SPaul Mundt 
create_proc_profile(void)2866f50ee3SPaul Mundt static inline int create_proc_profile(void)
2966f50ee3SPaul Mundt {
3066f50ee3SPaul Mundt 	return 0;
3166f50ee3SPaul Mundt }
32b03f6489SAdrian Bunk #endif
33b03f6489SAdrian Bunk 
34b03f6489SAdrian Bunk #ifdef CONFIG_PROFILING
35b03f6489SAdrian Bunk 
36b03f6489SAdrian Bunk extern int prof_on __read_mostly;
37b03f6489SAdrian Bunk 
381da177e4SLinus Torvalds /* init basic kernel profiler */
3922b8ce94SDave Hansen int profile_init(void);
4022b8ce94SDave Hansen int profile_setup(char *str);
41b03f6489SAdrian Bunk void profile_tick(int type);
42d3091298SSam Ravnborg int setup_profiling_timer(unsigned int multiplier);
43ece8a684SIngo Molnar 
44ece8a684SIngo Molnar /*
45ece8a684SIngo Molnar  * Add multiple profiler hits to a given address:
46ece8a684SIngo Molnar  */
47b03f6489SAdrian Bunk void profile_hits(int type, void *ip, unsigned int nr_hits);
48ece8a684SIngo Molnar 
49ece8a684SIngo Molnar /*
50ece8a684SIngo Molnar  * Single profiler hit:
51ece8a684SIngo Molnar  */
profile_hit(int type,void * ip)52ece8a684SIngo Molnar static inline void profile_hit(int type, void *ip)
53ece8a684SIngo Molnar {
54ece8a684SIngo Molnar 	/*
55ece8a684SIngo Molnar 	 * Speedup for the common (no profiling enabled) case:
56ece8a684SIngo Molnar 	 */
57ece8a684SIngo Molnar 	if (unlikely(prof_on == type))
58ece8a684SIngo Molnar 		profile_hits(type, ip, 1);
59ece8a684SIngo Molnar }
60ece8a684SIngo Molnar 
611da177e4SLinus Torvalds struct task_struct;
621da177e4SLinus Torvalds struct mm_struct;
631da177e4SLinus Torvalds 
641da177e4SLinus Torvalds #else
651da177e4SLinus Torvalds 
66b03f6489SAdrian Bunk #define prof_on 0
67b03f6489SAdrian Bunk 
profile_init(void)6822b8ce94SDave Hansen static inline int profile_init(void)
69b03f6489SAdrian Bunk {
7022b8ce94SDave Hansen 	return 0;
71b03f6489SAdrian Bunk }
72b03f6489SAdrian Bunk 
profile_tick(int type)73b03f6489SAdrian Bunk static inline void profile_tick(int type)
74b03f6489SAdrian Bunk {
75b03f6489SAdrian Bunk 	return;
76b03f6489SAdrian Bunk }
77b03f6489SAdrian Bunk 
profile_hits(int type,void * ip,unsigned int nr_hits)78b03f6489SAdrian Bunk static inline void profile_hits(int type, void *ip, unsigned int nr_hits)
79b03f6489SAdrian Bunk {
80b03f6489SAdrian Bunk 	return;
81b03f6489SAdrian Bunk }
82b03f6489SAdrian Bunk 
profile_hit(int type,void * ip)83b03f6489SAdrian Bunk static inline void profile_hit(int type, void *ip)
84b03f6489SAdrian Bunk {
85b03f6489SAdrian Bunk 	return;
86b03f6489SAdrian Bunk }
87b03f6489SAdrian Bunk 
881da177e4SLinus Torvalds 
891da177e4SLinus Torvalds #endif /* CONFIG_PROFILING */
901da177e4SLinus Torvalds 
911da177e4SLinus Torvalds #endif /* _LINUX_PROFILE_H */
92