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