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