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 U8_MAX ((u8)~0U)
33#define S8_MAX ((s8)(U8_MAX>>1))
34#define S8_MIN ((s8)(-S8_MAX - 1))
35#define U16_MAX ((u16)~0U)
36#define S16_MAX ((s16)(U16_MAX>>1))
37#define S16_MIN ((s16)(-S16_MAX - 1))
38#define U32_MAX ((u32)~0U)
39#define S32_MAX ((s32)(U32_MAX>>1))
40#define S32_MIN ((s32)(-S32_MAX - 1))
41#define U64_MAX ((u64)~0ULL)
42#define S64_MAX ((s64)(U64_MAX>>1))
43#define S64_MIN ((s64)(-S64_MAX - 1))
44
45#define STACK_MAGIC 0xdeadbeef
46
47#define REPEAT_BYTE(x) ((~0ul / 0xff) * (x))
48
49#define ALIGN(x, a) __ALIGN_KERNEL((x), (a))
50#define __ALIGN_MASK(x, mask) __ALIGN_KERNEL_MASK((x), (mask))
51#define PTR_ALIGN(p, a) ((typeof(p))ALIGN((unsigned long)(p), (a)))
52#define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0)
53
54#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
55
56#define u64_to_user_ptr(x) ( \
57{ \
58 typecheck(u64, x); \
59 (void __user *)(uintptr_t)x; \
60} \
61)
62
63
64
65
66
67
68
69#define __round_mask(x, y) ((__typeof__(x))((y)-1))
70#define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1)
71#define round_down(x, y) ((x) & ~__round_mask(x, y))
72
73#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))
74#define DIV_ROUND_UP __KERNEL_DIV_ROUND_UP
75#define DIV_ROUND_UP_ULL(ll,d) \
76 ({ unsigned long long _tmp = (ll)+(d)-1; do_div(_tmp, d); _tmp; })
77
78#if BITS_PER_LONG == 32
79# define DIV_ROUND_UP_SECTOR_T(ll,d) DIV_ROUND_UP_ULL(ll, d)
80#else
81# define DIV_ROUND_UP_SECTOR_T(ll,d) DIV_ROUND_UP(ll,d)
82#endif
83
84
85#define roundup(x, y) ( \
86{ \
87 const typeof(y) __y = y; \
88 (((x) + (__y - 1)) / __y) * __y; \
89} \
90)
91#define rounddown(x, y) ( \
92{ \
93 typeof(x) __x = (x); \
94 __x - (__x % (y)); \
95} \
96)
97
98
99
100
101
102
103#define DIV_ROUND_CLOSEST(x, divisor)( \
104{ \
105 typeof(x) __x = x; \
106 typeof(divisor) __d = divisor; \
107 (((typeof(x))-1) > 0 || \
108 ((typeof(divisor))-1) > 0 || (__x) > 0) ? \
109 (((__x) + ((__d) / 2)) / (__d)) : \
110 (((__x) - ((__d) / 2)) / (__d)); \
111} \
112)
113
114
115
116
117#define DIV_ROUND_CLOSEST_ULL(x, divisor)( \
118{ \
119 typeof(divisor) __d = divisor; \
120 unsigned long long _tmp = (x) + (__d) / 2; \
121 do_div(_tmp, __d); \
122 _tmp; \
123} \
124)
125
126
127
128
129
130#define mult_frac(x, numer, denom)( \
131{ \
132 typeof(x) quot = (x) / (denom); \
133 typeof(x) rem = (x) % (denom); \
134 (quot * (numer)) + ((rem * (numer)) / (denom)); \
135} \
136)
137
138
139#define _RET_IP_ (unsigned long)__builtin_return_address(0)
140#define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; })
141
142#ifdef CONFIG_LBDAF
143# include <asm/div64.h>
144# define sector_div(a, b) do_div(a, b)
145#else
146# define sector_div(n, b)( \
147{ \
148 int _res; \
149 _res = (n) % (b); \
150 (n) /= (b); \
151 _res; \
152} \
153)
154#endif
155
156
157
158
159
160
161
162
163
164#define upper_32_bits(n) ((u32)(((n) >> 16) >> 16))
165
166
167
168
169
170#define lower_32_bits(n) ((u32)(n))
171
172struct completion;
173struct pt_regs;
174struct user;
175
176#ifdef CONFIG_PREEMPT_VOLUNTARY
177extern int _cond_resched(void);
178# define might_resched() _cond_resched()
179#else
180# define might_resched() do { } while (0)
181#endif
182
183#ifdef CONFIG_DEBUG_ATOMIC_SLEEP
184 void __might_sleep(const char *file, int line, int preempt_offset);
185
186
187
188
189
190
191
192
193
194
195# define might_sleep() \
196 do { __might_sleep(__FILE__, __LINE__, 0); might_resched(); } while (0)
197#else
198 static inline void __might_sleep(const char *file, int line,
199 int preempt_offset) { }
200# define might_sleep() do { might_resched(); } while (0)
201#endif
202
203#define might_sleep_if(cond) do { if (cond) might_sleep(); } while (0)
204
205
206
207
208
209
210
211
212
213#define abs(x) __builtin_choose_expr(sizeof(x) == sizeof(s64), ({ \
214 s64 __x = (x); \
215 (__x < 0) ? -__x : __x; \
216 }), ({ \
217 long ret; \
218 if (sizeof(x) == sizeof(long)) { \
219 long __x = (x); \
220 ret = (__x < 0) ? -__x : __x; \
221 } else { \
222 int __x = (x); \
223 ret = (__x < 0) ? -__x : __x; \
224 } \
225 ret; \
226 }))
227
228
229#define abs64(x) abs((s64)(x))
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245static inline u32 reciprocal_scale(u32 val, u32 ep_ro)
246{
247 return (u32)(((u64) val * ep_ro) >> 32);
248}
249
250#if defined(CONFIG_PROVE_LOCKING) || defined(CONFIG_DEBUG_ATOMIC_SLEEP)
251void might_fault(void);
252#else
253static inline void might_fault(void) { }
254#endif
255
256extern struct atomic_notifier_head panic_notifier_list;
257extern long (*panic_blink)(int state);
258__printf(1, 2)
259void panic(const char *fmt, ...)
260 __noreturn __cold;
261void nmi_panic(struct pt_regs *regs, const char *msg);
262extern void oops_enter(void);
263extern void oops_exit(void);
264void print_oops_end_marker(void);
265extern int oops_may_print(void);
266void do_exit(long error_code)
267 __noreturn;
268void complete_and_exit(struct completion *, long)
269 __noreturn;
270
271
272int __must_check _kstrtoul(const char *s, unsigned int base, unsigned long *res);
273int __must_check _kstrtol(const char *s, unsigned int base, long *res);
274
275int __must_check kstrtoull(const char *s, unsigned int base, unsigned long long *res);
276int __must_check kstrtoll(const char *s, unsigned int base, long long *res);
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294static inline int __must_check kstrtoul(const char *s, unsigned int base, unsigned long *res)
295{
296
297
298
299
300 if (sizeof(unsigned long) == sizeof(unsigned long long) &&
301 __alignof__(unsigned long) == __alignof__(unsigned long long))
302 return kstrtoull(s, base, (unsigned long long *)res);
303 else
304 return _kstrtoul(s, base, res);
305}
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323static inline int __must_check kstrtol(const char *s, unsigned int base, long *res)
324{
325
326
327
328
329 if (sizeof(long) == sizeof(long long) &&
330 __alignof__(long) == __alignof__(long long))
331 return kstrtoll(s, base, (long long *)res);
332 else
333 return _kstrtol(s, base, res);
334}
335
336int __must_check kstrtouint(const char *s, unsigned int base, unsigned int *res);
337int __must_check kstrtoint(const char *s, unsigned int base, int *res);
338
339static inline int __must_check kstrtou64(const char *s, unsigned int base, u64 *res)
340{
341 return kstrtoull(s, base, res);
342}
343
344static inline int __must_check kstrtos64(const char *s, unsigned int base, s64 *res)
345{
346 return kstrtoll(s, base, res);
347}
348
349static inline int __must_check kstrtou32(const char *s, unsigned int base, u32 *res)
350{
351 return kstrtouint(s, base, res);
352}
353
354static inline int __must_check kstrtos32(const char *s, unsigned int base, s32 *res)
355{
356 return kstrtoint(s, base, res);
357}
358
359int __must_check kstrtou16(const char *s, unsigned int base, u16 *res);
360int __must_check kstrtos16(const char *s, unsigned int base, s16 *res);
361int __must_check kstrtou8(const char *s, unsigned int base, u8 *res);
362int __must_check kstrtos8(const char *s, unsigned int base, s8 *res);
363int __must_check kstrtobool(const char *s, bool *res);
364
365int __must_check kstrtoull_from_user(const char __user *s, size_t count, unsigned int base, unsigned long long *res);
366int __must_check kstrtoll_from_user(const char __user *s, size_t count, unsigned int base, long long *res);
367int __must_check kstrtoul_from_user(const char __user *s, size_t count, unsigned int base, unsigned long *res);
368int __must_check kstrtol_from_user(const char __user *s, size_t count, unsigned int base, long *res);
369int __must_check kstrtouint_from_user(const char __user *s, size_t count, unsigned int base, unsigned int *res);
370int __must_check kstrtoint_from_user(const char __user *s, size_t count, unsigned int base, int *res);
371int __must_check kstrtou16_from_user(const char __user *s, size_t count, unsigned int base, u16 *res);
372int __must_check kstrtos16_from_user(const char __user *s, size_t count, unsigned int base, s16 *res);
373int __must_check kstrtou8_from_user(const char __user *s, size_t count, unsigned int base, u8 *res);
374int __must_check kstrtos8_from_user(const char __user *s, size_t count, unsigned int base, s8 *res);
375int __must_check kstrtobool_from_user(const char __user *s, size_t count, bool *res);
376
377static inline int __must_check kstrtou64_from_user(const char __user *s, size_t count, unsigned int base, u64 *res)
378{
379 return kstrtoull_from_user(s, count, base, res);
380}
381
382static inline int __must_check kstrtos64_from_user(const char __user *s, size_t count, unsigned int base, s64 *res)
383{
384 return kstrtoll_from_user(s, count, base, res);
385}
386
387static inline int __must_check kstrtou32_from_user(const char __user *s, size_t count, unsigned int base, u32 *res)
388{
389 return kstrtouint_from_user(s, count, base, res);
390}
391
392static inline int __must_check kstrtos32_from_user(const char __user *s, size_t count, unsigned int base, s32 *res)
393{
394 return kstrtoint_from_user(s, count, base, res);
395}
396
397
398
399extern unsigned long simple_strtoul(const char *,char **,unsigned int);
400extern long simple_strtol(const char *,char **,unsigned int);
401extern unsigned long long simple_strtoull(const char *,char **,unsigned int);
402extern long long simple_strtoll(const char *,char **,unsigned int);
403#define strict_strtoul kstrtoul
404#define strict_strtol kstrtol
405#define strict_strtoull kstrtoull
406#define strict_strtoll kstrtoll
407
408extern int num_to_str(char *buf, int size, unsigned long long num);
409
410
411
412extern __printf(2, 3) int sprintf(char *buf, const char * fmt, ...);
413extern __printf(2, 0) int vsprintf(char *buf, const char *, va_list);
414extern __printf(3, 4)
415int snprintf(char *buf, size_t size, const char *fmt, ...);
416extern __printf(3, 0)
417int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
418extern __printf(3, 4)
419int scnprintf(char *buf, size_t size, const char *fmt, ...);
420extern __printf(3, 0)
421int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);
422extern __printf(2, 3)
423char *kasprintf(gfp_t gfp, const char *fmt, ...);
424extern char *kvasprintf(gfp_t gfp, const char *fmt, va_list args);
425extern __printf(2, 0)
426const char *kvasprintf_const(gfp_t gfp, const char *fmt, va_list args);
427
428extern __scanf(2, 3)
429int sscanf(const char *, const char *, ...);
430extern __scanf(2, 0)
431int vsscanf(const char *, const char *, va_list);
432
433extern int get_option(char **str, int *pint);
434extern char *get_options(const char *str, int nints, int *ints);
435extern unsigned long long memparse(const char *ptr, char **retptr);
436extern bool parse_option_str(const char *str, const char *option);
437extern char *next_arg(char *args, char **param, char **val);
438
439extern int core_kernel_text(unsigned long addr);
440extern int core_kernel_data(unsigned long addr);
441extern int __kernel_text_address(unsigned long addr);
442extern int kernel_text_address(unsigned long addr);
443extern int func_ptr_is_kernel_text(void *ptr);
444
445struct pid;
446extern struct pid *session_of_pgrp(struct pid *pgrp);
447
448unsigned long int_sqrt(unsigned long);
449
450extern void bust_spinlocks(int yes);
451extern int oops_in_progress;
452extern int panic_timeout;
453extern int panic_on_oops;
454extern int panic_on_unrecovered_nmi;
455extern int panic_on_io_nmi;
456extern int panic_on_warn;
457extern int sysctl_panic_on_rcu_stall;
458extern int sysctl_panic_on_stackoverflow;
459
460extern bool crash_kexec_post_notifiers;
461
462
463
464
465
466
467extern atomic_t panic_cpu;
468#define PANIC_CPU_INVALID -1
469
470
471
472
473
474static inline void set_arch_panic_timeout(int timeout, int arch_default_timeout)
475{
476 if (panic_timeout == arch_default_timeout)
477 panic_timeout = timeout;
478}
479extern const char *print_tainted(void);
480enum lockdep_ok {
481 LOCKDEP_STILL_OK,
482 LOCKDEP_NOW_UNRELIABLE
483};
484extern void add_taint(unsigned flag, enum lockdep_ok);
485extern int test_taint(unsigned flag);
486extern unsigned long get_taint(void);
487extern int root_mountflags;
488
489extern bool early_boot_irqs_disabled;
490
491
492extern enum system_states {
493 SYSTEM_BOOTING,
494 SYSTEM_RUNNING,
495 SYSTEM_HALT,
496 SYSTEM_POWER_OFF,
497 SYSTEM_RESTART,
498} system_state;
499
500#define TAINT_PROPRIETARY_MODULE 0
501#define TAINT_FORCED_MODULE 1
502#define TAINT_UNSAFE_SMP 2
503#define TAINT_FORCED_RMMOD 3
504#define TAINT_MACHINE_CHECK 4
505#define TAINT_BAD_PAGE 5
506#define TAINT_USER 6
507#define TAINT_DIE 7
508#define TAINT_OVERRIDDEN_ACPI_TABLE 8
509#define TAINT_WARN 9
510#define TAINT_CRAP 10
511#define TAINT_FIRMWARE_WORKAROUND 11
512#define TAINT_OOT_MODULE 12
513#define TAINT_UNSIGNED_MODULE 13
514#define TAINT_SOFTLOCKUP 14
515#define TAINT_LIVEPATCH 15
516#define TAINT_16 16
517#define TAINT_17 17
518#define TAINT_18 18
519#define TAINT_19 19
520#define TAINT_20 20
521#define TAINT_21 21
522#define TAINT_22 22
523#define TAINT_23 23
524#define TAINT_24 24
525#define TAINT_25 25
526#define TAINT_26 26
527#define TAINT_27 27
528
529#define TAINT_HARDWARE_UNSUPPORTED 28
530#define TAINT_TECH_PREVIEW 29
531
532#define TAINT_RESERVED30 30
533#define TAINT_RESERVED31 31
534#define TAINT_FLAGS_COUNT 32
535
536struct taint_flag {
537 char c_true;
538 char c_false;
539 bool module;
540};
541
542extern const struct taint_flag taint_flags[TAINT_FLAGS_COUNT];
543
544extern const char hex_asc[];
545#define hex_asc_lo(x) hex_asc[((x) & 0x0f)]
546#define hex_asc_hi(x) hex_asc[((x) & 0xf0) >> 4]
547
548static inline char *hex_byte_pack(char *buf, u8 byte)
549{
550 *buf++ = hex_asc_hi(byte);
551 *buf++ = hex_asc_lo(byte);
552 return buf;
553}
554
555extern const char hex_asc_upper[];
556#define hex_asc_upper_lo(x) hex_asc_upper[((x) & 0x0f)]
557#define hex_asc_upper_hi(x) hex_asc_upper[((x) & 0xf0) >> 4]
558
559static inline char *hex_byte_pack_upper(char *buf, u8 byte)
560{
561 *buf++ = hex_asc_upper_hi(byte);
562 *buf++ = hex_asc_upper_lo(byte);
563 return buf;
564}
565
566static inline char * __deprecated pack_hex_byte(char *buf, u8 byte)
567{
568 return hex_byte_pack(buf, byte);
569}
570
571extern int hex_to_bin(char ch);
572extern int __must_check hex2bin(u8 *dst, const char *src, size_t count);
573extern char *bin2hex(char *dst, const void *src, size_t count);
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594#ifdef CONFIG_RING_BUFFER
595
596void tracing_off_permanent(void);
597#else
598static inline void tracing_off_permanent(void) { }
599#endif
600
601enum ftrace_dump_mode {
602 DUMP_NONE,
603 DUMP_ALL,
604 DUMP_ORIG,
605};
606
607#ifdef CONFIG_TRACING
608void tracing_on(void);
609void tracing_off(void);
610int tracing_is_on(void);
611void tracing_snapshot(void);
612void tracing_snapshot_alloc(void);
613
614extern void tracing_start(void);
615extern void tracing_stop(void);
616
617static inline __printf(1, 2)
618void ____trace_printk_check_format(const char *fmt, ...)
619{
620}
621#define __trace_printk_check_format(fmt, args...) \
622do { \
623 if (0) \
624 ____trace_printk_check_format(fmt, ##args); \
625} while (0)
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657#define trace_printk(fmt, ...) \
658do { \
659 char _______STR[] = __stringify((__VA_ARGS__)); \
660 if (sizeof(_______STR) > 3) \
661 do_trace_printk(fmt, ##__VA_ARGS__); \
662 else \
663 trace_puts(fmt); \
664} while (0)
665
666#define do_trace_printk(fmt, args...) \
667do { \
668 static const char *trace_printk_fmt \
669 __attribute__((section("__trace_printk_fmt"))) = \
670 __builtin_constant_p(fmt) ? fmt : NULL; \
671 \
672 __trace_printk_check_format(fmt, ##args); \
673 \
674 if (__builtin_constant_p(fmt)) \
675 __trace_bprintk(_THIS_IP_, trace_printk_fmt, ##args); \
676 else \
677 __trace_printk(_THIS_IP_, fmt, ##args); \
678} while (0)
679
680extern __printf(2, 3)
681int __trace_bprintk(unsigned long ip, const char *fmt, ...);
682
683extern __printf(2, 3)
684int __trace_printk(unsigned long ip, const char *fmt, ...);
685
686extern int __trace_bputs(unsigned long ip, const char *str);
687extern int __trace_puts(unsigned long ip, const char *str, int size);
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714#define trace_puts(str) ({ \
715 static const char *trace_printk_fmt \
716 __attribute__((section("__trace_printk_fmt"))) = \
717 __builtin_constant_p(str) ? str : NULL; \
718 \
719 if (__builtin_constant_p(str)) \
720 __trace_bputs(_THIS_IP_, trace_printk_fmt); \
721 else \
722 __trace_puts(_THIS_IP_, str, strlen(str)); \
723})
724
725extern void trace_dump_stack(int skip);
726
727
728
729
730
731
732#define ftrace_vprintk(fmt, vargs) \
733do { \
734 if (__builtin_constant_p(fmt)) { \
735 static const char *trace_printk_fmt \
736 __attribute__((section("__trace_printk_fmt"))) = \
737 __builtin_constant_p(fmt) ? fmt : NULL; \
738 \
739 __ftrace_vbprintk(_THIS_IP_, trace_printk_fmt, vargs); \
740 } else \
741 __ftrace_vprintk(_THIS_IP_, fmt, vargs); \
742} while (0)
743
744extern int
745__ftrace_vbprintk(unsigned long ip, const char *fmt, va_list ap);
746
747extern int
748__ftrace_vprintk(unsigned long ip, const char *fmt, va_list ap);
749
750extern void ftrace_dump(enum ftrace_dump_mode oops_dump_mode);
751#else
752static inline void tracing_start(void) { }
753static inline void tracing_stop(void) { }
754static inline void trace_dump_stack(void) { }
755
756static inline void tracing_on(void) { }
757static inline void tracing_off(void) { }
758static inline int tracing_is_on(void) { return 0; }
759static inline void tracing_snapshot(void) { }
760static inline void tracing_snapshot_alloc(void) { }
761
762static inline __printf(1, 2)
763int trace_printk(const char *fmt, ...)
764{
765 return 0;
766}
767static inline int
768ftrace_vprintk(const char *fmt, va_list ap)
769{
770 return 0;
771}
772static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { }
773#endif
774
775
776
777
778
779
780#define min(x, y) ({ \
781 typeof(x) _min1 = (x); \
782 typeof(y) _min2 = (y); \
783 (void) (&_min1 == &_min2); \
784 _min1 < _min2 ? _min1 : _min2; })
785
786#define max(x, y) ({ \
787 typeof(x) _max1 = (x); \
788 typeof(y) _max2 = (y); \
789 (void) (&_max1 == &_max2); \
790 _max1 > _max2 ? _max1 : _max2; })
791
792#define min3(x, y, z) ({ \
793 typeof(x) _min1 = (x); \
794 typeof(y) _min2 = (y); \
795 typeof(z) _min3 = (z); \
796 (void) (&_min1 == &_min2); \
797 (void) (&_min1 == &_min3); \
798 _min1 < _min2 ? (_min1 < _min3 ? _min1 : _min3) : \
799 (_min2 < _min3 ? _min2 : _min3); })
800
801#define max3(x, y, z) ({ \
802 typeof(x) _max1 = (x); \
803 typeof(y) _max2 = (y); \
804 typeof(z) _max3 = (z); \
805 (void) (&_max1 == &_max2); \
806 (void) (&_max1 == &_max3); \
807 _max1 > _max2 ? (_max1 > _max3 ? _max1 : _max3) : \
808 (_max2 > _max3 ? _max2 : _max3); })
809
810
811
812
813
814
815#define min_not_zero(x, y) ({ \
816 typeof(x) __x = (x); \
817 typeof(y) __y = (y); \
818 __x == 0 ? __y : ((__y == 0) ? __x : min(__x, __y)); })
819
820
821
822
823
824
825
826
827
828
829#define clamp(val, min, max) ({ \
830 typeof(val) __val = (val); \
831 typeof(min) __min = (min); \
832 typeof(max) __max = (max); \
833 (void) (&__val == &__min); \
834 (void) (&__val == &__max); \
835 __val = __val < __min ? __min: __val; \
836 __val > __max ? __max: __val; })
837
838
839
840
841
842
843
844#define min_t(type, x, y) ({ \
845 type __min1 = (x); \
846 type __min2 = (y); \
847 __min1 < __min2 ? __min1: __min2; })
848
849#define max_t(type, x, y) ({ \
850 type __max1 = (x); \
851 type __max2 = (y); \
852 __max1 > __max2 ? __max1: __max2; })
853
854
855
856
857
858
859
860
861
862
863
864#define clamp_t(type, val, min, max) ({ \
865 type __val = (val); \
866 type __min = (min); \
867 type __max = (max); \
868 __val = __val < __min ? __min: __val; \
869 __val > __max ? __max: __val; })
870
871
872
873
874
875
876
877
878
879
880
881
882#define clamp_val(val, min, max) ({ \
883 typeof(val) __val = (val); \
884 typeof(val) __min = (min); \
885 typeof(val) __max = (max); \
886 __val = __val < __min ? __min: __val; \
887 __val > __max ? __max: __val; })
888
889
890
891
892
893#define swap(a, b) \
894 do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0)
895
896
897
898
899
900
901
902
903#define container_of(ptr, type, member) ({ \
904 const typeof( ((type *)0)->member ) *__mptr = (ptr); \
905 (type *)( (char *)__mptr - offsetof(type,member) );})
906
907
908#define __FUNCTION__ (__func__)
909
910
911#ifdef CONFIG_FTRACE_MCOUNT_RECORD
912# define REBUILD_DUE_TO_FTRACE_MCOUNT_RECORD
913#endif
914
915struct module;
916
917void mark_hardware_unsupported(const char *msg);
918void mark_hardware_deprecated(const char *msg);
919void mark_tech_preview(const char *msg, struct module *mod);
920
921#else
922#ifndef pr_fmt
923#define pr_fmt(fmt) fmt
924#endif
925#endif
926