kernel.h: move logging functions to separate file
cover kernel.h: move logging functions to separate file
kernel.h has gotten cluttered.
Unclutter it and make it kernel style compatible.
Joe Perches (3):
include/linux/logging.h: Separate logging functions out of kernel.h include/linux/logging.h: Reduce data usage of printk_once include/linux/kernel.h: neaten and group functions and definitions
include/linux/kernel.h | 754 ++++++++++++++++------------------------------- include/linux/logging.h | 313 ++++++++++++++++++++ 2 files changed, 573 insertions(+), 494 deletions(-) create mode 100644 include/linux/logging.h
PATCH 1/3 include/linux/logging.h: Separate logging functions out of kernel.h
Moved all logging/tracing bits to a separate file
Neatened a bit for checkpatch complaints
--- include/linux/kernel.h | 293 +------------------------------------------- include/linux/logging.h | 313 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 314 insertions(+), 292 deletions(-) create mode 100644 include/linux/logging.h
include/linux/kernel.h +1 -292
@@ -17,10 +17,10 @@#include <linux/typecheck.h> #include <linux/ratelimit.h> #include <linux/dynamic_debug.h> +#include <linux/logging.h> #include <asm/byteorder.h> #include <asm/bug.h> -struct ftrace_branch_data {const char *func;const char *file;
@@ -112,9 +112,6 @@ static inline void branch_profiler(struct ftrace_branch_data *data, int cond)#endif /* CONFIG_PROFILE_ALL_BRANCHES */ #endif -extern const char linux_banner[]; -extern const char linux_proc_banner[]; -#define USHORT_MAX ((u16)(~0U))#define SHORT_MAX ((s16)(USHORT_MAX>>1))#define SHORT_MIN (-SHORT_MAX - 1)
@@ -180,31 +177,6 @@ extern const char linux_proc_banner[];*/ #define lower_32_bits (n) ((u32)(n)) -#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 */ - -/* Use the default kernel loglevel */ -#define KERN_DEFAULT "<d>" -/* -* Annotation for a "continued" line of log printout (only done after a -* line that had no enclosing \n). Only to be used by core/arch code -* during early bootup (a continued line is not SMP-safe otherwise). -*/ -#define KERN_CONT "<c>" - -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 ;struct pt_regs ;struct user ;
@@ -303,93 +275,8 @@ extern int func_ptr_is_kernel_text(void *ptr);struct pid ;extern struct pid *session_of_pgrp (struct pid *pgrp); -/* -* FW_BUG -* Add this to a message where you are sure the firmware is buggy or behaves -* really stupid or out of spec. Be aware that the responsible BIOS developer -* should be able to fix this issue or at least get a concrete idea of the -* problem by reading your message without the need of looking at the kernel -* code. -* -* Use it for definite and high priority BIOS bugs. -* -* FW_WARN -* Use it for not that clear (e.g. could the kernel messed up things already?) -* and medium priority BIOS bugs. -* -* FW_INFO -* Use this one if you want to tell the user or vendor about something -* suspicious, but generally harmless related to the firmware. -* -* Use it for information or very low priority BIOS bugs. -*/ -#define FW_BUG "[Firmware Bug]: " -#define FW_WARN "[Firmware Warn]: " -#define FW_INFO "[Firmware Info]: " - -#ifdef CONFIG_PRINTK -asmlinkage int vprintk(const char *fmt, va_list args) - __attribute__ ((format (printf,1 ,0 ))); -asmlinkage int printk(const char * fmt, ...) - __attribute__ ((format (printf,1 ,2 )))__cold ; - -extern struct ratelimit_state printk_ratelimit_state; -extern int printk_ratelimit (void ); -extern bool printk_timed_ratelimit (unsigned long *caller_jiffies, -unsigned int interval_msec); - -/* -* Print a one-time message (analogous to WARN_ONCE() et al): -*/ -#define printk_once(x...) ({ \ - static int __print_once = 1; \ - \ - if (__print_once) { \ - __print_once = 0; \ - printk(x); \ - } \ -}) - -void log_buf_kexec_setup (void ); -#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 ))); -static inline int __cold printk (const char *s, ...) {return 0 ; } -static inline int printk_ratelimit (void ) {return 0 ; } -static inline bool printk_timed_ratelimit (unsigned long *caller_jiffies, \ -unsigned int interval_msec) \ - {return false; } - -/* No effect, but we still get type checking even in the !PRINTK case: */ -#define printk_once(x...) printk(x) - -static inline void log_buf_kexec_setup (void ) -{ -} -#endif - -extern int printk_needs_cpu (int cpu); -extern void printk_tick (void ); - -extern void asmlinkage __attribute__((format(printf, 1, 2))) - early_printk(const char *fmt, ...); -unsigned long int_sqrt (unsigned long ); -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);extern void wake_up_klogd (void );extern int oops_in_progress;/* If set, an oops, panic(), BUG() or die() is in progress */
@@ -397,7 +284,6 @@ extern int panic_timeout;extern int panic_on_oops;extern int panic_on_unrecovered_nmi;extern int panic_on_io_nmi; -extern const char *print_tainted (void );extern void add_taint (unsigned flag);extern int test_taint (unsigned flag);extern unsigned long get_taint (void );
@@ -452,183 +338,6 @@ static inline char *pack_hex_byte(char *buf, u8 byte)return buf; } -#ifndef pr_fmt -#define pr_fmt (fmt) fmt -#endif - -#define pr_emerg (fmt, ...) \ - printk(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__) -#define pr_alert (fmt, ...) \ - printk(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__) -#define pr_crit (fmt, ...) \ - printk(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__) -#define pr_err (fmt, ...) \ - printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__) -#define pr_warning (fmt, ...) \ - printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) -#define pr_notice (fmt, ...) \ - printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) -#define pr_info (fmt, ...) \ - printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) -#define pr_cont (fmt, ...) \ - printk(KERN_CONT fmt, ##__VA_ARGS__) - -/* pr_devel() should produce zero code unless DEBUG is defined */ -#ifdef DEBUG -#define pr_devel (fmt, ...) \ - printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) -#else -#define pr_devel (fmt, ...) \ - ({ if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); 0; }) -#endif - -/* If you are writing a driver, please use dev_dbg instead */ -#if defined(DEBUG ) -#define pr_debug (fmt, ...) \ - printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) -#elif defined(CONFIG_DYNAMIC_DEBUG ) -/* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */ -#define pr_debug (fmt, ...) do { \ - dynamic_pr_debug(fmt, ##__VA_ARGS__); \ - } while (0) -#else -#define pr_debug (fmt, ...) \ - ({ if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); 0; }) -#endif - -/* -* General tracing related utility functions - trace_printk(), -* 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. -* This also corresponds to the user space /sys/kernel/debug/tracing/tracing_on -* 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. -*/ -#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 -#ifdef CONFIG_TRACING -extern void tracing_start (void ); -extern void tracing_stop (void ); -extern void ftrace_off_permanent (void ); - -extern void -ftrace_special (unsigned long arg1,unsigned long arg2,unsigned long arg3); - -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) - -/** -* 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. -*/ - -#define trace_printk(fmt, args...) \ -do { \ - __trace_printk_check_format(fmt, ##args); \ - 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); \ -} while (0) - -extern int -__trace_bprintk (unsigned long ip,const char *fmt, ...) - __attribute__ ((format (printf,2 ,3 ))); - -extern int -__trace_printk (unsigned long ip,const char *fmt, ...) - __attribute__ ((format (printf,2 ,3 ))); - -/* -* 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. -*/ -#define ftrace_vprintk (fmt, vargs) \ -do { \ - if (__builtin_constant_p(fmt)) { \ - static const char *trace_printk_fmt \ - __attribute__((section("__trace_printk_fmt"))) = \ - __builtin_constant_p(fmt) ? fmt : NULL; \ - \ - __ftrace_vbprintk(_THIS_IP_, trace_printk_fmt, vargs); \ - } else \ - __ftrace_vprintk(_THIS_IP_, fmt, vargs); \ -} while (0) - -extern int -__ftrace_vbprintk (unsigned long ip,const char *fmt,va_list ap); - -extern int -__ftrace_vprintk (unsigned long ip,const char *fmt,va_list ap); - -extern void ftrace_dump (void ); -#else -static inline void -ftrace_special (unsigned long arg1,unsigned long arg2,unsigned long arg3) { } -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 ) { } -static inline int -trace_printk (const char *fmt, ...) -{ -return 0 ; -} -static inline int -ftrace_vprintk (const char *fmt,va_list ap) -{ -return 0 ; -} -static inline void ftrace_dump (void ) { } -#endif /* CONFIG_TRACING */ -/* * Display an IP address in readable format. */
include/linux/logging.h new file +313 -0
313 lines not on this page · raw message
Signature · 1 line
1.6.3.1.10.g659a0.dirty
PATCH 2/3 include/linux/logging.h: Reduce data usage of printk_once
In reply to Joe PerchesUse bool for int
Don't initialize __printk_once, invert test
--- include/linux/logging.h | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
include/linux/logging.h +3 -3
@@ -91,10 +91,10 @@ extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,*/ #define printk_once (fmt, ...) \ ({ \ - static int __print_once = 1; \ + static bool __print_once; \ \ - if (__print_once) { \ - __print_once = 0; \ + if (!__print_once) { \ + __print_once = true; \ printk(fmt, ##__VA_ARGS__); \ } \ })
Signature · 1 line
1.6.3.1.10.g659a0.dirty
PATCH 3/3 include/linux/kernel.h: neaten and group functions and definitions
In reply to Joe PerchesReduce the clutter, make checkpatch cleaner.
There are a couple of checkpatch false positives.
--- include/linux/kernel.h | 467 +++++++++++++++++++++++++++--------------------- 1 files changed, 262 insertions(+), 205 deletions(-)
include/linux/kernel.h +262 -205
@@ -21,6 +21,9 @@#include <asm/byteorder.h> #include <asm/bug.h> +/* +* tracing structs, functions and redefined "if" +*/ struct ftrace_branch_data {const char *func;const char *file;
@@ -112,82 +115,57 @@ static inline void branch_profiler(struct ftrace_branch_data *data, int cond)#endif /* CONFIG_PROFILE_ALL_BRANCHES */ #endif +/* +* little limits +*/ #define USHORT_MAX ((u16)(~0U)) -#define SHORT_MAX ((s16)(USHORT_MAX>>1)) +#define SHORT_MAX ((s16)(USHORT_MAX >> 1))#define SHORT_MIN (-SHORT_MAX - 1) -#define INT_MAX ((int)(~0U>>1)) +#define INT_MAX ((int)(~0U >> 1))#define INT_MIN (-INT_MAX - 1)#define UINT_MAX (~0U) -#define LONG_MAX ((long)(~0UL>>1)) +#define LONG_MAX ((long)(~0UL >> 1))#define LONG_MIN (-LONG_MAX - 1)#define ULONG_MAX (~0UL) -#define LLONG_MAX ((long long)(~0ULL>>1)) +#define LLONG_MAX ((long long)(~0ULL >> 1))#define LLONG_MIN (-LLONG_MAX - 1)#define ULLONG_MAX (~0ULL) -#define STACK_MAGIC 0xdeadbeef - -#define ALIGN (x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) -#define __ALIGN_MASK (x,mask) (((x)+(mask))&~(mask)) -#define PTR_ALIGN (p, a) ((typeof(p))ALIGN((unsigned long)(p), (a))) -#define IS_ALIGNED (x, a) (((x) & ((typeof(x))(a) - 1)) == 0) +/* +* Alignment checks +*/ +#define __ALIGN_MASK (x, mask) (((x) + (mask)) & ~(mask)) +#define ALIGN (x, a) __ALIGN_MASK(x, (typeof(x))(a)-1) +#define PTR_ALIGN (p, a) ((typeof(p))ALIGN(((unsigned long)(p)), (a))) +#define IS_ALIGNED (x, a) (((x) & ((typeof(x))(a) - 1)) == 0) +/* +* Simple array sizes and offsets +*/ #define ARRAY_SIZE (arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) +#define FIELD_SIZEOF (t, f) (sizeof(((t *)0)->f)) -#define FIELD_SIZEOF (t, f) (sizeof(((t*)0)->f)) -#define DIV_ROUND_UP (n,d) (((n) + (d) - 1) / (d)) -#define roundup (x, y) ((((x) + ((y) - 1)) / (y)) * (y)) -#define DIV_ROUND_CLOSEST (x, divisor)( \ -{ \ - typeof(divisor) __divisor = divisor; \ - (((x) + ((__divisor) / 2)) / (__divisor)); \ -} \ -) - -#define _RET_IP_ (unsigned long)__builtin_return_address(0) -#define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; }) - -#ifdef CONFIG_LBDAF -# 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 +/* +* swap - swap value of @a and @b +*/ +#define swap (a, b) \ + do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0)/** -* upper_32_bits - return bits 32-63 of a number -* @n: the number we're accessing +* container_of - cast a member of a structure out to the containing structure +* @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. * -* 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)) +#define container_of (ptr, type, member) \ +({ const typeof(((type *)0)->member) *__mptr = (ptr); \ + (type *)((char *)__mptr - offsetof(type, member)); \ +}) -/** -* lower_32_bits - return bits 0-31 of a number -* @n: the number we're accessing +/* +* sleep/reschedule/fault checks */ -#define lower_32_bits (n) ((u32)(n)) - -struct completion ; -struct pt_regs ; -struct user ; - -#ifdef CONFIG_PREEMPT_VOLUNTARY -extern int _cond_resched (void ); -# define might_resched () _cond_resched() -#else -# define might_resched () do { } while (0) -#endif -#ifdef CONFIG_DEBUG_SPINLOCK_SLEEP void __might_sleep (char *file,int line,int preempt_offset);/**
@@ -209,10 +187,12 @@ extern int _cond_resched(void);#define might_sleep_if (cond) do { if (cond) might_sleep(); } while (0) -#define abs (x) ({ \ - int __x = (x); \ - (__x < 0) ? -__x : __x; \ - }) +#ifdef CONFIG_PREEMPT_VOLUNTARY +extern int _cond_resched (void ); +# define might_resched () _cond_resched() +#else +# define might_resched () do { } while (0) +#endif #ifdef CONFIG_PROVE_LOCKING void might_fault (void );
@@ -223,34 +203,206 @@ static inline void might_fault(void) }#endif +/* +* Miscellaneous math functions +*/ +#define DIV_ROUND_UP (n, d) (((n) + (d) - 1) / (d)) +#define roundup (x, y) ((((x) + ((y) - 1)) / (y)) * (y)) +#define DIV_ROUND_CLOSEST (x, divisor) \ +({ typeof(divisor) __divisor = divisor; \ + (((x) + ((__divisor) / 2)) / (__divisor)); \ +}) + +#define abs (x) \ +({ int __x = (x); \ + (__x < 0) ? -__x : __x; \ +}) + +/* +* min()/max()/clamp() macros that also do +* strict type-checking.. See the +* "unnecessary" pointer comparison. +*/ +#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; \ +}) + +/** +* 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; \ +}) + +/* +* ..and if you can't take the strict +* types, you can specify one yourself. +* +* 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. +*/ +#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; \ +}) + +/** +* 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; \ +}) + +unsigned long int_sqrt (unsigned long ); + +#ifdef CONFIG_LBDAF +# 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 + +/** +* 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)) + +/** +* lower_32_bits - return bits 0-31 of a number +* @n: the number we're accessing +*/ +#define lower_32_bits (n) ((u32)(n)) + +/* +* Panic/oops/exit functions and data +*/ +struct completion ; +struct pt_regs ; +struct user ; +extern struct atomic_notifier_head panic_notifier_list;extern long (*panic_blink)(long time); -NORET_TYPE void panic(const char * fmt, ...) - __attribute__ ((NORET_AND format (printf, 1, 2))) __cold; +void panic (const char *fmt, ...) + __attribute__ ((noreturn,format (printf,1 ,2 )))__cold ;extern void oops_enter (void );extern void oops_exit (void );extern int oops_may_print (void ); -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 strict_strtoul (const char *,unsigned int ,unsigned long *); -extern int strict_strtol (const char *,unsigned int ,long *); -extern int strict_strtoull (const char *,unsigned int ,unsigned long long *); -extern int strict_strtoll (const char *,unsigned int ,long long *); -extern int sprintf (char * buf,const char * fmt, ...) +void do_exit (long error_code) __attribute__ ((noreturn)); +void complete_and_exit (struct completion *comp,long code) + __attribute__ ((noreturn)); +extern void bust_spinlocks (int yes); +extern void wake_up_klogd (void ); +extern int oops_in_progress;/* If set, one of these is in progress: +* oops, panic(), BUG() or die() */ +extern int panic_timeout; +extern int panic_on_oops; +extern int panic_on_unrecovered_nmi; +extern int panic_on_io_nmi; + +/* +* string to value functions +*/ +extern int strict_strtoul (const char *cp,unsigned int base, +unsigned long *res); +extern int strict_strtol (const char *cp,unsigned int base, +long *res); +extern int strict_strtoull (const char *cp,unsigned int base, +unsigned long long *res); +extern int strict_strtoll (const char *cp,unsigned int base, +long long *res); + +/* +* deprecated string to value functions, use strict_ variants instead +*/ +extern unsigned long simple_strtoul (const char *cp,char **endp, +unsigned int base); +extern long simple_strtol (const char *cp,char **endp, +unsigned int base); +extern unsigned long long simple_strtoull (const char *cp,char **endp, +unsigned int base); +extern long long simple_strtoll (const char *cp,char **endp, +unsigned int base); + +/* +* printf functions +*/ +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, ...) +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, ...) +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 )));
@@ -258,38 +410,34 @@ extern char *kasprintf(gfp_t gfp, const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));extern char *kvasprintf (gfp_t gfp,const char *fmt,va_list args); +/* +* scanf functions +*/ 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 ))); +/* +* command line options functions +*/ extern int get_option (char **str,int *pint);extern char *get_options (const char *str,int nints,int *ints);extern unsigned long long memparse (const char *ptr,char **retptr); +/* +* kernel addressing info +*/ extern int core_kernel_text (unsigned long addr);extern int __kernel_text_address (unsigned long addr);extern int kernel_text_address (unsigned long addr);extern int func_ptr_is_kernel_text (void *ptr); +#define _RET_IP_ (unsigned long)__builtin_return_address(0) +#define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; }) -struct pid ; -extern struct pid *session_of_pgrp (struct pid *pgrp); - -unsigned long int_sqrt (unsigned long ); - -extern void bust_spinlocks (int yes); -extern void wake_up_klogd (void ); -extern int oops_in_progress;/* If set, an oops, panic(), BUG() or die() is in progress */ -extern int panic_timeout; -extern int panic_on_oops; -extern int panic_on_unrecovered_nmi; -extern int panic_on_io_nmi; -extern void add_taint (unsigned flag); -extern int test_taint (unsigned flag); -extern unsigned long get_taint (void ); -extern int root_mountflags; - -/* Values used for system_state */ +/* +*Values used for system_state +*/ extern enum system_states { SYSTEM_BOOTING, SYSTEM_RUNNING,
@@ -299,6 +447,13 @@ extern enum system_states {SYSTEM_SUSPEND_DISK , } system_state; +/* +* Kernel taint functions (non-gpl modules, etc) +*/ +extern void add_taint (unsigned flag); +extern int test_taint (unsigned flag); +extern unsigned long get_taint (void ); +#define TAINT_PROPRIETARY_MODULE 0#define TAINT_FORCED_MODULE 1#define TAINT_UNSAFE_SMP 2
@@ -319,13 +474,13 @@ enum { DUMP_PREFIX_OFFSET };extern void hex_dump_to_buffer (const void *buf,size_t len, -int rowsize,int groupsize, -char *linebuf,size_t linebuflen,bool ascii); +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, -const void *buf,size_t len,bool ascii); +int prefix_type,int rowsize,int groupsize, +const void *buf,size_t len,bool ascii);extern void print_hex_dump_bytes (const char *prefix_str,int prefix_type, -const void *buf,size_t len); +const void *buf,size_t len);extern const char hex_asc[];#define hex_asc_lo (x) hex_asc[((x) & 0x0f)]
@@ -341,7 +496,6 @@ static inline char *pack_hex_byte(char *buf, u8 byte)/* * Display an IP address in readable format. */ -#define NIPQUAD (addr) \ ((unsigned char *)&addr)[0], \ ((unsigned char *)&addr)[1], \
@@ -350,109 +504,12 @@ static inline char *pack_hex_byte(char *buf, u8 byte)#define NIPQUAD_FMT "%u.%u.%u.%u"/* -* min()/max()/clamp() macros that also do -* strict type-checking.. See the -* "unnecessary" pointer comparison. -*/ -#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; }) - -/** -* 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; }) - -/* -* ..and if you can't take the strict -* types, you can specify one yourself. -* -* Or not use min/max/clamp at all, of course. +* unclassified or really miscellaneous */ -#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. -*/ -#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; }) - -/** -* 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; }) - - -/* -* swap - swap value of @a and @b -*/ -#define swap (a, b) \ - do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0) - -/** -* container_of - cast a member of a structure out to the containing structure -* @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) ({ \ - const typeof( ((type *)0)->member ) *__mptr = (ptr); \ - (type *)( (char *)__mptr - offsetof(type,member) );}) - +#define STACK_MAGIC 0xdeadbeef +extern int root_mountflags; +struct pid ; +extern struct pid *session_of_pgrp (struct pid *pgrp);struct sysinfo ;extern int do_sysinfo (struct sysinfo *info);
Signature · 1 line
1.6.3.1.10.g659a0.dirty
Quoted 8 lines · Joe Perches
kernel.hhas gotten cluttered.
Unclutter it and make it kernel style compatible.Joe Perches (3):
include/linux/logging.h: Separate logging functions out ofkernel.hinclude/linux/logging.h: Reduce data usage ofprintk_onceinclude/linux/kernel.h: neaten and group functions and definitions
Quoted 5 lines
include/linux/kernel.h | 754 ++++++++++++++++------------------------------- include/linux/logging.h | 313 ++++++++++++++++++++ 2 files changed, 573 insertions(+), 494 deletions(-) create mode 100644 include/linux/logging.h
This is just clean up code, so I'm fine with it.
-- Steve