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);
  47int setup_profiling_timer(unsigned int multiplier);
  48
  49/*
  50 * Add multiple profiler hits to a given address:
  51 */
  52void profile_hits(int type, void *ip, unsigned int nr_hits);
  53
  54/*
  55 * Single profiler hit:
  56 */
  57static inline void profile_hit(int type, void *ip)
  58{
  59        /*
  60         * Speedup for the common (no profiling enabled) case:
  61         */
  62        if (unlikely(prof_on == type))
  63                profile_hits(type, ip, 1);
  64}
  65
  66struct task_struct;
  67struct mm_struct;
  68
  69/* task is in do_exit() */
  70void profile_task_exit(struct task_struct * task);
  71
  72/* task is dead, free task struct ? Returns 1 if
  73 * the task was taken, 0 if the task should be freed.
  74 */
  75int profile_handoff_task(struct task_struct * task);
  76
  77/* sys_munmap */
  78void profile_munmap(unsigned long addr);
  79
  80int task_handoff_register(struct notifier_block * n);
  81int task_handoff_unregister(struct notifier_block * n);
  82
  83int profile_event_register(enum profile_type, struct notifier_block * n);
  84int profile_event_unregister(enum profile_type, struct notifier_block * n);
  85
  86struct pt_regs;
  87
  88#else
  89
  90#define prof_on 0
  91
  92static inline int profile_init(void)
  93{
  94        return 0;
  95}
  96
  97static inline void profile_tick(int type)
  98{
  99        return;
 100}
 101
 102static inline void profile_hits(int type, void *ip, unsigned int nr_hits)
 103{
 104        return;
 105}
 106
 107static inline void profile_hit(int type, void *ip)
 108{
 109        return;
 110}
 111
 112static inline int task_handoff_register(struct notifier_block * n)
 113{
 114        return -ENOSYS;
 115}
 116
 117static inline int task_handoff_unregister(struct notifier_block * n)
 118{
 119        return -ENOSYS;
 120}
 121
 122static inline int profile_event_register(enum profile_type t, struct notifier_block * n)
 123{
 124        return -ENOSYS;
 125}
 126
 127static inline int profile_event_unregister(enum profile_type t, struct notifier_block * n)
 128{
 129        return -ENOSYS;
 130}
 131
 132#define profile_task_exit(a) do { } while (0)
 133#define profile_handoff_task(a) (0)
 134#define profile_munmap(a) do { } while (0)
 135
 136#endif /* CONFIG_PROFILING */
 137
 138#endif /* _LINUX_PROFILE_H */
 139