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