1#ifndef _LINUX_PROFILE_H
2#define _LINUX_PROFILE_H
3
4#include <linux/kernel.h>
5#include <linux/init.h>
6#include <linux/cpumask.h>
7#include <linux/cache.h>
8
9#include <asm/errno.h>
10
11extern int prof_on __read_mostly;
12
13#define CPU_PROFILING 1
14#define SCHED_PROFILING 2
15#define SLEEP_PROFILING 3
16#define KVM_PROFILING 4
17
18struct proc_dir_entry;
19struct pt_regs;
20struct notifier_block;
21
22
23void __init profile_init(void);
24void profile_tick(int);
25
26
27
28
29void profile_hits(int, void *ip, unsigned int nr_hits);
30
31
32
33
34static inline void profile_hit(int type, void *ip)
35{
36
37
38
39 if (unlikely(prof_on == type))
40 profile_hits(type, ip, 1);
41}
42
43#ifdef CONFIG_PROC_FS
44void create_prof_cpu_mask(struct proc_dir_entry *);
45#else
46#define create_prof_cpu_mask(x) do { (void)(x); } while (0)
47#endif
48
49enum profile_type {
50 PROFILE_TASK_EXIT,
51 PROFILE_MUNMAP
52};
53
54#ifdef CONFIG_PROFILING
55
56struct task_struct;
57struct mm_struct;
58
59
60void profile_task_exit(struct task_struct * task);
61
62
63
64
65int profile_handoff_task(struct task_struct * task);
66
67
68void profile_munmap(unsigned long addr);
69
70int task_handoff_register(struct notifier_block * n);
71int task_handoff_unregister(struct notifier_block * n);
72
73int profile_event_register(enum profile_type, struct notifier_block * n);
74int profile_event_unregister(enum profile_type, struct notifier_block * n);
75
76int register_timer_hook(int (*hook)(struct pt_regs *));
77void unregister_timer_hook(int (*hook)(struct pt_regs *));
78
79struct pt_regs;
80
81#else
82
83static inline int task_handoff_register(struct notifier_block * n)
84{
85 return -ENOSYS;
86}
87
88static inline int task_handoff_unregister(struct notifier_block * n)
89{
90 return -ENOSYS;
91}
92
93static inline int profile_event_register(enum profile_type t, struct notifier_block * n)
94{
95 return -ENOSYS;
96}
97
98static inline int profile_event_unregister(enum profile_type t, struct notifier_block * n)
99{
100 return -ENOSYS;
101}
102
103#define profile_task_exit(a) do { } while (0)
104#define profile_handoff_task(a) (0)
105#define profile_munmap(a) do { } while (0)
106
107static inline int register_timer_hook(int (*hook)(struct pt_regs *))
108{
109 return -ENOSYS;
110}
111
112static inline void unregister_timer_hook(int (*hook)(struct pt_regs *))
113{
114 return;
115}
116
117#endif
118
119#endif
120