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
442static inline char * __deprecated pack_hex_byte(char *buf, u8 byte)
443{
444 return hex_byte_pack(buf, byte);
445}
446
447extern int hex_to_bin(char ch);
448extern int __must_check hex2bin(u8 *dst, const char *src, size_t count);
449
450int mac_pton(const char *s, u8 *mac);
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471#ifdef CONFIG_RING_BUFFER
472
473void tracing_off_permanent(void);
474#else
475static inline void tracing_off_permanent(void) { }
476#endif
477
478enum ftrace_dump_mode {
479 DUMP_NONE,
480 DUMP_ALL,
481 DUMP_ORIG,
482};
483
484#ifdef CONFIG_TRACING
485void tracing_on(void);
486void tracing_off(void);
487int tracing_is_on(void);
488void tracing_snapshot(void);
489void tracing_snapshot_alloc(void);
490
491extern void tracing_start(void);
492extern void tracing_stop(void);
493extern void ftrace_off_permanent(void);
494
495static inline __printf(1, 2)
496void ____trace_printk_check_format(const char *fmt, ...)
497{
498}
499#define __trace_printk_check_format(fmt, args...) \
500do { \
501 if (0) \
502 ____trace_printk_check_format(fmt, ##args); \
503} while (0)
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535#define trace_printk(fmt, ...) \
536do { \
537 char _______STR[] = __stringify((__VA_ARGS__)); \
538 if (sizeof(_______STR) > 3) \
539 do_trace_printk(fmt, ##__VA_ARGS__); \
540 else \
541 trace_puts(fmt); \
542} while (0)
543
544#define do_trace_printk(fmt, args...) \
545do { \
546 static const char *trace_printk_fmt \
547 __attribute__((section("__trace_printk_fmt"))) = \
548 __builtin_constant_p(fmt) ? fmt : NULL; \
549 \
550 __trace_printk_check_format(fmt, ##args); \
551 \
552 if (__builtin_constant_p(fmt)) \
553 __trace_bprintk(_THIS_IP_, trace_printk_fmt, ##args); \
554 else \
555 __trace_printk(_THIS_IP_, fmt, ##args); \
556} while (0)
557
558extern __printf(2, 3)
559int __trace_bprintk(unsigned long ip, const char *fmt, ...);
560
561extern __printf(2, 3)
562int __trace_printk(unsigned long ip, const char *fmt, ...);
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589#define trace_puts(str) ({ \
590 static const char *trace_printk_fmt \
591 __attribute__((section("__trace_printk_fmt"))) = \
592 __builtin_constant_p(str) ? str : NULL; \
593 \
594 if (__builtin_constant_p(str)) \
595 __trace_bputs(_THIS_IP_, trace_printk_fmt); \
596 else \
597 __trace_puts(_THIS_IP_, str, strlen(str)); \
598})
599extern int __trace_bputs(unsigned long ip, const char *str);
600extern int __trace_puts(unsigned long ip, const char *str, int size);
601
602extern void trace_dump_stack(int skip);
603
604
605
606
607
608
609#define ftrace_vprintk(fmt, vargs) \
610do { \
611 if (__builtin_constant_p(fmt)) { \
612 static const char *trace_printk_fmt \
613 __attribute__((section("__trace_printk_fmt"))) = \
614 __builtin_constant_p(fmt) ? fmt : NULL; \
615 \
616 __ftrace_vbprintk(_THIS_IP_, trace_printk_fmt, vargs); \
617 } else \
618 __ftrace_vprintk(_THIS_IP_, fmt, vargs); \
619} while (0)
620
621extern int
622__ftrace_vbprintk(unsigned long ip, const char *fmt, va_list ap);
623
624extern int
625__ftrace_vprintk(unsigned long ip, const char *fmt, va_list ap);
626
627extern void ftrace_dump(enum ftrace_dump_mode oops_dump_mode);
628#else
629static inline void tracing_start(void) { }
630static inline void tracing_stop(void) { }
631static inline void ftrace_off_permanent(void) { }
632static inline void trace_dump_stack(int skip) { }
633
634static inline void tracing_on(void) { }
635static inline void tracing_off(void) { }
636static inline int tracing_is_on(void) { return 0; }
637static inline void tracing_snapshot(void) { }
638static inline void tracing_snapshot_alloc(void) { }
639
640static inline __printf(1, 2)
641int trace_printk(const char *fmt, ...)
642{
643 return 0;
644}
645static inline int
646ftrace_vprintk(const char *fmt, va_list ap)
647{
648 return 0;
649}
650static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { }
651#endif
652
653
654
655
656
657
658#define min(x, y) ({ \
659 typeof(x) _min1 = (x); \
660 typeof(y) _min2 = (y); \
661 (void) (&_min1 == &_min2); \
662 _min1 < _min2 ? _min1 : _min2; })
663
664#define max(x, y) ({ \
665 typeof(x) _max1 = (x); \
666 typeof(y) _max2 = (y); \
667 (void) (&_max1 == &_max2); \
668 _max1 > _max2 ? _max1 : _max2; })
669
670#define min3(x, y, z) ({ \
671 typeof(x) _min1 = (x); \
672 typeof(y) _min2 = (y); \
673 typeof(z) _min3 = (z); \
674 (void) (&_min1 == &_min2); \
675 (void) (&_min1 == &_min3); \
676 _min1 < _min2 ? (_min1 < _min3 ? _min1 : _min3) : \
677 (_min2 < _min3 ? _min2 : _min3); })
678
679#define max3(x, y, z) ({ \
680 typeof(x) _max1 = (x); \
681 typeof(y) _max2 = (y); \
682 typeof(z) _max3 = (z); \
683 (void) (&_max1 == &_max2); \
684 (void) (&_max1 == &_max3); \
685 _max1 > _max2 ? (_max1 > _max3 ? _max1 : _max3) : \
686 (_max2 > _max3 ? _max2 : _max3); })
687
688
689
690
691
692
693#define min_not_zero(x, y) ({ \
694 typeof(x) __x = (x); \
695 typeof(y) __y = (y); \
696 __x == 0 ? __y : ((__y == 0) ? __x : min(__x, __y)); })
697
698
699
700
701
702
703
704
705
706
707#define clamp(val, min, max) ({ \
708 typeof(val) __val = (val); \
709 typeof(min) __min = (min); \
710 typeof(max) __max = (max); \
711 (void) (&__val == &__min); \
712 (void) (&__val == &__max); \
713 __val = __val < __min ? __min: __val; \
714 __val > __max ? __max: __val; })
715
716
717
718
719
720
721
722#define min_t(type, x, y) ({ \
723 type __min1 = (x); \
724 type __min2 = (y); \
725 __min1 < __min2 ? __min1: __min2; })
726
727#define max_t(type, x, y) ({ \
728 type __max1 = (x); \
729 type __max2 = (y); \
730 __max1 > __max2 ? __max1: __max2; })
731
732
733
734
735
736
737
738
739
740
741
742#define clamp_t(type, val, min, max) ({ \
743 type __val = (val); \
744 type __min = (min); \
745 type __max = (max); \
746 __val = __val < __min ? __min: __val; \
747 __val > __max ? __max: __val; })
748
749
750
751
752
753
754
755
756
757
758
759
760#define clamp_val(val, min, max) ({ \
761 typeof(val) __val = (val); \
762 typeof(val) __min = (min); \
763 typeof(val) __max = (max); \
764 __val = __val < __min ? __min: __val; \
765 __val > __max ? __max: __val; })
766
767
768
769
770
771#define swap(a, b) \
772 do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0)
773
774
775
776
777
778
779
780
781#define container_of(ptr, type, member) ({ \
782 const typeof( ((type *)0)->member ) *__mptr = (ptr); \
783 (type *)( (char *)__mptr - offsetof(type,member) );})
784
785
786#define __FUNCTION__ (__func__)
787
788
789#ifdef CONFIG_FTRACE_MCOUNT_RECORD
790# define REBUILD_DUE_TO_FTRACE_MCOUNT_RECORD
791#endif
792
793#endif
794