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