File: /Users/paulross/dev/linux/linux-3.13/include/linux/profile.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

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