11da177e4SLinus Torvalds #ifndef _LINUX_PROFILE_H 21da177e4SLinus Torvalds #define _LINUX_PROFILE_H 31da177e4SLinus Torvalds 41da177e4SLinus Torvalds #ifdef __KERNEL__ 51da177e4SLinus Torvalds 61da177e4SLinus Torvalds #include <linux/kernel.h> 71da177e4SLinus Torvalds #include <linux/config.h> 81da177e4SLinus Torvalds #include <linux/init.h> 91da177e4SLinus Torvalds #include <linux/cpumask.h> 101da177e4SLinus Torvalds #include <asm/errno.h> 111da177e4SLinus Torvalds 121da177e4SLinus Torvalds #define CPU_PROFILING 1 131da177e4SLinus Torvalds #define SCHED_PROFILING 2 141da177e4SLinus Torvalds 151da177e4SLinus Torvalds struct proc_dir_entry; 161da177e4SLinus Torvalds struct pt_regs; 17*772a0dc5SAndrew Morton struct notifier_block; 181da177e4SLinus Torvalds 191da177e4SLinus Torvalds /* init basic kernel profiler */ 201da177e4SLinus Torvalds void __init profile_init(void); 211da177e4SLinus Torvalds void profile_tick(int, struct pt_regs *); 221da177e4SLinus Torvalds void profile_hit(int, void *); 231da177e4SLinus Torvalds #ifdef CONFIG_PROC_FS 241da177e4SLinus Torvalds void create_prof_cpu_mask(struct proc_dir_entry *); 251da177e4SLinus Torvalds #else 261da177e4SLinus Torvalds #define create_prof_cpu_mask(x) do { (void)(x); } while (0) 271da177e4SLinus Torvalds #endif 281da177e4SLinus Torvalds 291da177e4SLinus Torvalds enum profile_type { 301da177e4SLinus Torvalds PROFILE_TASK_EXIT, 311da177e4SLinus Torvalds PROFILE_MUNMAP 321da177e4SLinus Torvalds }; 331da177e4SLinus Torvalds 341da177e4SLinus Torvalds #ifdef CONFIG_PROFILING 351da177e4SLinus Torvalds 361da177e4SLinus Torvalds struct task_struct; 371da177e4SLinus Torvalds struct mm_struct; 381da177e4SLinus Torvalds 391da177e4SLinus Torvalds /* task is in do_exit() */ 401da177e4SLinus Torvalds void profile_task_exit(struct task_struct * task); 411da177e4SLinus Torvalds 421da177e4SLinus Torvalds /* task is dead, free task struct ? Returns 1 if 431da177e4SLinus Torvalds * the task was taken, 0 if the task should be freed. 441da177e4SLinus Torvalds */ 451da177e4SLinus Torvalds int profile_handoff_task(struct task_struct * task); 461da177e4SLinus Torvalds 471da177e4SLinus Torvalds /* sys_munmap */ 481da177e4SLinus Torvalds void profile_munmap(unsigned long addr); 491da177e4SLinus Torvalds 501da177e4SLinus Torvalds int task_handoff_register(struct notifier_block * n); 511da177e4SLinus Torvalds int task_handoff_unregister(struct notifier_block * n); 521da177e4SLinus Torvalds 531da177e4SLinus Torvalds int profile_event_register(enum profile_type, struct notifier_block * n); 541da177e4SLinus Torvalds int profile_event_unregister(enum profile_type, struct notifier_block * n); 551da177e4SLinus Torvalds 561da177e4SLinus Torvalds int register_timer_hook(int (*hook)(struct pt_regs *)); 571da177e4SLinus Torvalds void unregister_timer_hook(int (*hook)(struct pt_regs *)); 581da177e4SLinus Torvalds 591da177e4SLinus Torvalds /* Timer based profiling hook */ 601da177e4SLinus Torvalds extern int (*timer_hook)(struct pt_regs *); 611da177e4SLinus Torvalds 621da177e4SLinus Torvalds struct pt_regs; 631da177e4SLinus Torvalds 641da177e4SLinus Torvalds #else 651da177e4SLinus Torvalds 661da177e4SLinus Torvalds static inline int task_handoff_register(struct notifier_block * n) 671da177e4SLinus Torvalds { 681da177e4SLinus Torvalds return -ENOSYS; 691da177e4SLinus Torvalds } 701da177e4SLinus Torvalds 711da177e4SLinus Torvalds static inline int task_handoff_unregister(struct notifier_block * n) 721da177e4SLinus Torvalds { 731da177e4SLinus Torvalds return -ENOSYS; 741da177e4SLinus Torvalds } 751da177e4SLinus Torvalds 761da177e4SLinus Torvalds static inline int profile_event_register(enum profile_type t, struct notifier_block * n) 771da177e4SLinus Torvalds { 781da177e4SLinus Torvalds return -ENOSYS; 791da177e4SLinus Torvalds } 801da177e4SLinus Torvalds 811da177e4SLinus Torvalds static inline int profile_event_unregister(enum profile_type t, struct notifier_block * n) 821da177e4SLinus Torvalds { 831da177e4SLinus Torvalds return -ENOSYS; 841da177e4SLinus Torvalds } 851da177e4SLinus Torvalds 861da177e4SLinus Torvalds #define profile_task_exit(a) do { } while (0) 871da177e4SLinus Torvalds #define profile_handoff_task(a) (0) 881da177e4SLinus Torvalds #define profile_munmap(a) do { } while (0) 891da177e4SLinus Torvalds 901da177e4SLinus Torvalds static inline int register_timer_hook(int (*hook)(struct pt_regs *)) 911da177e4SLinus Torvalds { 921da177e4SLinus Torvalds return -ENOSYS; 931da177e4SLinus Torvalds } 941da177e4SLinus Torvalds 951da177e4SLinus Torvalds static inline void unregister_timer_hook(int (*hook)(struct pt_regs *)) 961da177e4SLinus Torvalds { 971da177e4SLinus Torvalds return; 981da177e4SLinus Torvalds } 991da177e4SLinus Torvalds 1001da177e4SLinus Torvalds #endif /* CONFIG_PROFILING */ 1011da177e4SLinus Torvalds 1021da177e4SLinus Torvalds #endif /* __KERNEL__ */ 1031da177e4SLinus Torvalds 1041da177e4SLinus Torvalds #endif /* _LINUX_PROFILE_H */ 105