at v2.6.25 2.6 kB view raw
1#ifndef _LINUX_PROFILE_H 2#define _LINUX_PROFILE_H 3 4#ifdef __KERNEL__ 5 6#include <linux/kernel.h> 7#include <linux/init.h> 8#include <linux/cpumask.h> 9#include <linux/cache.h> 10 11#include <asm/errno.h> 12 13extern int prof_on __read_mostly; 14 15#define CPU_PROFILING 1 16#define SCHED_PROFILING 2 17#define SLEEP_PROFILING 3 18#define KVM_PROFILING 4 19 20struct proc_dir_entry; 21struct pt_regs; 22struct notifier_block; 23 24/* init basic kernel profiler */ 25void __init profile_init(void); 26void profile_tick(int); 27 28/* 29 * Add multiple profiler hits to a given address: 30 */ 31void profile_hits(int, void *ip, unsigned int nr_hits); 32 33/* 34 * Single profiler hit: 35 */ 36static inline void profile_hit(int type, void *ip) 37{ 38 /* 39 * Speedup for the common (no profiling enabled) case: 40 */ 41 if (unlikely(prof_on == type)) 42 profile_hits(type, ip, 1); 43} 44 45#ifdef CONFIG_PROC_FS 46void create_prof_cpu_mask(struct proc_dir_entry *); 47#else 48#define create_prof_cpu_mask(x) do { (void)(x); } while (0) 49#endif 50 51enum profile_type { 52 PROFILE_TASK_EXIT, 53 PROFILE_MUNMAP 54}; 55 56#ifdef CONFIG_PROFILING 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 85static inline int task_handoff_register(struct notifier_block * n) 86{ 87 return -ENOSYS; 88} 89 90static inline int task_handoff_unregister(struct notifier_block * n) 91{ 92 return -ENOSYS; 93} 94 95static inline int profile_event_register(enum profile_type t, struct notifier_block * n) 96{ 97 return -ENOSYS; 98} 99 100static inline int profile_event_unregister(enum profile_type t, struct notifier_block * n) 101{ 102 return -ENOSYS; 103} 104 105#define profile_task_exit(a) do { } while (0) 106#define profile_handoff_task(a) (0) 107#define profile_munmap(a) do { } while (0) 108 109static inline int register_timer_hook(int (*hook)(struct pt_regs *)) 110{ 111 return -ENOSYS; 112} 113 114static inline void unregister_timer_hook(int (*hook)(struct pt_regs *)) 115{ 116 return; 117} 118 119#endif /* CONFIG_PROFILING */ 120 121#endif /* __KERNEL__ */ 122 123#endif /* _LINUX_PROFILE_H */