Blame view

include/linux/kernel.h 11.6 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  #ifndef _LINUX_KERNEL_H
  #define _LINUX_KERNEL_H
  
  /*
   * 'kernel.h' contains some often-used function prototypes etc
   */
  
  #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   David Howells   [PATCH] LOG2: Imp...
16
  #include <linux/log2.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
17
18
  #include <asm/byteorder.h>
  #include <asm/bug.h>
3eb3c740f   Roman Zippel   [PATCH] fix linux...
19
20
  extern const char linux_banner[];
  extern const char linux_proc_banner[];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
21
22
23
24
25
26
  #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   OGAWA Hirofumi   [PATCH] writeback...
27
28
29
  #define LLONG_MAX	((long long)(~0ULL>>1))
  #define LLONG_MIN	(-LLONG_MAX - 1)
  #define ULLONG_MAX	(~0ULL)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
30
31
  
  #define STACK_MAGIC	0xdeadbeef
2ea581447   Linus Torvalds   Fix 'ALIGN()' mac...
32
33
  #define ALIGN(x,a)		__ALIGN_MASK(x,(typeof(x))(a)-1)
  #define __ALIGN_MASK(x,mask)	(((x)+(mask))&~(mask))
c5e631cf6   Rusty Russell   ARRAY_SIZE: check...
34
  #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
4552d5dc0   Jan Beulich   [PATCH] x86_64: r...
35
  #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))
930631edd   Steven Whitehouse   [PATCH] add DIV_R...
36
  #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
b4cac1a02   David Howells   [PATCH] FDPIC: Mo...
37
  #define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
38

218e180e7   Andrew Morton   add upper-32-bits...
39
40
41
42
43
44
45
46
47
  /**
   * 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))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
  #define	KERN_EMERG	"<0>"	/* system is unusable			*/
  #define	KERN_ALERT	"<1>"	/* action must be taken immediately	*/
  #define	KERN_CRIT	"<2>"	/* critical conditions			*/
  #define	KERN_ERR	"<3>"	/* error conditions			*/
  #define	KERN_WARNING	"<4>"	/* warning conditions			*/
  #define	KERN_NOTICE	"<5>"	/* normal but significant condition	*/
  #define	KERN_INFO	"<6>"	/* informational			*/
  #define	KERN_DEBUG	"<7>"	/* debug-level messages			*/
  
  extern int console_printk[];
  
  #define console_loglevel (console_printk[0])
  #define default_message_loglevel (console_printk[1])
  #define minimum_console_loglevel (console_printk[2])
  #define default_console_loglevel (console_printk[3])
  
  struct completion;
df2e71fb9   Andrew Morton   [PATCH] dump_thre...
65
66
  struct pt_regs;
  struct user;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
67
68
69
70
71
72
73
74
  
  /**
   * 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   Jim Cromie   fix spelling erro...
75
   * be bitten later when the calling function happens to sleep when it is not
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
76
77
   * supposed to.
   */
f8cbd99bd   Ingo Molnar   [PATCH] sched: vo...
78
79
80
81
82
83
  #ifdef CONFIG_PREEMPT_VOLUNTARY
  extern int cond_resched(void);
  # define might_resched() cond_resched()
  #else
  # define might_resched() do { } while (0)
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
84
  #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP
f8cbd99bd   Ingo Molnar   [PATCH] sched: vo...
85
86
87
    void __might_sleep(char *file, int line);
  # define might_sleep() \
  	do { __might_sleep(__FILE__, __LINE__); might_resched(); } while (0)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
88
  #else
f8cbd99bd   Ingo Molnar   [PATCH] sched: vo...
89
  # define might_sleep() do { might_resched(); } while (0)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
90
  #endif
368a5fa1f   Hua Zhong   [PATCH] remove un...
91
  #define might_sleep_if(cond) do { if (cond) might_sleep(); } while (0)
