Blame view
include/linux/kernel.h
19.5 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 |
#ifndef _LINUX_KERNEL_H #define _LINUX_KERNEL_H /* * 'kernel.h' contains some often-used function prototypes etc */ |
a79ff731a netfilter: xtable... |
7 8 |
#define __ALIGN_KERNEL(x, a) __ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1) #define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask)) |
1da177e4c Linux-2.6.12-rc2 |
9 10 11 12 13 14 15 16 17 |
#ifdef __KERNEL__ #include <stdarg.h> #include <linux/linkage.h> #include <linux/stddef.h> #include <linux/types.h> #include <linux/compiler.h> #include <linux/bitops.h> |
f0d1b0b30 [PATCH] LOG2: Imp... |
18 |
#include <linux/log2.h> |
e0deaff47 split the typeche... |
19 |
#include <linux/typecheck.h> |
968ab1838 include/linux/ker... |
20 |
#include <linux/printk.h> |
e9d376f0f dynamic debug: co... |
21 |
#include <linux/dynamic_debug.h> |
1da177e4c Linux-2.6.12-rc2 |
22 23 |
#include <asm/byteorder.h> #include <asm/bug.h> |
4be929be3 kernel-wide: repl... |
24 25 26 |
#define USHRT_MAX ((u16)(~0U)) #define SHRT_MAX ((s16)(USHRT_MAX>>1)) #define SHRT_MIN ((s16)(-SHRT_MAX - 1)) |
1da177e4c Linux-2.6.12-rc2 |
27 28 29 30 31 32 |
#define INT_MAX ((int)(~0U>>1)) #define INT_MIN (-INT_MAX - 1) #define UINT_MAX (~0U) #define LONG_MAX ((long)(~0UL>>1)) #define LONG_MIN (-LONG_MAX - 1) #define ULONG_MAX (~0UL) |
111ebb6e6 [PATCH] writeback... |
33 34 35 |
#define LLONG_MAX ((long long)(~0ULL>>1)) #define LLONG_MIN (-LLONG_MAX - 1) #define ULLONG_MAX (~0ULL) |
1da177e4c Linux-2.6.12-rc2 |
36 37 |
#define STACK_MAGIC 0xdeadbeef |
a79ff731a netfilter: xtable... |
38 |
#define ALIGN(x, a) __ALIGN_KERNEL((x), (a)) |
9f93ff5be Restore __ALIGN_M... |
39 |
#define __ALIGN_MASK(x, mask) __ALIGN_KERNEL_MASK((x), (mask)) |
a83308e60 PTR_ALIGN |
40 |
#define PTR_ALIGN(p, a) ((typeof(p))ALIGN((unsigned long)(p), (a))) |
f10db6277 Avoid divide in I... |
41 |
#define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0) |
2ea581447 Fix 'ALIGN()' mac... |
42 |
|
c5e631cf6 ARRAY_SIZE: check... |
43 |
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) |
9b3be9f99 Move round_up/dow... |
44 45 46 47 48 49 50 51 52 |
/* * This looks more complex than it should be. But we need to * get the type for the ~ right in round_down (it needs to be * as wide as the result!), and we want to evaluate the macro * arguments just once each. */ #define __round_mask(x, y) ((__typeof__(x))((y)-1)) #define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1) #define round_down(x, y) ((x) & ~__round_mask(x, y)) |
4552d5dc0 [PATCH] x86_64: r... |
53 |
#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) |
930631edd [PATCH] add DIV_R... |
54 |
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) |
074e61ec3 kernel: add round... |
55 56 |
/* The `const' in roundup() prevents gcc-3.3 from calling __divdi3 */ |
b28efd54d kernel: roundup s... |
57 58 |
#define roundup(x, y) ( \ { \ |
6070bf359 kernel: Constify ... |
59 |
const typeof(y) __y = y; \ |
b28efd54d kernel: roundup s... |
60 61 62 |
(((x) + (__y - 1)) / __y) * __y; \ } \ ) |
686a0f3d7 kernel: rounddown... |
63 64 65 66 67 68 |
#define rounddown(x, y) ( \ { \ typeof(x) __x = (x); \ __x - (__x % (y)); \ } \ ) |
9fe06081e Create a DIV_ROUN... |
69 70 71 72 73 74 |
#define DIV_ROUND_CLOSEST(x, divisor)( \ { \ typeof(divisor) __divisor = divisor; \ (((x) + ((__divisor) / 2)) / (__divisor)); \ } \ ) |
1da177e4c Linux-2.6.12-rc2 |
75 |
|
ca31e146d Move _RET_IP_ and... |
76 77 |
#define _RET_IP_ (unsigned long)__builtin_return_address(0) #define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; }) |
90c699a9e block: rename CON... |
78 |
#ifdef CONFIG_LBDAF |
2da96acde [BLOCK] Move sect... |
79 80 81 82 83 84 85 86 87 88 89 90 |
# include <asm/div64.h> # define sector_div(a, b) do_div(a, b) #else # define sector_div(n, b)( \ { \ int _res; \ _res = (n) % (b); \ (n) /= (b); \ _res; \ } \ ) #endif |
218e180e7 add upper-32-bits... |
91 92 93 94 95 96 97 98 99 |
/** * upper_32_bits - return bits 32-63 of a number * @n: the number we're accessing * * A basic shift-right of a 64- or 32-bit quantity. Use this to suppress * the "right shift count >= width of type" warning when that quantity is * 32-bits. */ #define upper_32_bits(n) ((u32)(((n) >> 16) >> 16)) |
204b885e7 introduce lower_3... |
100 101 102 103 104 |
/** * lower_32_bits - return bits 0-31 of a number * @n: the number we're accessing */ #define lower_32_bits(n) ((u32)(n)) |
1da177e4c Linux-2.6.12-rc2 |
105 |
struct completion; |
df2e71fb9 [PATCH] dump_thre... |
106 107 |
struct pt_regs; struct user; |
1da177e4c Linux-2.6.12-rc2 |
108 |
|
070cb0659 move kernel-doc c... |
109 110 111 112 113 114 |
#ifdef CONFIG_PREEMPT_VOLUNTARY extern int _cond_resched(void); # define might_resched() _cond_resched() #else # define might_resched() do { } while (0) #endif |
7106a27b5 kernel.h: fix mig... |
115 |
#ifdef CONFIG_DEBUG_SPINLOCK_SLEEP |
d894837f2 sched: might_slee... |
116 |
void __might_sleep(const char *file, int line, int preempt_offset); |
1da177e4c Linux-2.6.12-rc2 |
117 118 119 120 121 122 123 |
/** * might_sleep - annotation for functions that can sleep * * this macro will print a stack trace if it is executed in an atomic * context (spinlock, irq-handler, ...). * * This is a useful debugging help to be able to catch problems early and not |
e20ec9911 fix spelling erro... |
124 |
* be bitten later when the calling function happens to sleep when it is not |
1da177e4c Linux-2.6.12-rc2 |
125 126 |
* supposed to. */ |
f8cbd99bd [PATCH] sched: vo... |
127 |
# define might_sleep() \ |
e4aafea2d sched: Add a pree... |
128 |
do { __might_sleep(__FILE__, __LINE__, 0); might_resched(); } while (0) |
1da177e4c Linux-2.6.12-rc2 |
129 |
#else |
d894837f2 sched: might_slee... |
130 131 |
static inline void __might_sleep(const char *file, int line, int preempt_offset) { } |
f8cbd99bd [PATCH] sched: vo... |
132 |
# define might_sleep() do { might_resched(); } while (0) |
1da177e4c Linux-2.6.12-rc2 |
133 |
#endif |
368a5fa1f [PATCH] remove un... |
134 |
#define might_sleep_if(cond) do { if (cond) might_sleep(); } while (0) |
f8cbd99bd [PATCH] sched: vo... |
135 |
|
71a904844 include/linux/ker... |
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
/* * abs() handles unsigned and signed longs, ints, shorts and chars. For all * input types abs() returns a signed long. * abs() should not be used for 64-bit types (s64, u64, long long) - use abs64() * for those. */ #define abs(x) ({ \ long ret; \ if (sizeof(x) == sizeof(long)) { \ long __x = (x); \ ret = (__x < 0) ? -__x : __x; \ } else { \ int __x = (x); \ ret = (__x < 0) ? -__x : __x; \ } \ ret; \ |
1da177e4c Linux-2.6.12-rc2 |
152 |
}) |
658716d19 div64_u64(): impr... |
153 154 155 156 |
#define abs64(x) ({ \ s64 __x = (x); \ (__x < 0) ? -__x : __x; \ }) |
3ee1afa30 x86: some lock an... |
157 158 159 160 161 162 163 164 |
#ifdef CONFIG_PROVE_LOCKING void might_fault(void); #else static inline void might_fault(void) { might_sleep(); } #endif |
e041c6834 [PATCH] Notifier ... |
165 |
extern struct atomic_notifier_head panic_notifier_list; |
c7ff0d9c9 panic: keep blink... |
166 |
extern long (*panic_blink)(int state); |
1da177e4c Linux-2.6.12-rc2 |
167 |
NORET_TYPE void panic(const char * fmt, ...) |
a586df067 x86: Support __at... |
168 |
__attribute__ ((NORET_AND format (printf, 1, 2))) __cold; |
dd287796d [PATCH] pause_on_... |
169 170 |
extern void oops_enter(void); extern void oops_exit(void); |
863a60492 lib/bug.c: add oo... |
171 |
void print_oops_end_marker(void); |
dd287796d [PATCH] pause_on_... |
172 |
extern int oops_may_print(void); |
ec7015840 Remove fastcall f... |
173 |
NORET_TYPE void do_exit(long error_code) |
1da177e4c Linux-2.6.12-rc2 |
174 175 176 177 178 179 180 |
ATTRIB_NORET; NORET_TYPE void complete_and_exit(struct completion *, long) ATTRIB_NORET; extern unsigned long simple_strtoul(const char *,char **,unsigned int); extern long simple_strtol(const char *,char **,unsigned int); extern unsigned long long simple_strtoull(const char *,char **,unsigned int); extern long long simple_strtoll(const char *,char **,unsigned int); |
a55621f15 include/linux/ker... |
181 182 183 184 |
extern int __must_check strict_strtoul(const char *, unsigned int, unsigned long *); extern int __must_check strict_strtol(const char *, unsigned int, long *); extern int __must_check strict_strtoull(const char *, unsigned int, unsigned long long *); extern int __must_check strict_strtoll(const char *, unsigned int, long long *); |
1da177e4c Linux-2.6.12-rc2 |
185 186 187 188 189 190 191 192 193 194 195 196 |
extern int sprintf(char * buf, const char * fmt, ...) __attribute__ ((format (printf, 2, 3))); extern int vsprintf(char *buf, const char *, va_list) __attribute__ ((format (printf, 2, 0))); extern int snprintf(char * buf, size_t size, const char * fmt, ...) __attribute__ ((format (printf, 3, 4))); extern int vsnprintf(char *buf, size_t size, const char *fmt, va_list args) __attribute__ ((format (printf, 3, 0))); extern int scnprintf(char * buf, size_t size, const char * fmt, ...) __attribute__ ((format (printf, 3, 4))); extern int vscnprintf(char *buf, size_t size, const char *fmt, va_list args) __attribute__ ((format (printf, 3, 0))); |
e905914f9 [PATCH] Implement... |
197 198 |
extern char *kasprintf(gfp_t gfp, const char *fmt, ...) __attribute__ ((format (printf, 2, 3))); |
11443ec7d Add kvasprintf() |
199 |
extern char *kvasprintf(gfp_t gfp, const char *fmt, va_list args); |
1da177e4c Linux-2.6.12-rc2 |
200 201 202 203 204 205 206 207 |
extern int sscanf(const char *, const char *, ...) __attribute__ ((format (scanf, 2, 3))); extern int vsscanf(const char *, const char *, va_list) __attribute__ ((format (scanf, 2, 0))); extern int get_option(char **str, int *pint); extern char *get_options(const char *str, int nints, int *ints); |
d974ae379 generic, memparse... |
208 |
extern unsigned long long memparse(const char *ptr, char **retptr); |
1da177e4c Linux-2.6.12-rc2 |
209 |
|
5e3766138 [PATCH] symbol_pu... |
210 |
extern int core_kernel_text(unsigned long addr); |
1da177e4c Linux-2.6.12-rc2 |
211 212 |
extern int __kernel_text_address(unsigned long addr); extern int kernel_text_address(unsigned long addr); |
ab7476cf7 debug: add notifi... |
213 |
extern int func_ptr_is_kernel_text(void *ptr); |
ab7476cf7 debug: add notifi... |
214 |
|
04a2e6a5c [PATCH] pid: make... |
215 216 |
struct pid; extern struct pid *session_of_pgrp(struct pid *pgrp); |
1da177e4c Linux-2.6.12-rc2 |
217 |
|
1da177e4c Linux-2.6.12-rc2 |
218 |
unsigned long int_sqrt(unsigned long); |
1da177e4c Linux-2.6.12-rc2 |
219 |
extern void bust_spinlocks(int yes); |
e3e8a75d2 [PATCH] Extract a... |
220 |
extern void wake_up_klogd(void); |
1da177e4c Linux-2.6.12-rc2 |
221 |
extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() is in progress */ |
aa7271076 [PATCH] the sched... |
222 |
extern int panic_timeout; |
1da177e4c Linux-2.6.12-rc2 |
223 |
extern int panic_on_oops; |
8da5adda9 [PATCH] x86: Allo... |
224 |
extern int panic_on_unrecovered_nmi; |
5211a242d x86: Add sysctl t... |
225 |
extern int panic_on_io_nmi; |
1da177e4c Linux-2.6.12-rc2 |
226 |
extern const char *print_tainted(void); |
25ddbb18a Make the taint fl... |
227 228 229 |
extern void add_taint(unsigned flag); extern int test_taint(unsigned flag); extern unsigned long get_taint(void); |
b920de1b7 mn10300: add the ... |
230 |
extern int root_mountflags; |
1da177e4c Linux-2.6.12-rc2 |
231 |
|
2ce802f62 lockdep: Move ear... |
232 |
extern bool early_boot_irqs_disabled; |
1da177e4c Linux-2.6.12-rc2 |
233 234 235 236 237 238 239 |
/* Values used for system_state */ extern enum system_states { SYSTEM_BOOTING, SYSTEM_RUNNING, SYSTEM_HALT, SYSTEM_POWER_OFF, SYSTEM_RESTART, |
729b4d4ce [ACPI] fix reboot... |
240 |
SYSTEM_SUSPEND_DISK, |
1da177e4c Linux-2.6.12-rc2 |
241 |
} system_state; |
25ddbb18a Make the taint fl... |
242 243 244 245 246 247 248 249 250 251 |
#define TAINT_PROPRIETARY_MODULE 0 #define TAINT_FORCED_MODULE 1 #define TAINT_UNSAFE_SMP 2 #define TAINT_FORCED_RMMOD 3 #define TAINT_MACHINE_CHECK 4 #define TAINT_BAD_PAGE 5 #define TAINT_USER 6 #define TAINT_DIE 7 #define TAINT_OVERRIDDEN_ACPI_TABLE 8 #define TAINT_WARN 9 |
26e9a3977 Merge git://git.k... |
252 |
#define TAINT_CRAP 10 |
92946bc72 panic: Add taint ... |
253 |
#define TAINT_FIRMWARE_WORKAROUND 11 |
1da177e4c Linux-2.6.12-rc2 |
254 |
|
3fc957721 lib: create commo... |
255 256 257 258 259 260 261 262 263 264 |
extern const char hex_asc[]; #define hex_asc_lo(x) hex_asc[((x) & 0x0f)] #define hex_asc_hi(x) hex_asc[((x) & 0xf0) >> 4] static inline char *pack_hex_byte(char *buf, u8 byte) { *buf++ = hex_asc_hi(byte); *buf++ = hex_asc_lo(byte); return buf; } |
99eaf3c45 lib/hexdump |
265 |
|
903788892 lib: introduce co... |
266 |
extern int hex_to_bin(char ch); |
dc88e4602 lib: hex2bin conv... |
267 |
extern void hex2bin(u8 *dst, const char *src, size_t count); |
903788892 lib: introduce co... |
268 |
|
8a64f336b kernel.h: add pri... |
269 |
/* |
526211bc5 tracing: move uti... |
270 |
* General tracing related utility functions - trace_printk(), |
2002c258f tracing: add trac... |
271 272 273 274 |
* tracing_on/tracing_off and tracing_start()/tracing_stop * * Use tracing_on/tracing_off when you want to quickly turn on or off * tracing. It simply enables or disables the recording of the trace events. |
156f5a780 debugfs: Fix term... |
275 |
* This also corresponds to the user space /sys/kernel/debug/tracing/tracing_on |
2002c258f tracing: add trac... |
276 277 278 279 280 281 282 283 284 285 286 |
* file, which gives a means for the kernel and userspace to interact. * Place a tracing_off() in the kernel where you want tracing to end. * From user space, examine the trace, and then echo 1 > tracing_on * to continue tracing. * * tracing_stop/tracing_start has slightly more overhead. It is used * by things like suspend to ram where disabling the recording of the * trace is not enough, but tracing must actually stop because things * like calling smp_processor_id() may crash the system. * * Most likely, you want to use tracing_on/tracing_off. |
526211bc5 tracing: move uti... |
287 |
*/ |
2002c258f tracing: add trac... |
288 289 290 291 292 293 294 295 296 297 298 299 |
#ifdef CONFIG_RING_BUFFER void tracing_on(void); void tracing_off(void); /* trace_off_permanent stops recording with no way to bring it back */ void tracing_off_permanent(void); int tracing_is_on(void); #else static inline void tracing_on(void) { } static inline void tracing_off(void) { } static inline void tracing_off_permanent(void) { } static inline int tracing_is_on(void) { return 0; } #endif |
cecbca96d tracing: Dump eit... |
300 301 302 303 304 305 |
enum ftrace_dump_mode { DUMP_NONE, DUMP_ALL, DUMP_ORIG, }; |
526211bc5 tracing: move uti... |
306 307 308 309 |
#ifdef CONFIG_TRACING extern void tracing_start(void); extern void tracing_stop(void); extern void ftrace_off_permanent(void); |
769b0441f tracing/core: dro... |
310 311 312 313 314 315 316 317 318 |
static inline void __attribute__ ((format (printf, 1, 2))) ____trace_printk_check_format(const char *fmt, ...) { } #define __trace_printk_check_format(fmt, args...) \ do { \ if (0) \ ____trace_printk_check_format(fmt, ##args); \ } while (0) |
526211bc5 tracing: move uti... |
319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 |
/** * trace_printk - printf formatting in the ftrace buffer * @fmt: the printf format for printing * * Note: __trace_printk is an internal function for trace_printk and * the @ip is passed in via the trace_printk macro. * * This function allows a kernel developer to debug fast path sections * that printk is not appropriate for. By scattering in various * printk like tracing in the code, a developer can quickly see * where problems are occurring. * * This is intended as a debugging tool for the developer only. * Please refrain from leaving trace_printks scattered around in * your code. */ |
769b0441f tracing/core: dro... |
335 336 337 |
#define trace_printk(fmt, args...) \ do { \ |
769b0441f tracing/core: dro... |
338 |
__trace_printk_check_format(fmt, ##args); \ |
48ead0203 tracing/core: bri... |
339 340 341 342 343 344 345 346 |
if (__builtin_constant_p(fmt)) { \ static const char *trace_printk_fmt \ __attribute__((section("__trace_printk_fmt"))) = \ __builtin_constant_p(fmt) ? fmt : NULL; \ \ __trace_bprintk(_THIS_IP_, trace_printk_fmt, ##args); \ } else \ __trace_printk(_THIS_IP_, fmt, ##args); \ |
769b0441f tracing/core: dro... |
347 |
} while (0) |
526211bc5 tracing: move uti... |
348 |
extern int |
48ead0203 tracing/core: bri... |
349 350 351 352 |
__trace_bprintk(unsigned long ip, const char *fmt, ...) __attribute__ ((format (printf, 2, 3))); extern int |
526211bc5 tracing: move uti... |
353 354 |
__trace_printk(unsigned long ip, const char *fmt, ...) __attribute__ ((format (printf, 2, 3))); |
769b0441f tracing/core: dro... |
355 |
|
03889384c tracing: Add trac... |
356 |
extern void trace_dump_stack(void); |
48ead0203 tracing/core: bri... |
357 358 359 360 361 |
/* * The double __builtin_constant_p is because gcc will give us an error * if we try to allocate the static variable to fmt if it is not a * constant. Even with the outer if statement. */ |
769b0441f tracing/core: dro... |
362 363 |
#define ftrace_vprintk(fmt, vargs) \ do { \ |
48ead0203 tracing/core: bri... |
364 365 366 367 |
if (__builtin_constant_p(fmt)) { \ static const char *trace_printk_fmt \ __attribute__((section("__trace_printk_fmt"))) = \ __builtin_constant_p(fmt) ? fmt : NULL; \ |
7bffc23e5 tracing: optimize... |
368 |
\ |
48ead0203 tracing/core: bri... |
369 370 371 |
__ftrace_vbprintk(_THIS_IP_, trace_printk_fmt, vargs); \ } else \ __ftrace_vprintk(_THIS_IP_, fmt, vargs); \ |
769b0441f tracing/core: dro... |
372 |
} while (0) |
526211bc5 tracing: move uti... |
373 |
extern int |
48ead0203 tracing/core: bri... |
374 375 376 |
__ftrace_vbprintk(unsigned long ip, const char *fmt, va_list ap); extern int |
526211bc5 tracing: move uti... |
377 |
__ftrace_vprintk(unsigned long ip, const char *fmt, va_list ap); |
769b0441f tracing/core: dro... |
378 |
|
cecbca96d tracing: Dump eit... |
379 |
extern void ftrace_dump(enum ftrace_dump_mode oops_dump_mode); |
526211bc5 tracing: move uti... |
380 |
#else |
526211bc5 tracing: move uti... |
381 382 383 384 385 386 |
static inline int trace_printk(const char *fmt, ...) __attribute__ ((format (printf, 1, 2))); static inline void tracing_start(void) { } static inline void tracing_stop(void) { } static inline void ftrace_off_permanent(void) { } |
e36c54582 tracing: Fix retu... |
387 |
static inline void trace_dump_stack(void) { } |
526211bc5 tracing: move uti... |
388 389 390 391 392 393 394 395 396 397 |
static inline int trace_printk(const char *fmt, ...) { return 0; } static inline int ftrace_vprintk(const char *fmt, va_list ap) { return 0; } |
cecbca96d tracing: Dump eit... |
398 |
static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { } |
769b0441f tracing/core: dro... |
399 |
#endif /* CONFIG_TRACING */ |
526211bc5 tracing: move uti... |
400 401 |
/* |
bdf4bbaae Add macros simila... |
402 |
* min()/max()/clamp() macros that also do |
1da177e4c Linux-2.6.12-rc2 |
403 404 405 |
* strict type-checking.. See the * "unnecessary" pointer comparison. */ |
bdf4bbaae Add macros simila... |
406 407 408 409 410 411 412 413 414 415 416 |
#define min(x, y) ({ \ typeof(x) _min1 = (x); \ typeof(y) _min2 = (y); \ (void) (&_min1 == &_min2); \ _min1 < _min2 ? _min1 : _min2; }) #define max(x, y) ({ \ typeof(x) _max1 = (x); \ typeof(y) _max2 = (y); \ (void) (&_max1 == &_max2); \ _max1 > _max2 ? _max1 : _max2; }) |
f27c85c56 kernel.h: add {mi... |
417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 |
#define min3(x, y, z) ({ \ typeof(x) _min1 = (x); \ typeof(y) _min2 = (y); \ typeof(z) _min3 = (z); \ (void) (&_min1 == &_min2); \ (void) (&_min1 == &_min3); \ _min1 < _min2 ? (_min1 < _min3 ? _min1 : _min3) : \ (_min2 < _min3 ? _min2 : _min3); }) #define max3(x, y, z) ({ \ typeof(x) _max1 = (x); \ typeof(y) _max2 = (y); \ typeof(z) _max3 = (z); \ (void) (&_max1 == &_max2); \ (void) (&_max1 == &_max3); \ _max1 > _max2 ? (_max1 > _max3 ? _max1 : _max3) : \ (_max2 > _max3 ? _max2 : _max3); }) |
bdf4bbaae Add macros simila... |
434 |
/** |
c8bf13368 Consolidate min_n... |
435 436 437 438 439 440 441 442 443 444 |
* min_not_zero - return the minimum that is _not_ zero, unless both are zero * @x: value1 * @y: value2 */ #define min_not_zero(x, y) ({ \ typeof(x) __x = (x); \ typeof(y) __y = (y); \ __x == 0 ? __y : ((__y == 0) ? __x : min(__x, __y)); }) /** |
bdf4bbaae Add macros simila... |
445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 |
* clamp - return a value clamped to a given range with strict typechecking * @val: current value * @min: minimum allowable value * @max: maximum allowable value * * This macro does strict typechecking of min/max to make sure they are of the * same type as val. See the unnecessary pointer comparisons. */ #define clamp(val, min, max) ({ \ typeof(val) __val = (val); \ typeof(min) __min = (min); \ typeof(max) __max = (max); \ (void) (&__val == &__min); \ (void) (&__val == &__max); \ __val = __val < __min ? __min: __val; \ __val > __max ? __max: __val; }) |
1da177e4c Linux-2.6.12-rc2 |
461 462 463 464 465 |
/* * ..and if you can't take the strict * types, you can specify one yourself. * |
bdf4bbaae Add macros simila... |
466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 |
* Or not use min/max/clamp at all, of course. */ #define min_t(type, x, y) ({ \ type __min1 = (x); \ type __min2 = (y); \ __min1 < __min2 ? __min1: __min2; }) #define max_t(type, x, y) ({ \ type __max1 = (x); \ type __max2 = (y); \ __max1 > __max2 ? __max1: __max2; }) /** * clamp_t - return a value clamped to a given range using a given type * @type: the type of variable to use * @val: current value * @min: minimum allowable value * @max: maximum allowable value * * This macro does no typechecking and uses temporary variables of type * 'type' to make all the comparisons. |
1da177e4c Linux-2.6.12-rc2 |
487 |
*/ |
bdf4bbaae Add macros simila... |
488 489 490 491 492 493 |
#define clamp_t(type, val, min, max) ({ \ type __val = (val); \ type __min = (min); \ type __max = (max); \ __val = __val < __min ? __min: __val; \ __val > __max ? __max: __val; }) |
1da177e4c Linux-2.6.12-rc2 |
494 |
|
bdf4bbaae Add macros simila... |
495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 |
/** * clamp_val - return a value clamped to a given range using val's type * @val: current value * @min: minimum allowable value * @max: maximum allowable value * * This macro does no typechecking and uses temporary variables of whatever * type the input argument 'val' is. This is useful when val is an unsigned * type and min and max are literals that will otherwise be assigned a signed * integer type. */ #define clamp_val(val, min, max) ({ \ typeof(val) __val = (val); \ typeof(val) __min = (min); \ typeof(val) __max = (max); \ __val = __val < __min ? __min: __val; \ __val > __max ? __max: __val; }) |
1da177e4c Linux-2.6.12-rc2 |
512 |
|
91f68b735 generic swap(): i... |
513 514 515 516 |
/* * swap - swap value of @a and @b */ |
ac7b90049 generic swap(): d... |
517 518 |
#define swap(a, b) \ do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0) |
91f68b735 generic swap(): i... |
519 |
|
1da177e4c Linux-2.6.12-rc2 |
520 521 |
/** * container_of - cast a member of a structure out to the containing structure |
1da177e4c Linux-2.6.12-rc2 |
522 523 524 525 526 527 |
* @ptr: the pointer to the member. * @type: the type of the container struct this is embedded in. * @member: the name of the member within the struct. * */ #define container_of(ptr, type, member) ({ \ |
78db2ad6f include/linux: tr... |
528 529 |
const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) |
1da177e4c Linux-2.6.12-rc2 |
530 |
|
d4d23add3 [PATCH] Common co... |
531 532 |
struct sysinfo; extern int do_sysinfo(struct sysinfo *info); |
1da177e4c Linux-2.6.12-rc2 |
533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 |
#endif /* __KERNEL__ */ #define SI_LOAD_SHIFT 16 struct sysinfo { long uptime; /* Seconds since boot */ unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ unsigned long totalram; /* Total usable main memory size */ unsigned long freeram; /* Available memory size */ unsigned long sharedram; /* Amount of shared memory */ unsigned long bufferram; /* Memory used by buffers */ unsigned long totalswap; /* Total swap space size */ unsigned long freeswap; /* swap space still available */ unsigned short procs; /* Number of current processes */ unsigned short pad; /* explicit padding for m68k */ unsigned long totalhigh; /* Total high memory size */ unsigned long freehigh; /* Available high memory size */ unsigned int mem_unit; /* Memory unit size in bytes */ char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding: libc5 uses this.. */ }; |
cc8ef6eb2 kernel.h: add BUI... |
552 553 554 |
/* Force a compilation error if a constant expression is not a power of 2 */ #define BUILD_BUG_ON_NOT_POWER_OF_2(n) \ BUILD_BUG_ON((n) == 0 || (((n) & ((n) - 1)) != 0)) |
4552d5dc0 [PATCH] x86_64: r... |
555 556 557 558 |
/* Force a compilation error if condition is true, but also produce a result (of value 0 and type size_t), so the expression can be used e.g. in a structure initializer (or where-ever else comma expressions aren't permitted). */ |
8c87df457 BUILD_BUG_ON(): f... |
559 560 |
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) #define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); })) |
4552d5dc0 [PATCH] x86_64: r... |
561 |
|
7ef88ad56 BUILD_BUG_ON: mak... |
562 563 |
/** * BUILD_BUG_ON - break compile if a condition is true. |
ffbbf2da9 kernel.h: fix ker... |
564 |
* @condition: the condition which the compiler should know is false. |
7ef88ad56 BUILD_BUG_ON: mak... |
565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 |
* * If you have some code which relies on certain constants being equal, or * other compile-time-evaluated condition, you should use BUILD_BUG_ON to * detect if someone changes it. * * The implementation uses gcc's reluctance to create a negative array, but * gcc (as of 4.4) only emits that error for obvious cases (eg. not arguments * to inline functions). So as a fallback we use the optimizer; if it can't * prove the condition is false, it will cause a link error on the undefined * "__build_bug_on_failed". This error message can be harder to track down * though, hence the two different methods. */ #ifndef __OPTIMIZE__ #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)])) #else extern int __build_bug_on_failed; #define BUILD_BUG_ON(condition) \ do { \ ((void)sizeof(char[1 - 2*!!(condition)])); \ if (condition) __build_bug_on_failed = 1; \ } while(0) #endif |
7ef88ad56 BUILD_BUG_ON: mak... |
587 |
|
1da177e4c Linux-2.6.12-rc2 |
588 |
/* Trap pasters of __FUNCTION__ at compile-time */ |
1da177e4c Linux-2.6.12-rc2 |
589 |
#define __FUNCTION__ (__func__) |
1da177e4c Linux-2.6.12-rc2 |
590 |
|
08e0f6a97 [PATCH] Add NUMA_... |
591 592 593 594 595 596 |
/* This helps us to avoid #ifdef CONFIG_NUMA */ #ifdef CONFIG_NUMA #define NUMA_BUILD 1 #else #define NUMA_BUILD 0 #endif |
3e7d34497 mm: vmscan: recla... |
597 598 599 600 601 602 |
/* This helps us avoid #ifdef CONFIG_COMPACTION */ #ifdef CONFIG_COMPACTION #define COMPACTION_BUILD 1 #else #define COMPACTION_BUILD 0 #endif |
29e71abf5 ftrace: rebuild e... |
603 604 605 606 |
/* Rebuild everything on CONFIG_FTRACE_MCOUNT_RECORD */ #ifdef CONFIG_FTRACE_MCOUNT_RECORD # define REBUILD_DUE_TO_FTRACE_MCOUNT_RECORD #endif |
1da177e4c Linux-2.6.12-rc2 |
607 |
#endif |