xref: /linux/include/linux/profile.h (revision b88f55389ad27f05ed84af9e1026aa64dbfabc9a)
1*b2441318SGreg 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>
7ece8a684SIngo Molnar #include <linux/cache.h>
8ece8a684SIngo Molnar 
91da177e4SLinus Torvalds #include <asm/errno.h>
101da177e4SLinus Torvalds 
111da177e4SLinus Torvalds #define CPU_PROFILING	1
121da177e4SLinus Torvalds #define SCHED_PROFILING	2
1307031e14SIngo Molnar #define KVM_PROFILING	4
141da177e4SLinus Torvalds 
151da177e4SLinus Torvalds struct proc_dir_entry;
16772a0dc5SAndrew Morton struct notifier_block;
171da177e4SLinus Torvalds 
18b03f6489SAdrian Bunk #if defined(CONFIG_PROFILING) && defined(CONFIG_PROC_FS)
1966f50ee3SPaul Mundt int create_proc_profile(void);
20b03f6489SAdrian Bunk #else
create_proc_profile(void)2166f50ee3SPaul Mundt static inline int create_proc_profile(void)
2266f50ee3SPaul Mundt {
2366f50ee3SPaul Mundt 	return 0;
2466f50ee3SPaul Mundt }
25b03f6489SAdrian Bunk #endif
26b03f6489SAdrian Bunk 
27b03f6489SAdrian Bunk #ifdef CONFIG_PROFILING
28b03f6489SAdrian Bunk 
29b03f6489SAdrian Bunk extern int prof_on __read_mostly;
30b03f6489SAdrian Bunk 
311da177e4SLinus Torvalds /* init basic kernel profiler */
3222b8ce94SDave Hansen int profile_init(void);
3322b8ce94SDave Hansen int profile_setup(char *str);
34b03f6489SAdrian Bunk void profile_tick(int type);
35d3091298SSam Ravnborg int setup_profiling_timer(unsigned int multiplier);
36ece8a684SIngo Molnar 
37ece8a684SIngo Molnar /*
38ece8a684SIngo Molnar  * Add multiple profiler hits to a given address:
39ece8a684SIngo Molnar  */
40b03f6489SAdrian Bunk void profile_hits(int type, void *ip, unsigned int nr_hits);
41ece8a684SIngo Molnar 
42ece8a684SIngo Molnar /*
43ece8a684SIngo Molnar  * Single profiler hit:
44ece8a684SIngo Molnar  */
profile_hit(int type,void * ip)45ece8a684SIngo Molnar static inline void profile_hit(int type, void *ip)
46ece8a684SIngo Molnar {
47ece8a684SIngo Molnar 	/*
48ece8a684SIngo Molnar 	 * Speedup for the common (no profiling enabled) case:
49ece8a684SIngo Molnar 	 */
50ece8a684SIngo Molnar 	if (unlikely(prof_on == type))
51ece8a684SIngo Molnar 		profile_hits(type, ip, 1);
52ece8a684SIngo Molnar }
53ece8a684SIngo Molnar 
541da177e4SLinus Torvalds struct task_struct;
551da177e4SLinus Torvalds struct mm_struct;
561da177e4SLinus Torvalds 
571da177e4SLinus Torvalds #else
581da177e4SLinus Torvalds 
59b03f6489SAdrian Bunk #define prof_on 0
60b03f6489SAdrian Bunk 
profile_init(void)6122b8ce94SDave Hansen static inline int profile_init(void)
62b03f6489SAdrian Bunk {
6322b8ce94SDave Hansen 	return 0;
64b03f6489SAdrian Bunk }
65b03f6489SAdrian Bunk 
profile_tick(int type)66b03f6489SAdrian Bunk static inline void profile_tick(int type)
67b03f6489SAdrian Bunk {
68b03f6489SAdrian Bunk 	return;
69b03f6489SAdrian Bunk }
70b03f6489SAdrian Bunk 
profile_hits(int type,void * ip,unsigned int nr_hits)71b03f6489SAdrian Bunk static inline void profile_hits(int type, void *ip, unsigned int nr_hits)
72b03f6489SAdrian Bunk {
73b03f6489SAdrian Bunk 	return;
74b03f6489SAdrian Bunk }
75b03f6489SAdrian Bunk 
profile_hit(int type,void * ip)76b03f6489SAdrian Bunk static inline void profile_hit(int type, void *ip)
77b03f6489SAdrian Bunk {
78b03f6489SAdrian Bunk 	return;
79b03f6489SAdrian Bunk }
80b03f6489SAdrian Bunk 
811da177e4SLinus Torvalds 
821da177e4SLinus Torvalds #endif /* CONFIG_PROFILING */
831da177e4SLinus Torvalds 
841da177e4SLinus Torvalds #endif /* _LINUX_PROFILE_H */
85