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