Commit | Line | Data |
---|---|---|
5fa38800 MD |
1 | #ifndef _LTTNG_KERNEL_VERSION_H |
2 | #define _LTTNG_KERNEL_VERSION_H | |
3 | ||
4 | /* | |
5 | * lttng-kernel-version.h | |
6 | * | |
7 | * Contains helpers to check more complex kernel version conditions. | |
8 | * | |
9 | * Copyright (C) 2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | |
10 | * | |
11 | * This library is free software; you can redistribute it and/or | |
12 | * modify it under the terms of the GNU Lesser General Public | |
13 | * License as published by the Free Software Foundation; only | |
14 | * version 2.1 of the License. | |
15 | * | |
16 | * This library is distributed in the hope that it will be useful, | |
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
19 | * Lesser General Public License for more details. | |
20 | * | |
21 | * You should have received a copy of the GNU Lesser General Public | |
22 | * License along with this library; if not, write to the Free Software | |
23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
24 | */ | |
25 | ||
26 | #include <linux/version.h> | |
9f61c55f MD |
27 | |
28 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) | |
29 | #include <generated/utsrelease.h> | |
30 | #else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) */ | |
7b10d281 | 31 | #include <linux/utsrelease.h> |
9f61c55f | 32 | #endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) */ |
5fa38800 MD |
33 | |
34 | /* | |
35 | * This macro checks if the kernel version is between the two specified | |
144bbfd5 | 36 | * versions (lower limit inclusive, upper limit exclusive). |
5fa38800 MD |
37 | */ |
38 | #define LTTNG_KERNEL_RANGE(a_low, b_low, c_low, a_high, b_high, c_high) \ | |
39 | (LINUX_VERSION_CODE >= KERNEL_VERSION(a_low, b_low, c_low) && \ | |
144bbfd5 | 40 | LINUX_VERSION_CODE < KERNEL_VERSION(a_high, b_high, c_high)) |
5fa38800 | 41 | |
3e5941df | 42 | #define LTTNG_UBUNTU_KERNEL_VERSION(a, b, c, d) \ |
5c7af523 | 43 | (((a) << 24) + ((b) << 16) + ((c) << 8) + (d)) |
3e5941df | 44 | |
05732a66 | 45 | #ifdef UTS_UBUNTU_RELEASE_ABI |
3e5941df JD |
46 | #define LTTNG_UBUNTU_VERSION_CODE \ |
47 | ((LINUX_VERSION_CODE << 8) + UTS_UBUNTU_RELEASE_ABI) | |
05732a66 MD |
48 | #else |
49 | #define LTTNG_UBUNTU_VERSION_CODE 0 | |
50 | #endif | |
3e5941df JD |
51 | |
52 | #define LTTNG_UBUNTU_KERNEL_RANGE(a_low, b_low, c_low, d_low, \ | |
53 | a_high, b_high, c_high, d_high) \ | |
05732a66 | 54 | (LTTNG_UBUNTU_VERSION_CODE >= \ |
3e5941df JD |
55 | LTTNG_UBUNTU_KERNEL_VERSION(a_low, b_low, c_low, d_low) && \ |
56 | LTTNG_UBUNTU_VERSION_CODE < \ | |
57 | LTTNG_UBUNTU_KERNEL_VERSION(a_high, b_high, c_high, d_high)) | |
58 | ||
72e6c528 MD |
59 | #define LTTNG_DEBIAN_KERNEL_VERSION(a, b, c, d, e, f) \ |
60 | (((((a) << 16) + ((b) << 8) + (c)) * 1000000ULL) + ((d) * 10000) + ((e) * 100) + (f)) | |
61 | ||
05732a66 | 62 | #ifdef DEBIAN_API_VERSION |
72e6c528 MD |
63 | #define LTTNG_DEBIAN_VERSION_CODE \ |
64 | ((LINUX_VERSION_CODE * 1000000ULL) + DEBIAN_API_VERSION) | |
05732a66 MD |
65 | #else |
66 | #define LTTNG_DEBIAN_VERSION_CODE 0 | |
67 | #endif | |
72e6c528 MD |
68 | |
69 | #define LTTNG_DEBIAN_KERNEL_RANGE(a_low, b_low, c_low, d_low, e_low, f_low, \ | |
70 | a_high, b_high, c_high, d_high, e_high, f_high) \ | |
05732a66 | 71 | (LTTNG_DEBIAN_VERSION_CODE >= \ |
72e6c528 MD |
72 | LTTNG_DEBIAN_KERNEL_VERSION(a_low, b_low, c_low, d_low, e_low, f_low) && \ |
73 | LTTNG_DEBIAN_VERSION_CODE < \ | |
74 | LTTNG_DEBIAN_KERNEL_VERSION(a_high, b_high, c_high, d_high, e_high, f_high)) | |
75 | ||
f30ae671 MD |
76 | #define LTTNG_RHEL_KERNEL_VERSION(a, b, c, d, e) \ |
77 | (((a) * (1ULL << 32)) + ((b) << 24) + ((c) << 16) + ((d) << 8) + (e)) | |
78 | ||
79 | #ifdef RHEL_RELEASE_CODE | |
80 | #define LTTNG_RHEL_VERSION_CODE \ | |
81 | ((LINUX_VERSION_CODE * (1ULL << 16)) + RHEL_RELEASE_CODE) | |
82 | #else | |
83 | #define LTTNG_RHEL_VERSION_CODE 0 | |
84 | #endif | |
85 | ||
86 | #define LTTNG_RHEL_KERNEL_RANGE(a_low, b_low, c_low, d_low, e_low, \ | |
87 | a_high, b_high, c_high, d_high, e_high) \ | |
88 | (LTTNG_RHEL_VERSION_CODE >= \ | |
89 | LTTNG_RHEL_KERNEL_VERSION(a_low, b_low, c_low, d_low, e_low) && \ | |
90 | LTTNG_RHEL_VERSION_CODE < \ | |
91 | LTTNG_RHEL_KERNEL_VERSION(a_high, b_high, c_high, d_high, e_high)) | |
92 | ||
e0577e5f MJ |
93 | #define LTTNG_RT_KERNEL_VERSION(a, b, c, d) \ |
94 | (((a) << 24) + ((b) << 16) + ((c) << 8) + (d)) | |
95 | ||
96 | #ifdef RT_PATCH_VERSION | |
97 | #define LTTNG_RT_VERSION_CODE \ | |
98 | ((LINUX_VERSION_CODE << 8) + RT_PATCH_VERSION) | |
99 | #else | |
100 | #define LTTNG_RT_VERSION_CODE 0 | |
101 | #endif | |
102 | ||
103 | #define LTTNG_RT_KERNEL_RANGE(a_low, b_low, c_low, d_low, \ | |
104 | a_high, b_high, c_high, d_high) \ | |
105 | (LTTNG_RT_VERSION_CODE >= \ | |
106 | LTTNG_RT_KERNEL_VERSION(a_low, b_low, c_low, d_low) && \ | |
107 | LTTNG_RT_VERSION_CODE < \ | |
108 | LTTNG_RT_KERNEL_VERSION(a_high, b_high, c_high, d_high)) | |
109 | ||
5fa38800 | 110 | #endif /* _LTTNG_KERNEL_VERSION_H */ |