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