Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
kernel.h
Go to the documentation of this file.
1
#ifndef _LINUX_KERNEL_H
2
#define _LINUX_KERNEL_H
3
4
5
#include <stdarg.h>
6
#include <linux/linkage.h>
7
#include <linux/stddef.h>
8
#include <linux/types.h>
9
#include <linux/compiler.h>
10
#include <linux/bitops.h>
11
#include <
linux/log2.h
>
12
#include <
linux/typecheck.h
>
13
#include <
linux/printk.h
>
14
#include <
linux/dynamic_debug.h
>
15
#include <asm/byteorder.h>
16
#include <
uapi/linux/kernel.h
>
17
18
#define USHRT_MAX ((u16)(~0U))
19
#define SHRT_MAX ((s16)(USHRT_MAX>>1))
20
#define SHRT_MIN ((s16)(-SHRT_MAX - 1))
21
#define INT_MAX ((int)(~0U>>1))
22
#define INT_MIN (-INT_MAX - 1)
23
#define UINT_MAX (~0U)
24
#define LONG_MAX ((long)(~0UL>>1))
25
#define LONG_MIN (-LONG_MAX - 1)
26
#define ULONG_MAX (~0UL)
27
#define LLONG_MAX ((long long)(~0ULL>>1))
28
#define LLONG_MIN (-LLONG_MAX - 1)
29
#define ULLONG_MAX (~0ULL)
30
#define SIZE_MAX (~(size_t)0)
31
32
#define STACK_MAGIC 0xdeadbeef
33
34
#define REPEAT_BYTE(x) ((~0ul / 0xff) * (x))
35
36
#define ALIGN(x, a) __ALIGN_KERNEL((x), (a))
37
#define __ALIGN_MASK(x, mask) __ALIGN_KERNEL_MASK((x), (mask))
38
#define PTR_ALIGN(p, a) ((typeof(p))ALIGN((unsigned long)(p), (a)))
39
#define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0)
40
41
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
42
43
/*
44
* This looks more complex than it should be. But we need to
45
* get the type for the ~ right in round_down (it needs to be
46
* as wide as the result!), and we want to evaluate the macro
47
* arguments just once each.
48
*/
49
#define __round_mask(x, y) ((__typeof__(x))((y)-1))
50
#define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1)
51
#define round_down(x, y) ((x) & ~__round_mask(x, y))
52
53
#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))
54
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
55
#define DIV_ROUND_UP_ULL(ll,d) \
56
({ unsigned long long _tmp = (ll)+(d)-1; do_div(_tmp, d); _tmp; })
57
58
#if BITS_PER_LONG == 32
59
# define DIV_ROUND_UP_SECTOR_T(ll,d) DIV_ROUND_UP_ULL(ll, d)
60
#else
61
# define DIV_ROUND_UP_SECTOR_T(ll,d) DIV_ROUND_UP(ll,d)
62
#endif
63
64
/* The `const' in roundup() prevents gcc-3.3 from calling __divdi3 */
65
#define roundup(x, y) ( \
66
{ \
67
const typeof(y) __y = y; \
68
(((x) + (__y - 1)) / __y) * __y; \
69
} \
70
)
71
#define rounddown(x, y) ( \
72
{ \
73
typeof(x) __x = (x); \
74
__x - (__x % (y)); \
75
} \
76
)
77
78
/*
79
* Divide positive or negative dividend by positive divisor and round
80
* to closest integer. Result is undefined for negative divisors.
81
*/
82
#define DIV_ROUND_CLOSEST(x, divisor)( \
83
{ \
84
typeof(x) __x = x; \
85
typeof(divisor) __d = divisor; \
86
(((typeof(x))-1) > 0 || (__x) > 0) ? \
87
(((__x) + ((__d) / 2)) / (__d)) : \
88
(((__x) - ((__d) / 2)) / (__d)); \
89
} \
90
)
91
92
/*
93
* Multiplies an integer by a fraction, while avoiding unnecessary
94
* overflow or loss of precision.
95
*/
96
#define mult_frac(x, numer, denom)( \
97
{ \
98
typeof(x) quot = (x) / (denom); \
99
typeof(x) rem = (x) % (denom); \
100
(quot * (numer)) + ((rem * (numer)) / (denom)); \
101
} \
102
)
103
104
105
#define _RET_IP_ (unsigned long)__builtin_return_address(0)
106
#define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; })
107
108
#ifdef CONFIG_LBDAF
109
# include <asm/div64.h>
110
# define sector_div(a, b) do_div(a, b)
111
#else
112
# define sector_div(n, b)( \
113
{ \
114
int _res; \
115
_res = (n) % (b); \
116
(n) /= (b); \
117
_res; \
118
} \
119
)
120
#endif
121
130
#define upper_32_bits(n) ((u32)(((n) >> 16) >> 16))
131
136
#define lower_32_bits(n) ((u32)(n))
137
138
struct
completion
;
139
struct
pt_regs
;
140
struct
user
;
141
142
#ifdef CONFIG_PREEMPT_VOLUNTARY
143
extern
int
_cond_resched
(
void
);
144
# define might_resched() _cond_resched()
145
#else
146
# define might_resched() do { } while (0)
147
#endif
148
149
#ifdef CONFIG_DEBUG_ATOMIC_SLEEP
150
void
__might_sleep(
const
char
*
file
,
int
line
,
int
preempt_offset);
161
# define might_sleep() \
162
do { __might_sleep(__FILE__, __LINE__, 0); might_resched(); } while (0)
163
#else
164
static
inline
void
__might_sleep(
const
char
*
file
,
int
line
,
165
int
preempt_offset) { }
166
# define might_sleep() do { might_resched(); } while (0)
167
#endif
168
169
#define might_sleep_if(cond) do { if (cond) might_sleep(); } while (0)
170
171
/*
172
* abs() handles unsigned and signed longs, ints, shorts and chars. For all
173
* input types abs() returns a signed long.
174
* abs() should not be used for 64-bit types (s64, u64, long long) - use abs64()
175
* for those.
176
*/
177
#define abs(x) ({ \
178
long ret; \
179
if (sizeof(x) == sizeof(long)) { \
180
long __x = (x); \
181
ret = (__x < 0) ? -__x : __x; \
182
} else { \
183
int __x = (x); \
184
ret = (__x < 0) ? -__x : __x; \
185
} \
186
ret; \
187
})
188
189
#define abs64(x) ({ \
190
s64 __x = (x); \
191
(__x < 0) ? -__x : __x; \
192
})
193
194
#ifdef CONFIG_PROVE_LOCKING
195
void
might_fault(
void
);
196
#else
197
static
inline
void
might_fault(
void
)
198
{
199
might_sleep
();
200
}
201
#endif
202
203
extern
struct
atomic_notifier_head
panic_notifier_list
;
204
extern
long
(*
panic_blink
)(
int
state
);
205
__printf
(1, 2)
206
void
panic
(
const
char
*
fmt
, ...)
207
__noreturn
__cold
;
208
extern
void
oops_enter
(
void
);
209
extern
void
oops_exit
(
void
);
210
void
print_oops_end_marker
(
void
);
211
extern
int
oops_may_print
(
void
);
212
void
do_exit
(
long
error_code
)
213
__noreturn
;
214
void
complete_and_exit
(
struct
completion
*,
long
)
215
__noreturn;
216
217
/* Internal, do not use. */
218
int
__must_check
_kstrtoul
(
const
char
*
s
,
unsigned
int
base,
unsigned
long
*
res
);
219
int
__must_check
_kstrtol
(
const
char
*s,
unsigned
int
base,
long
*res);
220
221
int
__must_check
kstrtoull
(
const
char
*s,
unsigned
int
base,
unsigned
long
long
*res);
222
int
__must_check
kstrtoll
(
const
char
*s,
unsigned
int
base,
long
long
*res);
223
static
inline
int
__must_check
kstrtoul(
const
char
*s,
unsigned
int
base,
unsigned
long
*res)
224
{
225
/*
226
* We want to shortcut function call, but
227
* __builtin_types_compatible_p(unsigned long, unsigned long long) = 0.
228
*/
229
if
(
sizeof
(
unsigned
long
) ==
sizeof
(
unsigned
long
long
) &&
230
__alignof__(
unsigned
long
) == __alignof__(
unsigned
long
long
))
231
return
kstrtoull
(s, base, (
unsigned
long
long
*)res);
232
else
233
return
_kstrtoul
(s, base, res);
234
}
235
236
static
inline
int
__must_check
kstrtol(
const
char
*
s
,
unsigned
int
base,
long
*
res
)
237
{
238
/*
239
* We want to shortcut function call, but
240
* __builtin_types_compatible_p(long, long long) = 0.
241
*/
242
if
(
sizeof
(
long
) ==
sizeof
(
long
long
) &&
243
__alignof__(
long
) == __alignof__(
long
long
))
244
return
kstrtoll
(s, base, (
long
long
*)res);
245
else
246
return
_kstrtol
(s, base, res);
247
}
248
249
int
__must_check
kstrtouint
(
const
char
*s,
unsigned
int
base,
unsigned
int
*res);
250
int
__must_check
kstrtoint
(
const
char
*s,
unsigned
int
base,
int
*res);
251
252
static
inline
int
__must_check
kstrtou64(
const
char
*s,
unsigned
int
base,
u64
*res)
253
{
254
return
kstrtoull
(s, base, res);
255
}
256
257
static
inline
int
__must_check
kstrtos64(
const
char
*s,
unsigned
int
base,
s64
*res)
258
{
259
return
kstrtoll
(s, base, res);
260
}
261
262
static
inline
int
__must_check
kstrtou32(
const
char
*s,
unsigned
int
base,
u32
*res)
263
{
264
return
kstrtouint
(s, base, res);
265
}
266
267
static
inline
int
__must_check
kstrtos32(
const
char
*s,
unsigned
int
base,
s32
*res)
268
{
269
return
kstrtoint
(s, base, res);
270
}
271
272
int
__must_check
kstrtou16
(
const
char
*s,
unsigned
int
base,
u16
*res);
273
int
__must_check
kstrtos16
(
const
char
*s,
unsigned
int
base,
s16
*res);
274
int
__must_check
kstrtou8
(
const
char
*s,
unsigned
int
base,
u8
*res);
275
int
__must_check
kstrtos8
(
const
char
*s,
unsigned
int
base,
s8
*res);
276
277
int
__must_check
kstrtoull_from_user
(
const
char
__user *s,
size_t
count
,
unsigned
int
base,
unsigned
long
long
*res);
278
int
__must_check
kstrtoll_from_user
(
const
char
__user *s,
size_t
count
,
unsigned
int
base,
long
long
*res);
279
int
__must_check
kstrtoul_from_user
(
const
char
__user *s,
size_t
count
,
unsigned
int
base,
unsigned
long
*res);
280
int
__must_check
kstrtol_from_user
(
const
char
__user *s,
size_t
count
,
unsigned
int
base,
long
*res);
281
int
__must_check
kstrtouint_from_user
(
const
char
__user *s,
size_t
count
,
unsigned
int
base,
unsigned
int
*res);
282
int
__must_check
kstrtoint_from_user
(
const
char
__user *s,
size_t
count
,
unsigned
int
base,
int
*res);
283
int
__must_check
kstrtou16_from_user
(
const
char
__user *s,
size_t
count
,
unsigned
int
base,
u16
*res);
284
int
__must_check
kstrtos16_from_user
(
const
char
__user *s,
size_t
count
,
unsigned
int
base,
s16
*res);
285
int
__must_check
kstrtou8_from_user
(
const
char
__user *s,
size_t
count
,
unsigned
int
base,
u8
*res);
286
int
__must_check
kstrtos8_from_user
(
const
char
__user *s,
size_t
count
,
unsigned
int
base,
s8
*res);
287
288
static
inline
int
__must_check
kstrtou64_from_user(
const
char
__user *s,
size_t
count
,
unsigned
int
base,
u64
*res)
289
{
290
return
kstrtoull_from_user
(s, count, base, res);
291
}
292
293
static
inline
int
__must_check
kstrtos64_from_user(
const
char
__user *s,
size_t
count
,
unsigned
int
base,
s64
*res)
294
{
295
return
kstrtoll_from_user
(s, count, base, res);
296
}
297
298
static
inline
int
__must_check
kstrtou32_from_user(
const
char
__user *s,
size_t
count
,
unsigned
int
base,
u32
*res)
299
{
300
return
kstrtouint_from_user
(s, count, base, res);
301
}
302
303
static
inline
int
__must_check
kstrtos32_from_user(
const
char
__user *s,
size_t
count
,
unsigned
int
base,
s32
*res)
304
{
305
return
kstrtoint_from_user
(s, count, base, res);
306
}
307
308
/* Obsolete, do not use. Use kstrto<foo> instead */
309
310
extern
unsigned
long
simple_strtoul
(
const
char
*,
char
**,
unsigned
int
);
311
extern
long
simple_strtol
(
const
char
*,
char
**,
unsigned
int
);
312
extern
unsigned
long
long
simple_strtoull
(
const
char
*,
char
**,
unsigned
int
);
313
extern
long
long
simple_strtoll
(
const
char
*,
char
**,
unsigned
int
);
314
#define strict_strtoul kstrtoul
315
#define strict_strtol kstrtol
316
#define strict_strtoull kstrtoull
317
#define strict_strtoll kstrtoll
318
319
extern
int
num_to_str
(
char
*
buf
,
int
size
,
unsigned
long
long
num);
320
321
/* lib/printf utilities */
322
323
extern
__printf
(2, 3)
int
sprintf
(
char
*
buf
,
const
char
*
fmt
, ...);
324
extern
__printf
(2, 0)
int
vsprintf
(
char
*buf,
const
char
*,
va_list
);
325
extern __printf(3, 4)
326
int
snprintf
(
char
*buf,
size_t
size
,
const
char
*fmt, ...);
327
extern __printf(3, 0)
328
int
vsnprintf
(
char
*buf,
size_t
size,
const
char
*fmt, va_list args);
329
extern __printf(3, 4)
330
int
scnprintf
(
char
*buf,
size_t
size,
const
char
*fmt, ...);
331
extern __printf(3, 0)
332
int
vscnprintf
(
char
*buf,
size_t
size,
const
char
*fmt, va_list args);
333
extern __printf(2, 3)
334
char
*
kasprintf
(
gfp_t
gfp,
const
char
*fmt, ...);
335
extern
char
*
kvasprintf
(
gfp_t
gfp,
const
char
*fmt, va_list args);
336
337
extern
__scanf
(2, 3)
338
int
sscanf
(
const
char
*,
const
char
*, ...);
339
extern __scanf(2, 0)
340
int
vsscanf
(
const
char
*,
const
char
*, va_list);
341
342
extern
int
get_option
(
char
**
str
,
int
*pint);
343
extern
char
*
get_options
(
const
char
*str,
int
nints,
int
*ints);
344
extern
unsigned
long
long
memparse
(
const
char
*
ptr
,
char
**retptr);
345
346
extern
int
core_kernel_text
(
unsigned
long
addr
);
347
extern
int
core_kernel_data
(
unsigned
long
addr);
348
extern
int
__kernel_text_address
(
unsigned
long
addr);
349
extern
int
kernel_text_address
(
unsigned
long
addr);
350
extern
int
func_ptr_is_kernel_text
(
void
*ptr);
351
352
struct
pid
;
353
extern
struct
pid *
session_of_pgrp
(
struct
pid *pgrp);
354
355
unsigned
long
int_sqrt
(
unsigned
long
);
356
357
extern
void
bust_spinlocks
(
int
yes
);
358
extern
void
wake_up_klogd
(
void
);
359
extern
int
oops_in_progress
;
/* If set, an oops, panic(), BUG() or die() is in progress */
360
extern
int
panic_timeout
;
361
extern
int
panic_on_oops
;
362
extern
int
panic_on_unrecovered_nmi
;
363
extern
int
panic_on_io_nmi
;
364
extern
int
sysctl_panic_on_stackoverflow
;
365
extern
const
char
*
print_tainted
(
void
);
366
extern
void
add_taint
(
unsigned
flag
);
367
extern
int
test_taint
(
unsigned
flag);
368
extern
unsigned
long
get_taint
(
void
);
369
extern
int
root_mountflags
;
370
371
extern
bool
early_boot_irqs_disabled;
372
373
/* Values used for system_state */
374
extern enum
system_states
{
375
SYSTEM_BOOTING
,
376
SYSTEM_RUNNING
,
377
SYSTEM_HALT
,
378
SYSTEM_POWER_OFF
,
379
SYSTEM_RESTART
,
380
}
system_state
;
381
382
#define TAINT_PROPRIETARY_MODULE 0
383
#define TAINT_FORCED_MODULE 1
384
#define TAINT_UNSAFE_SMP 2
385
#define TAINT_FORCED_RMMOD 3
386
#define TAINT_MACHINE_CHECK 4
387
#define TAINT_BAD_PAGE 5
388
#define TAINT_USER 6
389
#define TAINT_DIE 7
390
#define TAINT_OVERRIDDEN_ACPI_TABLE 8
391
#define TAINT_WARN 9
392
#define TAINT_CRAP 10
393
#define TAINT_FIRMWARE_WORKAROUND 11
394
#define TAINT_OOT_MODULE 12
395
396
extern
const
char
hex_asc
[];
397
#define hex_asc_lo(x) hex_asc[((x) & 0x0f)]
398
#define hex_asc_hi(x) hex_asc[((x) & 0xf0) >> 4]
399
400
static
inline
char
*hex_byte_pack(
char
*
buf
,
u8
byte
)
401
{
402
*buf++ =
hex_asc_hi
(byte);
403
*buf++ =
hex_asc_lo
(byte);
404
return
buf
;
405
}
406
407
static
inline
char
*
__deprecated
pack_hex_byte(
char
*
buf
,
u8
byte
)
408
{
409
return
hex_byte_pack(buf, byte);
410
}
411
412
extern
int
hex_to_bin
(
char
ch);
413
extern
int
__must_check
hex2bin
(
u8
*
dst
,
const
char
*
src
,
size_t
count
);
414
415
/*
416
* General tracing related utility functions - trace_printk(),
417
* tracing_on/tracing_off and tracing_start()/tracing_stop
418
*
419
* Use tracing_on/tracing_off when you want to quickly turn on or off
420
* tracing. It simply enables or disables the recording of the trace events.
421
* This also corresponds to the user space /sys/kernel/debug/tracing/tracing_on
422
* file, which gives a means for the kernel and userspace to interact.
423
* Place a tracing_off() in the kernel where you want tracing to end.
424
* From user space, examine the trace, and then echo 1 > tracing_on
425
* to continue tracing.
426
*
427
* tracing_stop/tracing_start has slightly more overhead. It is used
428
* by things like suspend to ram where disabling the recording of the
429
* trace is not enough, but tracing must actually stop because things
430
* like calling smp_processor_id() may crash the system.
431
*
432
* Most likely, you want to use tracing_on/tracing_off.
433
*/
434
#ifdef CONFIG_RING_BUFFER
435
/* trace_off_permanent stops recording with no way to bring it back */
436
void
tracing_off_permanent
(
void
);
437
#else
438
static
inline
void
tracing_off_permanent
(
void
) { }
439
#endif
440
441
enum
ftrace_dump_mode
{
442
DUMP_NONE
,
443
DUMP_ALL
,
444
DUMP_ORIG
,
445
};
446
447
#ifdef CONFIG_TRACING
448
void
tracing_on
(
void
);
449
void
tracing_off
(
void
);
450
int
tracing_is_on
(
void
);
451
452
extern
void
tracing_start
(
void
);
453
extern
void
tracing_stop
(
void
);
454
extern
void
ftrace_off_permanent
(
void
);
455
456
static
inline
__printf
(1, 2)
457
void
____trace_printk_check_format(
const
char
*
fmt
, ...)
458
{
459
}
460
#define __trace_printk_check_format(fmt, args...) \
461
do { \
462
if (0) \
463
____trace_printk_check_format(fmt, ##args); \
464
} while (0)
465
483
#define trace_printk(fmt, args...) \
484
do { \
485
static const char *trace_printk_fmt \
486
__attribute__((section("__trace_printk_fmt"))) = \
487
__builtin_constant_p(fmt) ? fmt : NULL; \
488
\
489
__trace_printk_check_format(fmt, ##args); \
490
\
491
if (__builtin_constant_p(fmt)) \
492
__trace_bprintk(_THIS_IP_, trace_printk_fmt, ##args); \
493
else \
494
__trace_printk(_THIS_IP_, fmt, ##args); \
495
} while (0)
496
497
extern
__printf
(2, 3)
498
int
__trace_bprintk
(
unsigned
long
ip
,
const
char
*
fmt
, ...);
499
500
extern
__printf
(2, 3)
501
int
__trace_printk
(
unsigned
long
ip,
const
char
*fmt, ...);
502
503
extern
void
trace_dump_stack(
void
);
504
505
/*
506
* The double __builtin_constant_p is because gcc will give us an error
507
* if we try to allocate the static variable to fmt if it is not a
508
* constant. Even with the outer if statement.
509
*/
510
#define ftrace_vprintk(fmt, vargs) \
511
do { \
512
if (__builtin_constant_p(fmt)) { \
513
static const char *trace_printk_fmt \
514
__attribute__((section("__trace_printk_fmt"))) = \
515
__builtin_constant_p(fmt) ? fmt : NULL; \
516
\
517
__ftrace_vbprintk(_THIS_IP_, trace_printk_fmt, vargs); \
518
} else \
519
__ftrace_vprintk(_THIS_IP_, fmt, vargs); \
520
} while (0)
521
522
extern
int
523
__ftrace_vbprintk
(
unsigned
long
ip,
const
char
*fmt,
va_list
ap);
524
525
extern
int
526
__ftrace_vprintk
(
unsigned
long
ip,
const
char
*fmt,
va_list
ap);
527
528
extern
void
ftrace_dump
(
enum
ftrace_dump_mode
oops_dump_mode);
529
#else
530
static
inline
__printf
(1, 2)
531
int
trace_printk(
const
char
*fmt, ...);
532
533
static
inline
void
tracing_start
(
void
) { }
534
static
inline
void
tracing_stop
(
void
) { }
535
static
inline
void
ftrace_off_permanent
(
void
) { }
536
static
inline
void
trace_dump_stack(
void
) { }
537
538
static
inline
void
tracing_on
(
void
) { }
539
static
inline
void
tracing_off
(
void
) { }
540
static
inline
int
tracing_is_on
(
void
) {
return
0; }
541
542
static
inline
int
543
trace_printk(
const
char
*fmt, ...)
544
{
545
return
0;
546
}
547
static
inline
int
548
ftrace_vprintk(
const
char
*fmt,
va_list
ap)
549
{
550
return
0;
551
}
552
static
inline
void
ftrace_dump
(
enum
ftrace_dump_mode
oops_dump_mode) { }
553
#endif
/* CONFIG_TRACING */
554
555
/*
556
* min()/max()/clamp() macros that also do
557
* strict type-checking.. See the
558
* "unnecessary" pointer comparison.
559
*/
560
#define min(x, y) ({ \
561
typeof(x) _min1 = (x); \
562
typeof(y) _min2 = (y); \
563
(void) (&_min1 == &_min2); \
564
_min1 < _min2 ? _min1 : _min2; })
565
566
#define max(x, y) ({ \
567
typeof(x) _max1 = (x); \
568
typeof(y) _max2 = (y); \
569
(void) (&_max1 == &_max2); \
570
_max1 > _max2 ? _max1 : _max2; })
571
572
#define min3(x, y, z) ({ \
573
typeof(x) _min1 = (x); \
574
typeof(y) _min2 = (y); \
575
typeof(z) _min3 = (z); \
576
(void) (&_min1 == &_min2); \
577
(void) (&_min1 == &_min3); \
578
_min1 < _min2 ? (_min1 < _min3 ? _min1 : _min3) : \
579
(_min2 < _min3 ? _min2 : _min3); })
580
581
#define max3(x, y, z) ({ \
582
typeof(x) _max1 = (x); \
583
typeof(y) _max2 = (y); \
584
typeof(z) _max3 = (z); \
585
(void) (&_max1 == &_max2); \
586
(void) (&_max1 == &_max3); \
587
_max1 > _max2 ? (_max1 > _max3 ? _max1 : _max3) : \
588
(_max2 > _max3 ? _max2 : _max3); })
589
595
#define min_not_zero(x, y) ({ \
596
typeof(x) __x = (x); \
597
typeof(y) __y = (y); \
598
__x == 0 ? __y : ((__y == 0) ? __x : min(__x, __y)); })
599
609
#define clamp(val, min, max) ({ \
610
typeof(val) __val = (val); \
611
typeof(min) __min = (min); \
612
typeof(max) __max = (max); \
613
(void) (&__val == &__min); \
614
(void) (&__val == &__max); \
615
__val = __val < __min ? __min: __val; \
616
__val > __max ? __max: __val; })
617
618
/*
619
* ..and if you can't take the strict
620
* types, you can specify one yourself.
621
*
622
* Or not use min/max/clamp at all, of course.
623
*/
624
#define min_t(type, x, y) ({ \
625
type __min1 = (x); \
626
type __min2 = (y); \
627
__min1 < __min2 ? __min1: __min2; })
628
629
#define max_t(type, x, y) ({ \
630
type __max1 = (x); \
631
type __max2 = (y); \
632
__max1 > __max2 ? __max1: __max2; })
633
644
#define clamp_t(type, val, min, max) ({ \
645
type __val = (val); \
646
type __min = (min); \
647
type __max = (max); \
648
__val = __val < __min ? __min: __val; \
649
__val > __max ? __max: __val; })
650
662
#define clamp_val(val, min, max) ({ \
663
typeof(val) __val = (val); \
664
typeof(val) __min = (min); \
665
typeof(val) __max = (max); \
666
__val = __val < __min ? __min: __val; \
667
__val > __max ? __max: __val; })
668
669
670
/*
671
* swap - swap value of @a and @b
672
*/
673
#define swap(a, b) \
674
do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0)
675
683
#define container_of(ptr, type, member) ({ \
684
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
685
(type *)( (char *)__mptr - offsetof(type,member) );})
686
687
/* Trap pasters of __FUNCTION__ at compile-time */
688
#define __FUNCTION__ (__func__)
689
690
/* This helps us to avoid #ifdef CONFIG_NUMA */
691
#ifdef CONFIG_NUMA
692
#define NUMA_BUILD 1
693
#else
694
#define NUMA_BUILD 0
695
#endif
696
697
/* This helps us avoid #ifdef CONFIG_COMPACTION */
698
#ifdef CONFIG_COMPACTION
699
#define COMPACTION_BUILD 1
700
#else
701
#define COMPACTION_BUILD 0
702
#endif
703
704
/* This helps us to avoid #ifdef CONFIG_SYMBOL_PREFIX */
705
#ifdef CONFIG_SYMBOL_PREFIX
706
#define SYMBOL_PREFIX CONFIG_SYMBOL_PREFIX
707
#else
708
#define SYMBOL_PREFIX ""
709
#endif
710
711
/* Rebuild everything on CONFIG_FTRACE_MCOUNT_RECORD */
712
#ifdef CONFIG_FTRACE_MCOUNT_RECORD
713
# define REBUILD_DUE_TO_FTRACE_MCOUNT_RECORD
714
#endif
715
716
extern
int
do_sysinfo
(
struct
sysinfo
*
info
);
717
718
#endif
Generated on Thu Jan 10 2013 13:18:22 for Linux Kernel by
1.8.2