aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/kernel.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/kernel.h')
-rw-r--r--include/linux/kernel.h82
1 files changed, 71 insertions, 11 deletions
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index f4e3184fa054..9365227dbaf6 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -15,7 +15,6 @@
15#include <linux/bitops.h> 15#include <linux/bitops.h>
16#include <linux/log2.h> 16#include <linux/log2.h>
17#include <linux/typecheck.h> 17#include <linux/typecheck.h>
18#include <linux/ratelimit.h>
19#include <linux/dynamic_debug.h> 18#include <linux/dynamic_debug.h>
20#include <asm/byteorder.h> 19#include <asm/byteorder.h>
21#include <asm/bug.h> 20#include <asm/bug.h>
@@ -45,6 +44,16 @@ extern const char linux_proc_banner[];
45 44
46#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) 45#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
47 46
47/*
48 * This looks more complex than it should be. But we need to
49 * get the type for the ~ right in round_down (it needs to be
50 * as wide as the result!), and we want to evaluate the macro
51 * arguments just once each.
52 */
53#define __round_mask(x, y) ((__typeof__(x))((y)-1))
54#define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1)
55#define round_down(x, y) ((x) & ~__round_mask(x, y))
56
48#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) 57#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))
49#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) 58#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
50#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y)) 59#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))
@@ -125,7 +134,7 @@ extern int _cond_resched(void);
125#endif 134#endif
126 135
127#ifdef CONFIG_DEBUG_SPINLOCK_SLEEP 136#ifdef CONFIG_DEBUG_SPINLOCK_SLEEP
128 void __might_sleep(char *file, int line, int preempt_offset); 137 void __might_sleep(const char *file, int line, int preempt_offset);
129/** 138/**
130 * might_sleep - annotation for functions that can sleep 139 * might_sleep - annotation for functions that can sleep
131 * 140 *
@@ -139,7 +148,8 @@ extern int _cond_resched(void);
139# define might_sleep() \ 148# define might_sleep() \
140 do { __might_sleep(__FILE__, __LINE__, 0); might_resched(); } while (0) 149 do { __might_sleep(__FILE__, __LINE__, 0); might_resched(); } while (0)
141#else 150#else
142 static inline void __might_sleep(char *file, int line, int preempt_offset) { } 151 static inline void __might_sleep(const char *file, int line,
152 int preempt_offset) { }
143# define might_sleep() do { might_resched(); } while (0) 153# define might_sleep() do { might_resched(); } while (0)
144#endif 154#endif
145 155
@@ -241,8 +251,8 @@ asmlinkage int vprintk(const char *fmt, va_list args)
241asmlinkage int printk(const char * fmt, ...) 251asmlinkage int printk(const char * fmt, ...)
242 __attribute__ ((format (printf, 1, 2))) __cold; 252 __attribute__ ((format (printf, 1, 2))) __cold;
243 253
244extern struct ratelimit_state printk_ratelimit_state; 254extern int __printk_ratelimit(const char *func);
245extern int printk_ratelimit(void); 255#define printk_ratelimit() __printk_ratelimit(__func__)
246extern bool printk_timed_ratelimit(unsigned long *caller_jiffies, 256extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
247 unsigned int interval_msec); 257 unsigned int interval_msec);
248 258
@@ -252,10 +262,10 @@ extern int printk_delay_msec;
252 * Print a one-time message (analogous to WARN_ONCE() et al): 262 * Print a one-time message (analogous to WARN_ONCE() et al):
253 */ 263 */
254#define printk_once(x...) ({ \ 264#define printk_once(x...) ({ \
255 static bool __print_once = true; \ 265 static bool __print_once; \
256 \ 266 \
257 if (__print_once) { \ 267 if (!__print_once) { \
258 __print_once = false; \ 268 __print_once = true; \
259 printk(x); \ 269 printk(x); \
260 } \ 270 } \
261}) 271})
@@ -398,15 +408,58 @@ static inline char *pack_hex_byte(char *buf, u8 byte)
398 printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) 408 printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
399#elif defined(CONFIG_DYNAMIC_DEBUG) 409#elif defined(CONFIG_DYNAMIC_DEBUG)
400/* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */ 410/* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */
401#define pr_debug(fmt, ...) do { \ 411#define pr_debug(fmt, ...) \
402 dynamic_pr_debug(fmt, ##__VA_ARGS__); \ 412 dynamic_pr_debug(fmt, ##__VA_ARGS__)
403 } while (0)
404#else 413#else
405#define pr_debug(fmt, ...) \ 414#define pr_debug(fmt, ...) \
406 ({ if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); 0; }) 415 ({ if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); 0; })
407#endif 416#endif
408 417
409/* 418/*
419 * ratelimited messages with local ratelimit_state,
420 * no local ratelimit_state used in the !PRINTK case
421 */
422#ifdef CONFIG_PRINTK
423#define printk_ratelimited(fmt, ...) ({ \
424 static struct ratelimit_state _rs = { \
425 .interval = DEFAULT_RATELIMIT_INTERVAL, \
426 .burst = DEFAULT_RATELIMIT_BURST, \
427 }; \
428 \
429 if (__ratelimit(&_rs)) \
430 printk(fmt, ##__VA_ARGS__); \
431})
432#else
433/* No effect, but we still get type checking even in the !PRINTK case: */
434#define printk_ratelimited printk
435#endif
436
437#define pr_emerg_ratelimited(fmt, ...) \
438 printk_ratelimited(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
439#define pr_alert_ratelimited(fmt, ...) \
440 printk_ratelimited(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__)
441#define pr_crit_ratelimited(fmt, ...) \
442 printk_ratelimited(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
443#define pr_err_ratelimited(fmt, ...) \
444 printk_ratelimited(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
445#define pr_warning_ratelimited(fmt, ...) \
446 printk_ratelimited(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
447#define pr_notice_ratelimited(fmt, ...) \
448 printk_ratelimited(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
449#define pr_info_ratelimited(fmt, ...) \
450 printk_ratelimited(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
451/* no pr_cont_ratelimited, don't do that... */
452/* If you are writing a driver, please use dev_dbg instead */
453#if defined(DEBUG)
454#define pr_debug_ratelimited(fmt, ...) \
455 printk_ratelimited(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
456#else
457#define pr_debug_ratelimited(fmt, ...) \
458 ({ if (0) printk_ratelimited(KERN_DEBUG pr_fmt(fmt), \
459 ##__VA_ARGS__); 0; })
460#endif
461
462/*
410 * General tracing related utility functions - trace_printk(), 463 * General tracing related utility functions - trace_printk(),
411 * tracing_on/tracing_off and tracing_start()/tracing_stop 464 * tracing_on/tracing_off and tracing_start()/tracing_stop
412 * 465 *
@@ -493,6 +546,8 @@ extern int
493__trace_printk(unsigned long ip, const char *fmt, ...) 546__trace_printk(unsigned long ip, const char *fmt, ...)
494 __attribute__ ((format (printf, 2, 3))); 547 __attribute__ ((format (printf, 2, 3)));
495 548
549extern void trace_dump_stack(void);
550
496/* 551/*
497 * The double __builtin_constant_p is because gcc will give us an error 552 * The double __builtin_constant_p is because gcc will give us an error
498 * if we try to allocate the static variable to fmt if it is not a 553 * if we try to allocate the static variable to fmt if it is not a
@@ -526,6 +581,7 @@ trace_printk(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
526static inline void tracing_start(void) { } 581static inline void tracing_start(void) { }
527static inline void tracing_stop(void) { } 582static inline void tracing_stop(void) { }
528static inline void ftrace_off_permanent(void) { } 583static inline void ftrace_off_permanent(void) { }
584static inline void trace_dump_stack(void) { }
529static inline int 585static inline int
530trace_printk(const char *fmt, ...) 586trace_printk(const char *fmt, ...)
531{ 587{
@@ -689,6 +745,10 @@ struct sysinfo {
689/* Force a compilation error if condition is constant and true */ 745/* Force a compilation error if condition is constant and true */
690#define MAYBE_BUILD_BUG_ON(cond) ((void)sizeof(char[1 - 2 * !!(cond)])) 746#define MAYBE_BUILD_BUG_ON(cond) ((void)sizeof(char[1 - 2 * !!(cond)]))
691 747
748/* Force a compilation error if a constant expression is not a power of 2 */
749#define BUILD_BUG_ON_NOT_POWER_OF_2(n) \
750 BUILD_BUG_ON((n) == 0 || (((n) & ((n) - 1)) != 0))
751
692/* Force a compilation error if condition is true, but also produce a 752/* Force a compilation error if condition is true, but also produce a
693 result (of value 0 and type size_t), so the expression can be used 753 result (of value 0 and type size_t), so the expression can be used
694 e.g. in a structure initializer (or where-ever else comma expressions 754 e.g. in a structure initializer (or where-ever else comma expressions