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