mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
Merge branch 'akpm' (patches from Andrew)
Merge more updates from Andrew Morton: "190 patches. Subsystems affected by this patch series: mm (hugetlb, userfaultfd, vmscan, kconfig, proc, z3fold, zbud, ras, mempolicy, memblock, migration, thp, nommu, kconfig, madvise, memory-hotplug, zswap, zsmalloc, zram, cleanups, kfence, and hmm), procfs, sysctl, misc, core-kernel, lib, lz4, checkpatch, init, kprobes, nilfs2, hfs, signals, exec, kcov, selftests, compress/decompress, and ipc" * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (190 commits) ipc/util.c: use binary search for max_idx ipc/sem.c: use READ_ONCE()/WRITE_ONCE() for use_global_lock ipc: use kmalloc for msg_queue and shmid_kernel ipc sem: use kvmalloc for sem_undo allocation lib/decompressors: remove set but not used variabled 'level' selftests/vm/pkeys: exercise x86 XSAVE init state selftests/vm/pkeys: refill shadow register after implicit kernel write selftests/vm/pkeys: handle negative sys_pkey_alloc() return code selftests/vm/pkeys: fix alloc_random_pkey() to make it really, really random kcov: add __no_sanitize_coverage to fix noinstr for all architectures exec: remove checks in __register_bimfmt() x86: signal: don't do sas_ss_reset() until we are certain that sigframe won't be abandoned hfsplus: report create_date to kstat.btime hfsplus: remove unnecessary oom message nilfs2: remove redundant continue statement in a while-loop kprobes: remove duplicated strong free_insn_page in x86 and s390 init: print out unknown kernel parameters checkpatch: do not complain about positive return values starting with EPOLL checkpatch: improve the indented label test checkpatch: scripts/spdxcheck.py now requires python3 ...
This commit is contained in:
commit
71bd934101
299 changed files with 6305 additions and 3275 deletions
|
@ -10,10 +10,12 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/kstrtox.h>
|
||||
#include <linux/log2.h>
|
||||
#include <linux/math.h>
|
||||
#include <linux/minmax.h>
|
||||
#include <linux/typecheck.h>
|
||||
#include <linux/panic.h>
|
||||
#include <linux/printk.h>
|
||||
#include <linux/build_bug.h>
|
||||
#include <linux/static_call_types.h>
|
||||
|
@ -84,7 +86,6 @@
|
|||
#define lower_16_bits(n) ((u16)((n) & 0xffff))
|
||||
|
||||
struct completion;
|
||||
struct pt_regs;
|
||||
struct user;
|
||||
|
||||
#ifdef CONFIG_PREEMPT_VOLUNTARY
|
||||
|
@ -189,159 +190,9 @@ void __might_fault(const char *file, int line);
|
|||
static inline void might_fault(void) { }
|
||||
#endif
|
||||
|
||||
extern struct atomic_notifier_head panic_notifier_list;
|
||||
extern long (*panic_blink)(int state);
|
||||
__printf(1, 2)
|
||||
void panic(const char *fmt, ...) __noreturn __cold;
|
||||
void nmi_panic(struct pt_regs *regs, const char *msg);
|
||||
extern void oops_enter(void);
|
||||
extern void oops_exit(void);
|
||||
extern bool oops_may_print(void);
|
||||
void do_exit(long error_code) __noreturn;
|
||||
void complete_and_exit(struct completion *, long) __noreturn;
|
||||
|
||||
/* Internal, do not use. */
|
||||
int __must_check _kstrtoul(const char *s, unsigned int base, unsigned long *res);
|
||||
int __must_check _kstrtol(const char *s, unsigned int base, long *res);
|
||||
|
||||
int __must_check kstrtoull(const char *s, unsigned int base, unsigned long long *res);
|
||||
int __must_check kstrtoll(const char *s, unsigned int base, long long *res);
|
||||
|
||||
/**
|
||||
* kstrtoul - convert a string to an unsigned long
|
||||
* @s: The start of the string. The string must be null-terminated, and may also
|
||||
* include a single newline before its terminating null. The first character
|
||||
* may also be a plus sign, but not a minus sign.
|
||||
* @base: The number base to use. The maximum supported base is 16. If base is
|
||||
* given as 0, then the base of the string is automatically detected with the
|
||||
* conventional semantics - If it begins with 0x the number will be parsed as a
|
||||
* hexadecimal (case insensitive), if it otherwise begins with 0, it will be
|
||||
* parsed as an octal number. Otherwise it will be parsed as a decimal.
|
||||
* @res: Where to write the result of the conversion on success.
|
||||
*
|
||||
* Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error.
|
||||
* Preferred over simple_strtoul(). Return code must be checked.
|
||||
*/
|
||||
static inline int __must_check kstrtoul(const char *s, unsigned int base, unsigned long *res)
|
||||
{
|
||||
/*
|
||||
* We want to shortcut function call, but
|
||||
* __builtin_types_compatible_p(unsigned long, unsigned long long) = 0.
|
||||
*/
|
||||
if (sizeof(unsigned long) == sizeof(unsigned long long) &&
|
||||
__alignof__(unsigned long) == __alignof__(unsigned long long))
|
||||
return kstrtoull(s, base, (unsigned long long *)res);
|
||||
else
|
||||
return _kstrtoul(s, base, res);
|
||||
}
|
||||
|
||||
/**
|
||||
* kstrtol - convert a string to a long
|
||||
* @s: The start of the string. The string must be null-terminated, and may also
|
||||
* include a single newline before its terminating null. The first character
|
||||
* may also be a plus sign or a minus sign.
|
||||
* @base: The number base to use. The maximum supported base is 16. If base is
|
||||
* given as 0, then the base of the string is automatically detected with the
|
||||
* conventional semantics - If it begins with 0x the number will be parsed as a
|
||||
* hexadecimal (case insensitive), if it otherwise begins with 0, it will be
|
||||
* parsed as an octal number. Otherwise it will be parsed as a decimal.
|
||||
* @res: Where to write the result of the conversion on success.
|
||||
*
|
||||
* Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error.
|
||||
* Preferred over simple_strtol(). Return code must be checked.
|
||||
*/
|
||||
static inline int __must_check kstrtol(const char *s, unsigned int base, long *res)
|
||||
{
|
||||
/*
|
||||
* We want to shortcut function call, but
|
||||
* __builtin_types_compatible_p(long, long long) = 0.
|
||||
*/
|
||||
if (sizeof(long) == sizeof(long long) &&
|
||||
__alignof__(long) == __alignof__(long long))
|
||||
return kstrtoll(s, base, (long long *)res);
|
||||
else
|
||||
return _kstrtol(s, base, res);
|
||||
}
|
||||
|
||||
int __must_check kstrtouint(const char *s, unsigned int base, unsigned int *res);
|
||||
int __must_check kstrtoint(const char *s, unsigned int base, int *res);
|
||||
|
||||
static inline int __must_check kstrtou64(const char *s, unsigned int base, u64 *res)
|
||||
{
|
||||
return kstrtoull(s, base, res);
|
||||
}
|
||||
|
||||
static inline int __must_check kstrtos64(const char *s, unsigned int base, s64 *res)
|
||||
{
|
||||
return kstrtoll(s, base, res);
|
||||
}
|
||||
|
||||
static inline int __must_check kstrtou32(const char *s, unsigned int base, u32 *res)
|
||||
{
|
||||
return kstrtouint(s, base, res);
|
||||
}
|
||||
|
||||
static inline int __must_check kstrtos32(const char *s, unsigned int base, s32 *res)
|
||||
{
|
||||
return kstrtoint(s, base, res);
|
||||
}
|
||||
|
||||
int __must_check kstrtou16(const char *s, unsigned int base, u16 *res);
|
||||
int __must_check kstrtos16(const char *s, unsigned int base, s16 *res);
|
||||
int __must_check kstrtou8(const char *s, unsigned int base, u8 *res);
|
||||
int __must_check kstrtos8(const char *s, unsigned int base, s8 *res);
|
||||
int __must_check kstrtobool(const char *s, bool *res);
|
||||
|
||||
int __must_check kstrtoull_from_user(const char __user *s, size_t count, unsigned int base, unsigned long long *res);
|
||||
int __must_check kstrtoll_from_user(const char __user *s, size_t count, unsigned int base, long long *res);
|
||||
int __must_check kstrtoul_from_user(const char __user *s, size_t count, unsigned int base, unsigned long *res);
|
||||
int __must_check kstrtol_from_user(const char __user *s, size_t count, unsigned int base, long *res);
|
||||
int __must_check kstrtouint_from_user(const char __user *s, size_t count, unsigned int base, unsigned int *res);
|
||||
int __must_check kstrtoint_from_user(const char __user *s, size_t count, unsigned int base, int *res);
|
||||
int __must_check kstrtou16_from_user(const char __user *s, size_t count, unsigned int base, u16 *res);
|
||||
int __must_check kstrtos16_from_user(const char __user *s, size_t count, unsigned int base, s16 *res);
|
||||
int __must_check kstrtou8_from_user(const char __user *s, size_t count, unsigned int base, u8 *res);
|
||||
int __must_check kstrtos8_from_user(const char __user *s, size_t count, unsigned int base, s8 *res);
|
||||
int __must_check kstrtobool_from_user(const char __user *s, size_t count, bool *res);
|
||||
|
||||
static inline int __must_check kstrtou64_from_user(const char __user *s, size_t count, unsigned int base, u64 *res)
|
||||
{
|
||||
return kstrtoull_from_user(s, count, base, res);
|
||||
}
|
||||
|
||||
static inline int __must_check kstrtos64_from_user(const char __user *s, size_t count, unsigned int base, s64 *res)
|
||||
{
|
||||
return kstrtoll_from_user(s, count, base, res);
|
||||
}
|
||||
|
||||
static inline int __must_check kstrtou32_from_user(const char __user *s, size_t count, unsigned int base, u32 *res)
|
||||
{
|
||||
return kstrtouint_from_user(s, count, base, res);
|
||||
}
|
||||
|
||||
static inline int __must_check kstrtos32_from_user(const char __user *s, size_t count, unsigned int base, s32 *res)
|
||||
{
|
||||
return kstrtoint_from_user(s, count, base, res);
|
||||
}
|
||||
|
||||
/*
|
||||
* Use kstrto<foo> instead.
|
||||
*
|
||||
* NOTE: simple_strto<foo> does not check for the range overflow and,
|
||||
* depending on the input, may give interesting results.
|
||||
*
|
||||
* Use these functions if and only if you cannot use kstrto<foo>, because
|
||||
* the conversion ends on the first non-digit character, which may be far
|
||||
* beyond the supported range. It might be useful to parse the strings like
|
||||
* 10x50 or 12:21 without altering original string or temporary buffer in use.
|
||||
* Keep in mind above caveat.
|
||||
*/
|
||||
|
||||
extern unsigned long simple_strtoul(const char *,char **,unsigned int);
|
||||
extern long simple_strtol(const char *,char **,unsigned int);
|
||||
extern unsigned long long simple_strtoull(const char *,char **,unsigned int);
|
||||
extern long long simple_strtoll(const char *,char **,unsigned int);
|
||||
|
||||
extern int num_to_str(char *buf, int size,
|
||||
unsigned long long num, unsigned int width);
|
||||
|
||||
|
@ -384,52 +235,8 @@ extern int __kernel_text_address(unsigned long addr);
|
|||
extern int kernel_text_address(unsigned long addr);
|
||||
extern int func_ptr_is_kernel_text(void *ptr);
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
extern unsigned int sysctl_oops_all_cpu_backtrace;
|
||||
#else
|
||||
#define sysctl_oops_all_cpu_backtrace 0
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
extern void bust_spinlocks(int yes);
|
||||
extern int panic_timeout;
|
||||
extern unsigned long panic_print;
|
||||
extern int panic_on_oops;
|
||||
extern int panic_on_unrecovered_nmi;
|
||||
extern int panic_on_io_nmi;
|
||||
extern int panic_on_warn;
|
||||
extern unsigned long panic_on_taint;
|
||||
extern bool panic_on_taint_nousertaint;
|
||||
extern int sysctl_panic_on_rcu_stall;
|
||||
extern int sysctl_max_rcu_stall_to_panic;
|
||||
extern int sysctl_panic_on_stackoverflow;
|
||||
|
||||
extern bool crash_kexec_post_notifiers;
|
||||
|
||||
/*
|
||||
* panic_cpu is used for synchronizing panic() and crash_kexec() execution. It
|
||||
* holds a CPU number which is executing panic() currently. A value of
|
||||
* PANIC_CPU_INVALID means no CPU has entered panic() or crash_kexec().
|
||||
*/
|
||||
extern atomic_t panic_cpu;
|
||||
#define PANIC_CPU_INVALID -1
|
||||
|
||||
/*
|
||||
* Only to be used by arch init code. If the user over-wrote the default
|
||||
* CONFIG_PANIC_TIMEOUT, honor it.
|
||||
*/
|
||||
static inline void set_arch_panic_timeout(int timeout, int arch_default_timeout)
|
||||
{
|
||||
if (panic_timeout == arch_default_timeout)
|
||||
panic_timeout = timeout;
|
||||
}
|
||||
extern const char *print_tainted(void);
|
||||
enum lockdep_ok {
|
||||
LOCKDEP_STILL_OK,
|
||||
LOCKDEP_NOW_UNRELIABLE
|
||||
};
|
||||
extern void add_taint(unsigned flag, enum lockdep_ok);
|
||||
extern int test_taint(unsigned flag);
|
||||
extern unsigned long get_taint(void);
|
||||
extern int root_mountflags;
|
||||
|
||||
extern bool early_boot_irqs_disabled;
|
||||
|
@ -448,36 +255,6 @@ extern enum system_states {
|
|||
SYSTEM_SUSPEND,
|
||||
} system_state;
|
||||
|
||||
/* This cannot be an enum because some may be used in assembly source. */
|
||||
#define TAINT_PROPRIETARY_MODULE 0
|
||||
#define TAINT_FORCED_MODULE 1
|
||||
#define TAINT_CPU_OUT_OF_SPEC 2
|
||||
#define TAINT_FORCED_RMMOD 3
|
||||
#define TAINT_MACHINE_CHECK 4
|
||||
#define TAINT_BAD_PAGE 5
|
||||
#define TAINT_USER 6
|
||||
#define TAINT_DIE 7
|
||||
#define TAINT_OVERRIDDEN_ACPI_TABLE 8
|
||||
#define TAINT_WARN 9
|
||||
#define TAINT_CRAP 10
|
||||
#define TAINT_FIRMWARE_WORKAROUND 11
|
||||
#define TAINT_OOT_MODULE 12
|
||||
#define TAINT_UNSIGNED_MODULE 13
|
||||
#define TAINT_SOFTLOCKUP 14
|
||||
#define TAINT_LIVEPATCH 15
|
||||
#define TAINT_AUX 16
|
||||
#define TAINT_RANDSTRUCT 17
|
||||
#define TAINT_FLAGS_COUNT 18
|
||||
#define TAINT_FLAGS_MAX ((1UL << TAINT_FLAGS_COUNT) - 1)
|
||||
|
||||
struct taint_flag {
|
||||
char c_true; /* character printed when tainted */
|
||||
char c_false; /* character printed when not tainted */
|
||||
bool module; /* also show as a per-module taint flag */
|
||||
};
|
||||
|
||||
extern const struct taint_flag taint_flags[TAINT_FLAGS_COUNT];
|
||||
|
||||
extern const char hex_asc[];
|
||||
#define hex_asc_lo(x) hex_asc[((x) & 0x0f)]
|
||||
#define hex_asc_hi(x) hex_asc[((x) & 0xf0) >> 4]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue