at v2.6.27 2.9 kB view raw
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 16struct proc_dir_entry; 17struct pt_regs; 18struct notifier_block; 19 20#if defined(CONFIG_PROFILING) && defined(CONFIG_PROC_FS) 21void create_prof_cpu_mask(struct proc_dir_entry *de); 22#else 23static inline void create_prof_cpu_mask(struct proc_dir_entry *de) 24{ 25} 26#endif 27 28enum profile_type { 29 PROFILE_TASK_EXIT, 30 PROFILE_MUNMAP 31}; 32 33#ifdef CONFIG_PROFILING 34 35extern int prof_on __read_mostly; 36 37/* init basic kernel profiler */ 38void __init profile_init(void); 39void profile_tick(int type); 40 41/* 42 * Add multiple profiler hits to a given address: 43 */ 44void profile_hits(int type, void *ip, unsigned int nr_hits); 45 46/* 47 * Single profiler hit: 48 */ 49static inline void profile_hit(int type, void *ip) 50{ 51 /* 52 * Speedup for the common (no profiling enabled) case: 53 */ 54 if (unlikely(prof_on == type)) 55 profile_hits(type, ip, 1); 56} 57 58struct task_struct; 59struct mm_struct; 60 61/* task is in do_exit() */ 62void profile_task_exit(struct task_struct * task); 63 64/* task is dead, free task struct ? Returns 1 if 65 * the task was taken, 0 if the task should be freed. 66 */ 67int profile_handoff_task(struct task_struct * task); 68 69/* sys_munmap */ 70void profile_munmap(unsigned long addr); 71 72int task_handoff_register(struct notifier_block * n); 73int task_handoff_unregister(struct notifier_block * n); 74 75int profile_event_register(enum profile_type, struct notifier_block * n); 76int profile_event_unregister(enum profile_type, struct notifier_block * n); 77 78int register_timer_hook(int (*hook)(struct pt_regs *)); 79void unregister_timer_hook(int (*hook)(struct pt_regs *)); 80 81struct pt_regs; 82 83#else 84 85#define prof_on 0 86 87static inline void profile_init(void) 88{ 89 return; 90} 91 92static inline void profile_tick(int type) 93{ 94 return; 95} 96 97static inline void profile_hits(int type, void *ip, unsigned int nr_hits) 98{ 99 return; 100} 101 102static inline void profile_hit(int type, void *ip) 103{ 104 return; 105} 106 107static inline int task_handoff_register(struct notifier_block * n) 108{ 109 return -ENOSYS; 110} 111 112static inline int task_handoff_unregister(struct notifier_block * n) 113{ 114 return -ENOSYS; 115} 116 117static inline int profile_event_register(enum profile_type t, struct notifier_block * n) 118{ 119 return -ENOSYS; 120} 121 122static inline int profile_event_unregister(enum profile_type t, struct notifier_block * n) 123{ 124 return -ENOSYS; 125} 126 127#define profile_task_exit(a) do { } while (0) 128#define profile_handoff_task(a) (0) 129#define profile_munmap(a) do { } while (0) 130 131static inline int register_timer_hook(int (*hook)(struct pt_regs *)) 132{ 133 return -ENOSYS; 134} 135 136static inline void unregister_timer_hook(int (*hook)(struct pt_regs *)) 137{ 138 return; 139} 140 141#endif /* CONFIG_PROFILING */ 142 143#endif /* _LINUX_PROFILE_H */