linux/include/linux/profile.h
<<
>>
Prefs
   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
  16struct proc_dir_entry;
  17struct pt_regs;
  18struct notifier_block;
  19
  20#if defined(CONFIG_PROFILING) && defined(CONFIG_PROC_FS)
  21void create_prof_cpu_mask(void);
  22int create_proc_profile(void);
  23#else
  24static inline void create_prof_cpu_mask(void)
  25{
  26}
  27
  28static inline int create_proc_profile(void)
  29{
  30        return 0;
  31}
  32#endif
  33
  34enum profile_type {
  35        PROFILE_TASK_EXIT,
  36        PROFILE_MUNMAP
  37};
  38
  39#ifdef CONFIG_PROFILING
  40
  41extern int prof_on __read_mostly;
  42
  43/* init basic kernel profiler */
  44int profile_init(void);
  45int profile_setup(char *str);
  46void profile_tick(int type);
  47
  48/*
  49 * Add multiple profiler hits to a given address:
  50 */
  51void profile_hits(int type, void *ip, unsigned int nr_hits);
  52
  53/*
  54 * Single profiler hit:
  55 */
  56static 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
  65struct task_struct;
  66struct mm_struct;
  67
  68/* task is in do_exit() */
  69void 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 */
  74int profile_handoff_task(struct task_struct * task);
  75
  76/* sys_munmap */
  77void profile_munmap(unsigned long addr);
  78
  79int task_handoff_register(struct notifier_block * n);
  80int task_handoff_unregister(struct notifier_block * n);
  81
  82int profile_event_register(enum profile_type, struct notifier_block * n);
  83int profile_event_unregister(enum profile_type, struct notifier_block * n);
  84
  85struct pt_regs;
  86
  87#else
  88
  89#define prof_on 0
  90
  91static inline int profile_init(void)
  92{
  93        return 0;
  94}
  95
  96static inline void profile_tick(int type)
  97{
  98        return;
  99}
 100
 101static inline void profile_hits(int type, void *ip, unsigned int nr_hits)
 102{
 103        return;
 104}
 105
 106static inline void profile_hit(int type, void *ip)
 107{
 108        return;
 109}
 110
 111static inline int task_handoff_register(struct notifier_block * n)
 112{
 113        return -ENOSYS;
 114}
 115
 116static inline int task_handoff_unregister(struct notifier_block * n)
 117{
 118        return -ENOSYS;
 119}
 120
 121static inline int profile_event_register(enum profile_type t, struct notifier_block * n)
 122{
 123        return -ENOSYS;
 124}
 125
 126static 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