linux/include/linux/profile.h
<<
>>
Prefs
   1#ifndef _LINUX_PROFILE_H
   2#define _LINUX_PROFILE_H
   3
   4#ifdef __KERNEL__
   5
   6#include <linux/kernel.h>
   7#include <linux/init.h>
   8#include <linux/cpumask.h>
   9#include <linux/cache.h>
  10
  11#include <asm/errno.h>
  12
  13extern int prof_on __read_mostly;
  14
  15#define CPU_PROFILING   1
  16#define SCHED_PROFILING 2
  17#define SLEEP_PROFILING 3
  18#define KVM_PROFILING   4
  19
  20struct proc_dir_entry;
  21struct pt_regs;
  22struct notifier_block;
  23
  24/* init basic kernel profiler */
  25void __init profile_init(void);
  26void profile_tick(int);
  27
  28/*
  29 * Add multiple profiler hits to a given address:
  30 */
  31void profile_hits(int, void *ip, unsigned int nr_hits);
  32
  33/*
  34 * Single profiler hit:
  35 */
  36static inline void profile_hit(int type, void *ip)
  37{
  38        /*
  39         * Speedup for the common (no profiling enabled) case:
  40         */
  41        if (unlikely(prof_on == type))
  42                profile_hits(type, ip, 1);
  43}
  44
  45#ifdef CONFIG_PROC_FS
  46void create_prof_cpu_mask(struct proc_dir_entry *);
  47#else
  48#define create_prof_cpu_mask(x)                 do { (void)(x); } while (0)
  49#endif
  50
  51enum profile_type {
  52        PROFILE_TASK_EXIT,
  53        PROFILE_MUNMAP
  54};
  55
  56#ifdef CONFIG_PROFILING
  57
  58struct task_struct;
  59struct mm_struct;
  60
  61/* task is in do_exit() */
  62void profile_task_exit(struct task_struct * task);
  63
  64/* task is dead, free task struct ? Returns 1 if
  65 * the task was taken, 0 if the task should be freed.
  66 */
  67int profile_handoff_task(struct task_struct * task);
  68
  69/* sys_munmap */
  70void profile_munmap(unsigned long addr);
  71
  72int task_handoff_register(struct notifier_block * n);
  73int task_handoff_unregister(struct notifier_block * n);
  74
  75int profile_event_register(enum profile_type, struct notifier_block * n);
  76int profile_event_unregister(enum profile_type, struct notifier_block * n);
  77
  78int register_timer_hook(int (*hook)(struct pt_regs *));
  79void unregister_timer_hook(int (*hook)(struct pt_regs *));
  80
  81struct pt_regs;
  82
  83#else
  84
  85static inline int task_handoff_register(struct notifier_block * n)
  86{
  87        return -ENOSYS;
  88}
  89
  90static inline int task_handoff_unregister(struct notifier_block * n)
  91{
  92        return -ENOSYS;
  93}
  94
  95static inline int profile_event_register(enum profile_type t, struct notifier_block * n)
  96{
  97        return -ENOSYS;
  98}
  99
 100static inline int profile_event_unregister(enum profile_type t, struct notifier_block * n)
 101{
 102        return -ENOSYS;
 103}
 104
 105#define profile_task_exit(a) do { } while (0)
 106#define profile_handoff_task(a) (0)
 107#define profile_munmap(a) do { } while (0)
 108
 109static inline int register_timer_hook(int (*hook)(struct pt_regs *))
 110{
 111        return -ENOSYS;
 112}
 113
 114static inline void unregister_timer_hook(int (*hook)(struct pt_regs *))
 115{
 116        return;
 117}
 118
 119#endif /* CONFIG_PROFILING */
 120
 121#endif /* __KERNEL__ */
 122
 123#endif /* _LINUX_PROFILE_H */
 124
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.