at v2.6.26 2.5 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 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/* init basic kernel profiler */ 23void __init profile_init(void); 24void profile_tick(int); 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 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/* 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 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 119#endif /* _LINUX_PROFILE_H */