]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - include/linux/profile.h
Remove "#ifdef __KERNEL__" checks from unexported headers
[mirror_ubuntu-bionic-kernel.git] / include / linux / profile.h
CommitLineData
1da177e4
LT
1#ifndef _LINUX_PROFILE_H
2#define _LINUX_PROFILE_H
3
1da177e4 4#include <linux/kernel.h>
1da177e4
LT
5#include <linux/init.h>
6#include <linux/cpumask.h>
ece8a684
IM
7#include <linux/cache.h>
8
1da177e4
LT
9#include <asm/errno.h>
10
ece8a684
IM
11extern int prof_on __read_mostly;
12
1da177e4
LT
13#define CPU_PROFILING 1
14#define SCHED_PROFILING 2
ece8a684 15#define SLEEP_PROFILING 3
07031e14 16#define KVM_PROFILING 4
1da177e4
LT
17
18struct proc_dir_entry;
19struct pt_regs;
772a0dc5 20struct notifier_block;
1da177e4
LT
21
22/* init basic kernel profiler */
23void __init profile_init(void);
7d12e780 24void profile_tick(int);
ece8a684
IM
25
26/*
27 * Add multiple profiler hits to a given address:
28 */
29void profile_hits(int, void *ip, unsigned int nr_hits);
30
31/*
32 * Single profiler hit:
33 */
34static inline void profile_hit(int type, void *ip)
35{
36 /*
37 * Speedup for the common (no profiling enabled) case:
38 */
39 if (unlikely(prof_on == type))
40 profile_hits(type, ip, 1);
41}
42
1da177e4
LT
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
1da177e4
LT
56struct task_struct;
57struct mm_struct;
58
59/* task is in do_exit() */
60void profile_task_exit(struct task_struct * task);
61
62/* task is dead, free task struct ? Returns 1 if
63 * the task was taken, 0 if the task should be freed.
64 */
65int profile_handoff_task(struct task_struct * task);
66
67/* sys_munmap */
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
1da177e4
LT
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 /* CONFIG_PROFILING */
118
1da177e4 119#endif /* _LINUX_PROFILE_H */