/* $Id: compat.h,v 1.42.2.17 2009/01/23 17:01:02 mikpe Exp $ * Performance-monitoring counters driver. * Compatibility definitions for 2.6 kernels. * * Copyright (C) 1999-2009 Mikael Pettersson */ #include #include "cpumask.h" #define EXPORT_SYMBOL_mmu_cr4_features EXPORT_SYMBOL(mmu_cr4_features) /* Starting with 2.6.16-rc1, put_task_struct() uses an RCU callback __put_task_struct_cb() instead of the old __put_task_struct(). 2.6.16-rc6 dropped the EXPORT_SYMBOL() of __put_task_struct_cb(). 2.6.17-rc1 reverted to using __put_task_struct() again. */ #if defined(HAVE_EXPORT___put_task_struct) /* 2.6.5-7.201-suse added EXPORT_SYMBOL_GPL(__put_task_struct) */ /* 2.6.16.46-0.12-suse added EXPORT_SYMBOL(__put_task_struct_cb) */ #define EXPORT_SYMBOL___put_task_struct /*empty*/ #elif LINUX_VERSION_CODE == KERNEL_VERSION(2,6,16) #define EXPORT_SYMBOL___put_task_struct EXPORT_SYMBOL(__put_task_struct_cb) #else #define EXPORT_SYMBOL___put_task_struct EXPORT_SYMBOL(__put_task_struct) #endif #define task_siglock(tsk) ((tsk)->sighand->siglock) #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,4) /* names changed in 2.6.4-rc2 */ #define sysdev_register(dev) sys_device_register((dev)) #define sysdev_unregister(dev) sys_device_unregister((dev)) #endif #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10) /* remap_page_range() obsoleted in 2.6.10-rc1 */ #include static inline int remap_pfn_range(struct vm_area_struct *vma, unsigned long uvaddr, unsigned long pfn, unsigned long size, pgprot_t prot) { return remap_page_range(vma, uvaddr, pfn << PAGE_SHIFT, size, prot); } #endif #if !defined(DEFINE_SPINLOCK) /* added in 2.6.11-rc1 */ #define DEFINE_SPINLOCK(x) spinlock_t x = SPIN_LOCK_UNLOCKED #endif /* 2.6.16 introduced a new mutex type, replacing mutex-like semaphores. */ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16) #define DEFINE_MUTEX(mutex) DECLARE_MUTEX(mutex) #define mutex_lock(mutexp) down(mutexp) #define mutex_unlock(mutexp) up(mutexp) #endif /* 2.6.18-8.1.1.el5 replaced ptrace with utrace */ #if defined(CONFIG_UTRACE) /* alas, I don't yet know how to convert this to utrace */ static inline int ptrace_check_attach(struct task_struct *task, int kill) { return -ESRCH; } #endif /* 2.6.20-rc1 moved filp->f_dentry and filp->f_vfsmnt into filp->fpath */ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20) #define filp_dentry(filp) ((filp)->f_path.dentry) #define filp_vfsmnt(filp) ((filp)->f_path.mnt) #else #define filp_dentry(filp) ((filp)->f_dentry) #define filp_vfsmnt(filp) ((filp)->f_vfsmnt) #endif /* 2.6.24 introduced find_task_by_vpid() and task_pid_vnr(). 2.6.26 deprecated find_task_by_pid() and 2.6.27-rc1 removed it. We'll use 2.6.26 as the switch-over point. */ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26) static inline struct task_struct *perfctr_find_task_by_vpid(pid_t nr) { return find_task_by_pid(nr); } #undef find_task_by_vpid #define find_task_by_vpid(nr) perfctr_find_task_by_vpid((nr)) static inline pid_t perfctr_task_pid_vnr(const struct task_struct *tsk) { return tsk->pid; } #undef task_pid_vnr #define task_pid_vnr(tsk) perfctr_task_pid_vnr((tsk)) #endif /* 2.6.27-rc1 dropped the retry parameter from smp_call_function() and on_each_cpu() -- we always called it with retry == 1 */ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) static inline int perfctr_smp_call_function( void (*func)(void *info), void *info, int wait) { return smp_call_function(func, info, 1, wait); } #undef smp_call_function #define smp_call_function(f,i,w) perfctr_smp_call_function((f),(i),(w)) static inline int perfctr_on_each_cpu( void (*func)(void *info), void *info, int wait) { return on_each_cpu(func, info, 1, wait); } #undef on_each_cpu #define on_each_cpu(f,i,w) perfctr_on_each_cpu((f),(i),(w)) #endif /* 2.6.29-rc1 changed how ->fsuid and ->fsgid are accessed */ #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) && !defined(current_fsuid) #define current_fsuid() (current->fsuid) #define current_fsgid() (current->fsgid) #endif