1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41#ifndef __LIBCFS_LINUX_CFS_PRIM_H__
42#define __LIBCFS_LINUX_CFS_PRIM_H__
43
44#ifndef __LIBCFS_LIBCFS_H__
45#error Do not #include this file directly. #include <linux/libcfs/libcfs.h> instead
46#endif
47
48
49#include <linux/module.h>
50#include <linux/init.h>
51#include <linux/kernel.h>
52#include <linux/version.h>
53#include <linux/proc_fs.h>
54#include <linux/mm.h>
55#include <linux/timer.h>
56#include <linux/signal.h>
57#include <linux/sched.h>
58#include <linux/kthread.h>
59#include <linux/random.h>
60
61#include <linux/miscdevice.h>
62#include <linux/libcfs/linux/portals_compat25.h>
63#include <asm/div64.h>
64
65#include <linux/libcfs/linux/linux-time.h>
66
67
68
69
70
71#ifdef for_each_possible_cpu
72#define cfs_for_each_possible_cpu(cpu) for_each_possible_cpu(cpu)
73#elif defined(for_each_cpu)
74#define cfs_for_each_possible_cpu(cpu) for_each_cpu(cpu)
75#endif
76
77#ifdef NR_CPUS
78#else
79#define NR_CPUS 1
80#endif
81
82
83
84
85
86
87
88
89
90
91
92
93
94typedef struct miscdevice psdev_t;
95
96
97
98
99typedef struct ctl_table ctl_table_t;
100typedef struct ctl_table_header ctl_table_header_t;
101
102#define cfs_register_sysctl_table(t, a) register_sysctl_table(t)
103
104#define DECLARE_PROC_HANDLER(name) \
105static int \
106LL_PROC_PROTO(name) \
107{ \
108 DECLARE_LL_PROC_PPOS_DECL; \
109 \
110 return proc_call_handler(table->data, write, \
111 ppos, buffer, lenp, \
112 __##name); \
113}
114
115
116
117
118#define cfs_symbol_register(s, p) do {} while(0)
119#define cfs_symbol_unregister(s) do {} while(0)
120#define cfs_symbol_get(s) symbol_get(s)
121#define cfs_symbol_put(s) symbol_put(s)
122
123typedef struct module module_t;
124
125
126
127
128typedef struct proc_dir_entry proc_dir_entry_t;
129
130
131
132
133
134
135typedef long cfs_task_state_t;
136
137#define CFS_DECL_WAITQ(wq) DECLARE_WAIT_QUEUE_HEAD(wq)
138
139
140
141
142typedef struct task_struct task_t;
143#define DECL_JOURNAL_DATA void *journal_info
144#define PUSH_JOURNAL do { \
145 journal_info = current->journal_info; \
146 current->journal_info = NULL; \
147 } while(0)
148#define POP_JOURNAL do { \
149 current->journal_info = journal_info; \
150 } while(0)
151
152
153#define cfs_module(name, version, init, fini) \
154 module_init(init); \
155 module_exit(fini)
156
157
158
159
160
161
162
163
164typedef struct timer_list timer_list_t;
165
166
167#ifndef wait_event_timeout
168#define __wait_event_timeout(wq, condition, timeout, ret) \
169do { \
170 int __ret = 0; \
171 if (!(condition)) { \
172 wait_queue_t __wait; \
173 unsigned long expire; \
174 \
175 init_waitqueue_entry(&__wait, current); \
176 expire = timeout + jiffies; \
177 add_wait_queue(&wq, &__wait); \
178 for (;;) { \
179 set_current_state(TASK_UNINTERRUPTIBLE); \
180 if (condition) \
181 break; \
182 if (jiffies > expire) { \
183 ret = jiffies - expire; \
184 break; \
185 } \
186 schedule_timeout(timeout); \
187 } \
188 current->state = TASK_RUNNING; \
189 remove_wait_queue(&wq, &__wait); \
190 } \
191} while (0)
192
193
194
195
196#define cfs_waitq_wait_event_timeout(wq, condition, timeout, ret) \
197do { \
198 ret = 0; \
199 if (!(condition)) \
200 __wait_event_timeout(wq, condition, timeout, ret); \
201} while (0)
202#else
203#define cfs_waitq_wait_event_timeout(wq, condition, timeout, ret) \
204 ret = wait_event_timeout(wq, condition, timeout)
205#endif
206
207#define cfs_waitq_wait_event_interruptible_timeout(wq, c, timeout, ret) \
208 ret = wait_event_interruptible_timeout(wq, c, timeout)
209
210
211
212
213
214
215#define cfs_atomic_add_unless(atom, a, u) atomic_add_unless(atom, a, u)
216#define cfs_atomic_cmpxchg(atom, old, nv) atomic_cmpxchg(atom, old, nv)
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235typedef struct group_info group_info_t;
236
237
238
239
240
241#endif
242