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