Root/
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 | |
11 | #define CPU_PROFILING 1 |
12 | #define SCHED_PROFILING 2 |
13 | #define SLEEP_PROFILING 3 |
14 | #define KVM_PROFILING 4 |
15 | |
16 | struct proc_dir_entry; |
17 | struct pt_regs; |
18 | struct notifier_block; |
19 | |
20 | #if defined(CONFIG_PROFILING) && defined(CONFIG_PROC_FS) |
21 | void create_prof_cpu_mask(void); |
22 | int create_proc_profile(void); |
23 | #else |
24 | static inline void create_prof_cpu_mask(void) |
25 | { |
26 | } |
27 | |
28 | static inline int create_proc_profile(void) |
29 | { |
30 | return 0; |
31 | } |
32 | #endif |
33 | |
34 | enum profile_type { |
35 | PROFILE_TASK_EXIT, |
36 | PROFILE_MUNMAP |
37 | }; |
38 | |
39 | #ifdef CONFIG_PROFILING |
40 | |
41 | extern int prof_on __read_mostly; |
42 | |
43 | /* init basic kernel profiler */ |
44 | int profile_init(void); |
45 | int profile_setup(char *str); |
46 | void profile_tick(int type); |
47 | |
48 | /* |
49 | * Add multiple profiler hits to a given address: |
50 | */ |
51 | void profile_hits(int type, void *ip, unsigned int nr_hits); |
52 | |
53 | /* |
54 | * Single profiler hit: |
55 | */ |
56 | static inline void profile_hit(int type, void *ip) |
57 | { |
58 | /* |
59 | * Speedup for the common (no profiling enabled) case: |
60 | */ |
61 | if (unlikely(prof_on == type)) |
62 | profile_hits(type, ip, 1); |
63 | } |
64 | |
65 | struct task_struct; |
66 | struct mm_struct; |
67 | |
68 | /* task is in do_exit() */ |
69 | void profile_task_exit(struct task_struct * task); |
70 | |
71 | /* task is dead, free task struct ? Returns 1 if |
72 | * the task was taken, 0 if the task should be freed. |
73 | */ |
74 | int profile_handoff_task(struct task_struct * task); |
75 | |
76 | /* sys_munmap */ |
77 | void profile_munmap(unsigned long addr); |
78 | |
79 | int task_handoff_register(struct notifier_block * n); |
80 | int task_handoff_unregister(struct notifier_block * n); |
81 | |
82 | int profile_event_register(enum profile_type, struct notifier_block * n); |
83 | int profile_event_unregister(enum profile_type, struct notifier_block * n); |
84 | |
85 | struct pt_regs; |
86 | |
87 | #else |
88 | |
89 | #define prof_on 0 |
90 | |
91 | static inline int profile_init(void) |
92 | { |
93 | return 0; |
94 | } |
95 | |
96 | static inline void profile_tick(int type) |
97 | { |
98 | return; |
99 | } |
100 | |
101 | static inline void profile_hits(int type, void *ip, unsigned int nr_hits) |
102 | { |
103 | return; |
104 | } |
105 | |
106 | static inline void profile_hit(int type, void *ip) |
107 | { |
108 | return; |
109 | } |
110 | |
111 | static inline int task_handoff_register(struct notifier_block * n) |
112 | { |
113 | return -ENOSYS; |
114 | } |
115 | |
116 | static inline int task_handoff_unregister(struct notifier_block * n) |
117 | { |
118 | return -ENOSYS; |
119 | } |
120 | |
121 | static inline int profile_event_register(enum profile_type t, struct notifier_block * n) |
122 | { |
123 | return -ENOSYS; |
124 | } |
125 | |
126 | static inline int profile_event_unregister(enum profile_type t, struct notifier_block * n) |
127 | { |
128 | return -ENOSYS; |
129 | } |
130 | |
131 | #define profile_task_exit(a) do { } while (0) |
132 | #define profile_handoff_task(a) (0) |
133 | #define profile_munmap(a) do { } while (0) |
134 | |
135 | #endif /* CONFIG_PROFILING */ |
136 | |
137 | #endif /* _LINUX_PROFILE_H */ |
138 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9