18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file compat.h 38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * This file is intended to be up-to-date with the last linux version and 48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * provide work-arounds for missing features in previous kernel version 58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2002 OProfile authors 78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING 88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author John Levon 108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Philippe Elie 118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef COMPAT_H 158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define COMPAT_H 168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <linux/version.h> 188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <linux/module.h> 198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifdef HAVE_LINUX_SPINLOCK_HEADER 208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/* FIXME do we need this still ? */ 218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <linux/spinlock.h> 228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif 238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define V_BEFORE(a, b, c) (LINUX_VERSION_CODE < KERNEL_VERSION(a, b, c)) 258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define V_AT_LEAST(a, b, c) (LINUX_VERSION_CODE >= KERNEL_VERSION(a, b, c)) 268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#if V_BEFORE(2, 4, 0) 288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd #include "compat22.h" 298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#else 308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd #include "compat24.h" 318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif 328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_cache.h" 348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/* Things that cannot rely on a particular linux version or are needed between 368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * major release */ 378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef BUG_ON 398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define BUG_ON(p) do { if (p) BUG(); } while (0) 408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif 418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef MODULE_LICENSE 438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define MODULE_LICENSE(x) 448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif 458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/* Compiler work-around */ 478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/* branch prediction */ 498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef likely 508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd #ifdef EXPECT_OK 518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd #define likely(a) __builtin_expect((a), 1) 528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd #else 538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd #define likely(a) (a) 548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd #endif 558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif 568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef unlikely 578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd #ifdef EXPECT_OK 588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd #define unlikely(a) __builtin_expect((a), 0) 598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd #else 608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd #define unlikely(a) (a) 618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd #endif 628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif 638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef CONFIG_X86_64 658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define VMALLOC_32(sz) vmalloc_32(sz) 668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#else /* CONFIG_X86_64 */ 678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define VMALLOC_32(sz) vmalloc(sz) 688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif /* CONFIG_X86_64 */ 698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif /* COMPAT_H */ 71