blob: 026969a5595c27909c29668d238d19afd903e55b [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001#ifndef _LINUX_PROFILE_H
2#define _LINUX_PROFILE_H
3
4#ifdef __KERNEL__
5
6#include <linux/kernel.h>
7#include <linux/config.h>
8#include <linux/init.h>
9#include <linux/cpumask.h>
10#include <asm/errno.h>
11
12#define CPU_PROFILING 1
13#define SCHED_PROFILING 2
14
15struct proc_dir_entry;
16struct pt_regs;
17
18/* init basic kernel profiler */
19void __init profile_init(void);
20void profile_tick(int, struct pt_regs *);
21void profile_hit(int, void *);
22#ifdef CONFIG_PROC_FS
23void create_prof_cpu_mask(struct proc_dir_entry *);
24#else
25#define create_prof_cpu_mask(x) do { (void)(x); } while (0)
26#endif
27
28enum profile_type {
29 PROFILE_TASK_EXIT,
30 PROFILE_MUNMAP
31};
32
33#ifdef CONFIG_PROFILING
34
35struct notifier_block;
36struct task_struct;
37struct mm_struct;
38
39/* task is in do_exit() */
40void profile_task_exit(struct task_struct * task);
41
42/* task is dead, free task struct ? Returns 1 if
43 * the task was taken, 0 if the task should be freed.
44 */
45int profile_handoff_task(struct task_struct * task);
46
47/* sys_munmap */
48void profile_munmap(unsigned long addr);
49
50int task_handoff_register(struct notifier_block * n);
51int task_handoff_unregister(struct notifier_block * n);
52
53int profile_event_register(enum profile_type, struct notifier_block * n);
54int profile_event_unregister(enum profile_type, struct notifier_block * n);
55
56int register_timer_hook(int (*hook)(struct pt_regs *));
57void unregister_timer_hook(int (*hook)(struct pt_regs *));
58
59/* Timer based profiling hook */
60extern int (*timer_hook)(struct pt_regs *);
61
62struct pt_regs;
63
64#else
65
66static inline int task_handoff_register(struct notifier_block * n)
67{
68 return -ENOSYS;
69}
70
71static inline int task_handoff_unregister(struct notifier_block * n)
72{
73 return -ENOSYS;
74}
75
76static inline int profile_event_register(enum profile_type t, struct notifier_block * n)
77{
78 return -ENOSYS;
79}
80
81static inline int profile_event_unregister(enum profile_type t, struct notifier_block * n)
82{
83 return -ENOSYS;
84}
85
86#define profile_task_exit(a) do { } while (0)
87#define profile_handoff_task(a) (0)
88#define profile_munmap(a) do { } while (0)
89
90static inline int register_timer_hook(int (*hook)(struct pt_regs *))
91{
92 return -ENOSYS;
93}
94
95static inline void unregister_timer_hook(int (*hook)(struct pt_regs *))
96{
97 return;
98}
99
100#endif /* CONFIG_PROFILING */
101
102#endif /* __KERNEL__ */
103
104#endif /* _LINUX_PROFILE_H */