Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / include / linux / profile.h
index 7593cb2..1f2fea6 100644 (file)
@@ -6,80 +6,96 @@
 #include <linux/kernel.h>
 #include <linux/config.h>
 #include <linux/init.h>
+#include <linux/cpumask.h>
 #include <asm/errno.h>
 
-/* parse command line */
-int __init profile_setup(char * str);
+#define CPU_PROFILING  1
+#define SCHED_PROFILING        2
+
+struct proc_dir_entry;
+struct pt_regs;
+struct notifier_block;
 
 /* init basic kernel profiler */
 void __init profile_init(void);
-
-extern unsigned int * prof_buffer;
-extern unsigned long prof_len;
-extern unsigned long prof_shift;
-extern int prof_on;
-
+void profile_tick(int, struct pt_regs *);
+void profile_hit(int, void *);
+#ifdef CONFIG_PROC_FS
+void create_prof_cpu_mask(struct proc_dir_entry *);
+#else
+#define create_prof_cpu_mask(x)                        do { (void)(x); } while (0)
+#endif
 
 enum profile_type {
-       EXIT_TASK,
-       EXIT_MMAP,
-       EXEC_UNMAP
+       PROFILE_TASK_EXIT,
+       PROFILE_MUNMAP
 };
 
 #ifdef CONFIG_PROFILING
 
-struct notifier_block;
 struct task_struct;
 struct mm_struct;
 
 /* task is in do_exit() */
-void profile_exit_task(struct task_struct * task);
+void profile_task_exit(struct task_struct * task);
 
-/* change of vma mappings */
-void profile_exec_unmap(struct mm_struct * mm);
+/* task is dead, free task struct ? Returns 1 if
+ * the task was taken, 0 if the task should be freed.
+ */
+int profile_handoff_task(struct task_struct * task);
 
-/* exit of all vmas for a task */
-void profile_exit_mmap(struct mm_struct * mm);
+/* sys_munmap */
+void profile_munmap(unsigned long addr);
 
-int profile_event_register(enum profile_type, struct notifier_block * n);
+int task_handoff_register(struct notifier_block * n);
+int task_handoff_unregister(struct notifier_block * n);
 
+int profile_event_register(enum profile_type, struct notifier_block * n);
 int profile_event_unregister(enum profile_type, struct notifier_block * n);
 
-int register_profile_notifier(struct notifier_block * nb);
-int unregister_profile_notifier(struct notifier_block * nb);
+int register_timer_hook(int (*hook)(struct pt_regs *));
+void unregister_timer_hook(int (*hook)(struct pt_regs *));
 
-struct pt_regs;
+/* Timer based profiling hook */
+extern int (*timer_hook)(struct pt_regs *);
 
-/* profiling hook activated on each timer interrupt */
-void profile_hook(struct pt_regs * regs);
+struct pt_regs;
 
 #else
 
-static inline int profile_event_register(enum profile_type t, struct notifier_block * n)
+static inline int task_handoff_register(struct notifier_block * n)
 {
        return -ENOSYS;
 }
 
-static inline int profile_event_unregister(enum profile_type t, struct notifier_block * n)
+static inline int task_handoff_unregister(struct notifier_block * n)
 {
        return -ENOSYS;
 }
 
-#define profile_exit_task(a) do { } while (0)
-#define profile_exec_unmap(a) do { } while (0)
-#define profile_exit_mmap(a) do { } while (0)
+static inline int profile_event_register(enum profile_type t, struct notifier_block * n)
+{
+       return -ENOSYS;
+}
 
-static inline int register_profile_notifier(struct notifier_block * nb)
+static inline int profile_event_unregister(enum profile_type t, struct notifier_block * n)
 {
        return -ENOSYS;
 }
 
-static inline int unregister_profile_notifier(struct notifier_block * nb)
+#define profile_task_exit(a) do { } while (0)
+#define profile_handoff_task(a) (0)
+#define profile_munmap(a) do { } while (0)
+
+static inline int register_timer_hook(int (*hook)(struct pt_regs *))
 {
        return -ENOSYS;
 }
 
-#define profile_hook(regs) do { } while (0)
+static inline void unregister_timer_hook(int (*hook)(struct pt_regs *))
+{
+       return;
+}
 
 #endif /* CONFIG_PROFILING */