f8cbd99bd   Ingo Molnar   [PATCH] sched: vo...
92

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
93
94
95
96
  #define abs(x) ({				\
  		int __x = (x);			\
  		(__x < 0) ? -__x : __x;		\
  	})
e041c6834   Alan Stern   [PATCH] Notifier ...
97
  extern struct atomic_notifier_head panic_notifier_list;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
98
99
  extern long (*panic_blink)(long time);
  NORET_TYPE void panic(const char * fmt, ...)
a586df067   Andi Kleen   x86: Support __at...
100
  	__attribute__ ((NORET_AND format (printf, 1, 2))) __cold;
dd287796d   Andrew Morton   [PATCH] pause_on_...
101
102
103
  extern void oops_enter(void);
  extern void oops_exit(void);
  extern int oops_may_print(void);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
  fastcall NORET_TYPE void do_exit(long error_code)
  	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);
  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   Jeremy Fitzhardinge   [PATCH] Implement...
124
125
  extern char *kasprintf(gfp_t gfp, const char *fmt, ...)
  	__attribute__ ((format (printf, 2, 3)));
11443ec7d   Jeremy Fitzhardinge   Add kvasprintf()
126
  extern char *kvasprintf(gfp_t gfp, const char *fmt, va_list args);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
127
128
129
130
131
132
133
134
135
  
  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);
  extern unsigned long long memparse(char *ptr, char **retptr);
5e3766138   Trent Piepho   [PATCH] symbol_pu...
136
  extern int core_kernel_text(unsigned long addr);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
137
138
  extern int __kernel_text_address(unsigned long addr);
  extern int kernel_text_address(unsigned long addr);
04a2e6a5c   Eric W. Biederman   [PATCH] pid: make...
139
140
  struct pid;
  extern struct pid *session_of_pgrp(struct pid *pgrp);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
141

df2e71fb9   Andrew Morton   [PATCH] dump_thre...
142
  extern void dump_thread(struct pt_regs *regs, struct user *dump);
d59745ce3   Matt Mackall   [PATCH] clean up ...
143
  #ifdef CONFIG_PRINTK
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
144
145
146
  asmlinkage int vprintk(const char *fmt, va_list args)
  	__attribute__ ((format (printf, 1, 0)));
  asmlinkage int printk(const char * fmt, ...)
a586df067   Andi Kleen   x86: Support __at...
147
  	__attribute__ ((format (printf, 1, 2))) __cold;
d59745ce3   Matt Mackall   [PATCH] clean up ...
148
149
150
151
152
153
  #else
  static inline int vprintk(const char *s, va_list args)
  	__attribute__ ((format (printf, 1, 0)));
  static inline int vprintk(const char *s, va_list args) { return 0; }
  static inline int printk(const char *s, ...)
  	__attribute__ ((format (printf, 1, 2)));
a586df067   Andi Kleen   x86: Support __at...
154
  static inline int __cold printk(const char *s, ...) { return 0; }
d59745ce3   Matt Mackall   [PATCH] clean up ...
155
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
156
157
  
  unsigned long int_sqrt(unsigned long);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
158
159
  extern int printk_ratelimit(void);
  extern int __printk_ratelimit(int ratelimit_jiffies, int ratelimit_burst);
f46c48335   Andrew Morton   [PATCH] Add print...
160
161
  extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
  				unsigned int interval_msec);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
162
163
164
165
166
167
168
169
170
171
172
173
174
  
  static inline void console_silent(void)
  {
  	console_loglevel = 0;
  }
  
  static inline void console_verbose(void)
  {
  	if (console_loglevel)
  		console_loglevel = 15;
  }
  
  extern void bust_spinlocks(int yes);
e3e8a75d2   Kirill Korotaev   [PATCH] Extract a...
175
  extern void wake_up_klogd(void);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
176
  extern int oops_in_progress;		/* If set, an oops, panic(), BUG() or die() is in progress */
aa7271076   Adrian Bunk   [PATCH] the sched...
177
  extern int panic_timeout;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
178
  extern int panic_on_oops;
