From 0a592c152a9cd57b2685a420d01f4cfe4912c00a Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Fri, 17 Feb 2006 15:44:55 +0000 Subject: more ifdef's to make it work with Red Hat Enterprise Linux 4's 2.6.9-based 2006-02-17 Bastien Nocera * configure.ac: * module/sysprof-module.c: (timer_notify), (sysprof_open), (sysprof_release): more ifdef's to make it work with Red Hat Enterprise Linux 4's 2.6.9-based kernel --- module/sysprof-module.c | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) (limited to 'module') diff --git a/module/sysprof-module.c b/module/sysprof-module.c index e0dff7f..d3ef07a 100644 --- a/module/sysprof-module.c +++ b/module/sysprof-module.c @@ -40,9 +40,15 @@ #include "sysprof-module.h" #include -#if (KERNEL_VERSION(2,6,11) > LINUX_VERSION_CODE) || (!CONFIG_PROFILING) -# error Sysprof needs a Linux 2.6.11 kernel or later, with profiling support compiled in. +#if (KERNEL_VERSION(2,6,9) > LINUX_VERSION_CODE) || (!CONFIG_PROFILING) +# error Sysprof needs a Linux 2.6.9 kernel or later, with profiling support compiled in. #endif + +#if (KERNEL_VERSION(2,6,11) > LINUX_VERSION_CODE) +#define OLD_PROFILE +#include +#endif + #include MODULE_LICENSE("GPL"); @@ -101,9 +107,16 @@ read_frame (void *frame_pointer, StackFrame *frame) return 0; } +#ifdef OLD_PROFILE +static int timer_notify(struct notifier_block * self, unsigned long val, void * data) +#else static int timer_notify (struct pt_regs *regs) +#endif { +#ifdef OLD_PROFILE + struct pt_regs * regs = (struct pt_regs *)data; +#endif void *frame_pointer; static int n_samples; SysprofStackTrace *trace = head; @@ -161,6 +174,14 @@ timer_notify (struct pt_regs *regs) return 0; } +#ifdef OLD_PROFILE +static struct notifier_block timer_notifier = { + .notifier_call = timer_notify, + NULL, + 0 +}; +#endif + static int sysprof_read(struct file *file, char *buffer, size_t count, loff_t *offset) { @@ -208,8 +229,13 @@ sysprof_open(struct inode *inode, struct file *file) { int retval = 0; - if (atomic_inc_return(&client_count) == 1) + if (atomic_inc_return(&client_count) == 1) { +#ifndef OLD_PROFILE retval = register_timer_hook (timer_notify); +#else + retval = register_profile_notifier (&timer_notifier); +#endif + } file->private_data = head; @@ -219,8 +245,13 @@ sysprof_open(struct inode *inode, struct file *file) static int sysprof_release(struct inode *inode, struct file *file) { - if (atomic_dec_return(&client_count) == 0) + if (atomic_dec_return(&client_count) == 0) { +#ifndef OLD_PROFILE unregister_timer_hook (timer_notify); +#else + unregister_profile_notifier (&timer_notifier); +#endif + } return 0; } -- cgit v1.2.3