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