8da5adda9   Don Zickus   [PATCH] x86: Allo...
179
  extern int panic_on_unrecovered_nmi;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
180
181
182
183
184
185
186
187
188
189
190
  extern int tainted;
  extern const char *print_tainted(void);
  extern void add_taint(unsigned);
  
  /* Values used for system_state */
  extern enum system_states {
  	SYSTEM_BOOTING,
  	SYSTEM_RUNNING,
  	SYSTEM_HALT,
  	SYSTEM_POWER_OFF,
  	SYSTEM_RESTART,
729b4d4ce   Alexey Starikovskiy   [ACPI] fix reboot...
191
  	SYSTEM_SUSPEND_DISK,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
192
193
194
195
196
197
198
199
  } system_state;
  
  #define TAINT_PROPRIETARY_MODULE	(1<<0)
  #define TAINT_FORCED_MODULE		(1<<1)
  #define TAINT_UNSAFE_SMP		(1<<2)
  #define TAINT_FORCED_RMMOD		(1<<3)
  #define TAINT_MACHINE_CHECK		(1<<4)
  #define TAINT_BAD_PAGE			(1<<5)
34f5a3989   Theodore Ts'o   [PATCH] Add TAINT...
200
  #define TAINT_USER			(1<<6)
bcdcd8e72   Pavel Emelianov   Report that kerne...
201
  #define TAINT_DIE			(1<<7)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
202

a586df067   Andi Kleen   x86: Support __at...
203
  extern void dump_stack(void) __cold;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
204

99eaf3c45   Randy Dunlap   lib/hexdump
205
206
207
208
209
  enum {
  	DUMP_PREFIX_NONE,
  	DUMP_PREFIX_ADDRESS,
  	DUMP_PREFIX_OFFSET
  };
c79092349   Randy Dunlap   hexdump: more out...
210
211
212
213
214
215
216
217
  extern void hex_dump_to_buffer(const void *buf, size_t len,
  				int rowsize, int groupsize,
  				char *linebuf, size_t linebuflen, bool ascii);
  extern void print_hex_dump(const char *level, const char *prefix_str,
  				int prefix_type, int rowsize, int groupsize,
  				void *buf, size_t len, bool ascii);
  extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
  			void *buf, size_t len);
99eaf3c45   Randy Dunlap   lib/hexdump
218
  #define hex_asc(x)	"0123456789abcdef"[x]
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
219
  #ifdef DEBUG
1cc6daf23   Pavel Machek   pr_debug() should...
220
  /* If you are writing a driver, please use dev_dbg instead */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
221
222
223
  #define pr_debug(fmt,arg...) \
  	printk(KERN_DEBUG fmt,##arg)
  #else
8b2a1fd1b   Zach Brown   [PATCH] pr_debug:...
224
225
226
227
  static inline int __attribute__ ((format (printf, 1, 2))) pr_debug(const char * fmt, ...)
  {
  	return 0;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
228
229
230
231
232
233
234
235
236
237
238
239
240
241
  #endif
  
  #define pr_info(fmt,arg...) \
  	printk(KERN_INFO fmt,##arg)
  
  /*
   *      Display an IP address in readable format.
   */
  
  #define NIPQUAD(addr) \
  	((unsigned char *)&addr)[0], \
  	((unsigned char *)&addr)[1], \
  	((unsigned char *)&addr)[2], \
  	((unsigned char *)&addr)[3]
46b86a2da   Joe Perches   [NET]: Use NIP6_F...
242
  #define NIPQUAD_FMT "%u.%u.%u.%u"
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
243
244
245
246
247
248
249
250
251
252
  
  #define NIP6(addr) \
  	ntohs((addr).s6_addr16[0]), \
  	ntohs((addr).s6_addr16[1]), \
  	ntohs((addr).s6_addr16[2]), \
  	ntohs((addr).s6_addr16[3]), \
  	ntohs((addr).s6_addr16[4]), \
  	ntohs((addr).s6_addr16[5]), \
  	ntohs((addr).s6_addr16[6]), \
  	ntohs((addr).s6_addr16[7])
46b86a2da   Joe Perches   [NET]: Use NIP6_F...
253
  #define NIP6_FMT "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x"
9343e79a7   YOSHIFUJI Hideaki   [IPV6]: Preserve ...
254
  #define NIP6_SEQFMT "%04x%04x%04x%04x%04x%04x%04x%04x"
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
  
  #if defined(__LITTLE_ENDIAN)
  #define HIPQUAD(addr) \
  	((unsigned char *)&addr)[3], \
  	((unsigned char *)&addr)[2], \
  	((unsigned char *)&addr)[1], \
  	((unsigned char *)&addr)[0]
  #elif defined(__BIG_ENDIAN)
  #define HIPQUAD	NIPQUAD
  #else
  #error "Please fix asm/byteorder.h"
  #endif /* __LITTLE_ENDIAN */
  
  /*
   * min()/max() macros that also do
   * strict type-checking.. See the
   * "unnecessary" pointer comparison.
   */
  #define min(x,y) ({ \
  	typeof(x) _x = (x);	\
  	typeof(y) _y = (y);	\
  	(void) (&_x == &_y);		\
  	_x < _y ? _x : _y; })
  
  #define max(x,y) ({ \
  	typeof(x) _x = (x);	\
  	typeof(y) _y = (y);	\
  	(void) (&_x == &_y);		\
  	_x > _y ? _x : _y; })
  
  /*
   * ..and if you can't take the strict
   * types, you can specify one yourself.
   *
   * Or not use min/max at all, of course.
   */
  #define min_t(type,x,y) \
  	({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })
  #define max_t(type,x,y) \
  	({ type __x = (x); type __y = (y); __x > __y ? __x: __y; })
  
  
  /**
   * container_of - cast a member of a structure out to the containing structure
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
299
300
301
302
303
304
   * @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   Daniel Walker   include/linux: tr...
305
306
  	const typeof( ((type *)0)->member ) *__mptr = (ptr);	\
  	(type *)( (char *)__mptr - offsetof(type,member) );})
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
307
308
309
310
311
312
313
314
315
316
317
  
  /*
   * Check at compile time that something is of a particular type.
   * Always evaluates to 1 so you may use it easily in comparisons.
   */
  #define typecheck(type,x) \
  ({	type __dummy; \
  	typeof(x) __dummy2; \
  	(void)(&__dummy == &__dummy2); \
  	1; \
  })
711a660dc   Chuck Ebbert   [PATCH] mutex sub...
318
319
320
321
322
323
324
325
  /*
   * Check at compile time that 'function' is a certain type, or is a pointer
   * to that type (needs to use typedef for the function type.)
   */
  #define typecheck_fn(type,function) \
  ({	typeof(type) __tmp = function; \
  	(void)__tmp; \
  })
d4d23add3   Kyle McMartin   [PATCH] Common co...
326
327
  struct sysinfo;
  extern int do_sysinfo(struct sysinfo *info);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
  #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.. */
  };
c0398ee6c   Nikita Danilov   [PATCH] include/l...
347
  /* Force a compilation error if condition is true */
921717a2a   Andi Kleen   [PATCH] Make BUIL...
348
  #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
349

4552d5dc0   Jan Beulich   [PATCH] x86_64: r...
350
351
352
353
354
  /* 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). */
  #define BUILD_BUG_ON_ZERO(e) (sizeof(char[1 - 2 * !!(e)]) - 1)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
355
  /* Trap pasters of __FUNCTION__ at compile-time */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
356
  #define __FUNCTION__ (__func__)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
357

08e0f6a97   Christoph Lameter   [PATCH] Add NUMA_...
358
359
360
361
362
363
  /* This helps us to avoid #ifdef CONFIG_NUMA */
  #ifdef CONFIG_NUMA
  #define NUMA_BUILD 1
  #else
  #define NUMA_BUILD 0
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
364
  #endif