Merge tag 'v5.5-rc4' into locking/kcsan, to resolve conflicts
Conflicts: init/main.c lib/Kconfig.debug Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
+44
-76
@@ -104,29 +104,9 @@ config COMPILE_TEST
|
||||
here. If you are a user/distributor, say N here to exclude useless
|
||||
drivers to be distributed.
|
||||
|
||||
config HEADER_TEST
|
||||
bool "Compile test headers that should be standalone compilable"
|
||||
help
|
||||
Compile test headers listed in header-test-y target to ensure they are
|
||||
self-contained, i.e. compilable as standalone units.
|
||||
|
||||
If you are a developer or tester and want to ensure the requested
|
||||
headers are self-contained, say Y here. Otherwise, choose N.
|
||||
|
||||
config KERNEL_HEADER_TEST
|
||||
bool "Compile test kernel headers"
|
||||
depends on HEADER_TEST
|
||||
help
|
||||
Headers in include/ are used to build external moduls.
|
||||
Compile test them to ensure they are self-contained, i.e.
|
||||
compilable as standalone units.
|
||||
|
||||
If you are a developer or tester and want to ensure the headers
|
||||
in include/ are self-contained, say Y here. Otherwise, choose N.
|
||||
|
||||
config UAPI_HEADER_TEST
|
||||
bool "Compile test UAPI headers"
|
||||
depends on HEADER_TEST && HEADERS_INSTALL && CC_CAN_LINK
|
||||
depends on HEADERS_INSTALL && CC_CAN_LINK
|
||||
help
|
||||
Compile test headers exported to user-space to ensure they are
|
||||
self-contained, i.e. compilable as standalone units.
|
||||
@@ -166,13 +146,13 @@ config LOCALVERSION_AUTO
|
||||
which is done within the script "scripts/setlocalversion".)
|
||||
|
||||
config BUILD_SALT
|
||||
string "Build ID Salt"
|
||||
default ""
|
||||
help
|
||||
The build ID is used to link binaries and their debug info. Setting
|
||||
this option will use the value in the calculation of the build id.
|
||||
This is mostly useful for distributions which want to ensure the
|
||||
build is unique between builds. It's safe to leave the default.
|
||||
string "Build ID Salt"
|
||||
default ""
|
||||
help
|
||||
The build ID is used to link binaries and their debug info. Setting
|
||||
this option will use the value in the calculation of the build id.
|
||||
This is mostly useful for distributions which want to ensure the
|
||||
build is unique between builds. It's safe to leave the default.
|
||||
|
||||
config HAVE_KERNEL_GZIP
|
||||
bool
|
||||
@@ -785,6 +765,10 @@ config ARCH_SUPPORTS_NUMA_BALANCING
|
||||
config ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH
|
||||
bool
|
||||
|
||||
config CC_HAS_INT128
|
||||
def_bool y
|
||||
depends on !$(cc-option,-D__SIZEOF_INT128__=0)
|
||||
|
||||
#
|
||||
# For architectures that know their GCC __int128 support is sound
|
||||
#
|
||||
@@ -834,7 +818,7 @@ menuconfig CGROUPS
|
||||
if CGROUPS
|
||||
|
||||
config PAGE_COUNTER
|
||||
bool
|
||||
bool
|
||||
|
||||
config MEMCG
|
||||
bool "Memory controller"
|
||||
@@ -1327,9 +1311,9 @@ menuconfig EXPERT
|
||||
select DEBUG_KERNEL
|
||||
help
|
||||
This option allows certain base kernel options and settings
|
||||
to be disabled or tweaked. This is for specialized
|
||||
environments which can tolerate a "non-standard" kernel.
|
||||
Only use this if you really know what you are doing.
|
||||
to be disabled or tweaked. This is for specialized
|
||||
environments which can tolerate a "non-standard" kernel.
|
||||
Only use this if you really know what you are doing.
|
||||
|
||||
config UID16
|
||||
bool "Enable 16-bit UID system calls" if EXPERT
|
||||
@@ -1372,23 +1356,6 @@ config SYSFS_SYSCALL
|
||||
|
||||
If unsure say Y here.
|
||||
|
||||
config SYSCTL_SYSCALL
|
||||
bool "Sysctl syscall support" if EXPERT
|
||||
depends on PROC_SYSCTL
|
||||
default n
|
||||
select SYSCTL
|
||||
---help---
|
||||
sys_sysctl uses binary paths that have been found challenging
|
||||
to properly maintain and use. The interface in /proc/sys
|
||||
using paths with ascii names is now the primary path to this
|
||||
information.
|
||||
|
||||
Almost nothing using the binary sysctl interface so if you are
|
||||
trying to save some space it is probably safe to disable this,
|
||||
making your kernel marginally smaller.
|
||||
|
||||
If unsure say N here.
|
||||
|
||||
config FHANDLE
|
||||
bool "open by fhandle syscalls" if EXPERT
|
||||
select EXPORTFS
|
||||
@@ -1439,11 +1406,11 @@ config BUG
|
||||
bool "BUG() support" if EXPERT
|
||||
default y
|
||||
help
|
||||
Disabling this option eliminates support for BUG and WARN, reducing
|
||||
the size of your kernel image and potentially quietly ignoring
|
||||
numerous fatal conditions. You should only consider disabling this
|
||||
option for embedded systems with no facilities for reporting errors.
|
||||
Just say Y.
|
||||
Disabling this option eliminates support for BUG and WARN, reducing
|
||||
the size of your kernel image and potentially quietly ignoring
|
||||
numerous fatal conditions. You should only consider disabling this
|
||||
option for embedded systems with no facilities for reporting errors.
|
||||
Just say Y.
|
||||
|
||||
config ELF_CORE
|
||||
depends on COREDUMP
|
||||
@@ -1459,8 +1426,8 @@ config PCSPKR_PLATFORM
|
||||
select I8253_LOCK
|
||||
default y
|
||||
help
|
||||
This option allows to disable the internal PC-Speaker
|
||||
support, saving some memory.
|
||||
This option allows to disable the internal PC-Speaker
|
||||
support, saving some memory.
|
||||
|
||||
config BASE_FULL
|
||||
default y
|
||||
@@ -1548,6 +1515,7 @@ config AIO
|
||||
config IO_URING
|
||||
bool "Enable IO uring support" if EXPERT
|
||||
select ANON_INODES
|
||||
select IO_WQ
|
||||
default y
|
||||
help
|
||||
This option enables support for the io_uring interface, enabling
|
||||
@@ -1577,29 +1545,29 @@ config MEMBARRIER
|
||||
If unsure, say Y.
|
||||
|
||||
config KALLSYMS
|
||||
bool "Load all symbols for debugging/ksymoops" if EXPERT
|
||||
default y
|
||||
help
|
||||
Say Y here to let the kernel print out symbolic crash information and
|
||||
symbolic stack backtraces. This increases the size of the kernel
|
||||
somewhat, as all symbols have to be loaded into the kernel image.
|
||||
bool "Load all symbols for debugging/ksymoops" if EXPERT
|
||||
default y
|
||||
help
|
||||
Say Y here to let the kernel print out symbolic crash information and
|
||||
symbolic stack backtraces. This increases the size of the kernel
|
||||
somewhat, as all symbols have to be loaded into the kernel image.
|
||||
|
||||
config KALLSYMS_ALL
|
||||
bool "Include all symbols in kallsyms"
|
||||
depends on DEBUG_KERNEL && KALLSYMS
|
||||
help
|
||||
Normally kallsyms only contains the symbols of functions for nicer
|
||||
OOPS messages and backtraces (i.e., symbols from the text and inittext
|
||||
sections). This is sufficient for most cases. And only in very rare
|
||||
cases (e.g., when a debugger is used) all symbols are required (e.g.,
|
||||
names of variables from the data sections, etc).
|
||||
Normally kallsyms only contains the symbols of functions for nicer
|
||||
OOPS messages and backtraces (i.e., symbols from the text and inittext
|
||||
sections). This is sufficient for most cases. And only in very rare
|
||||
cases (e.g., when a debugger is used) all symbols are required (e.g.,
|
||||
names of variables from the data sections, etc).
|
||||
|
||||
This option makes sure that all symbols are loaded into the kernel
|
||||
image (i.e., symbols from all sections) in cost of increased kernel
|
||||
size (depending on the kernel configuration, it may be 300KiB or
|
||||
something like this).
|
||||
This option makes sure that all symbols are loaded into the kernel
|
||||
image (i.e., symbols from all sections) in cost of increased kernel
|
||||
size (depending on the kernel configuration, it may be 300KiB or
|
||||
something like this).
|
||||
|
||||
Say N unless you really need all symbols.
|
||||
Say N unless you really need all symbols.
|
||||
|
||||
config KALLSYMS_ABSOLUTE_PERCPU
|
||||
bool
|
||||
@@ -1742,12 +1710,12 @@ config DEBUG_PERF_USE_VMALLOC
|
||||
depends on PERF_EVENTS && DEBUG_KERNEL && !PPC
|
||||
select PERF_USE_VMALLOC
|
||||
help
|
||||
Use vmalloc memory to back perf mmap() buffers.
|
||||
Use vmalloc memory to back perf mmap() buffers.
|
||||
|
||||
Mostly useful for debugging the vmalloc code on platforms
|
||||
that don't require it.
|
||||
Mostly useful for debugging the vmalloc code on platforms
|
||||
that don't require it.
|
||||
|
||||
Say N if unsure.
|
||||
Say N if unsure.
|
||||
|
||||
endmenu
|
||||
|
||||
|
||||
+75
-7
@@ -212,6 +212,7 @@ static int match_dev_by_label(struct device *dev, const void *data)
|
||||
* a colon.
|
||||
* 9) PARTLABEL=<name> with name being the GPT partition label.
|
||||
* MSDOS partitions do not support labels!
|
||||
* 10) /dev/cifs represents Root_CIFS (0xfe)
|
||||
*
|
||||
* If name doesn't have fall into the categories above, we return (0,0).
|
||||
* block_class is used to check if something is a disk name. If the disk
|
||||
@@ -268,6 +269,9 @@ dev_t name_to_dev_t(const char *name)
|
||||
res = Root_NFS;
|
||||
if (strcmp(name, "nfs") == 0)
|
||||
goto done;
|
||||
res = Root_CIFS;
|
||||
if (strcmp(name, "cifs") == 0)
|
||||
goto done;
|
||||
res = Root_RAM0;
|
||||
if (strcmp(name, "ram") == 0)
|
||||
goto done;
|
||||
@@ -383,12 +387,27 @@ static void __init get_fs_names(char *page)
|
||||
*s = '\0';
|
||||
}
|
||||
|
||||
static int __init do_mount_root(char *name, char *fs, int flags, void *data)
|
||||
static int __init do_mount_root(const char *name, const char *fs,
|
||||
const int flags, const void *data)
|
||||
{
|
||||
struct super_block *s;
|
||||
int err = ksys_mount(name, "/root", fs, flags, data);
|
||||
if (err)
|
||||
return err;
|
||||
struct page *p = NULL;
|
||||
char *data_page = NULL;
|
||||
int ret;
|
||||
|
||||
if (data) {
|
||||
/* do_mount() requires a full page as fifth argument */
|
||||
p = alloc_page(GFP_KERNEL);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
data_page = page_address(p);
|
||||
/* zero-pad. do_mount() will make sure it's terminated */
|
||||
strncpy(data_page, data, PAGE_SIZE);
|
||||
}
|
||||
|
||||
ret = do_mount(name, "/root", fs, flags, data_page);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
ksys_chdir("/root");
|
||||
s = current->fs->pwd.dentry->d_sb;
|
||||
@@ -398,7 +417,11 @@ static int __init do_mount_root(char *name, char *fs, int flags, void *data)
|
||||
s->s_type->name,
|
||||
sb_rdonly(s) ? " readonly" : "",
|
||||
MAJOR(ROOT_DEV), MINOR(ROOT_DEV));
|
||||
return 0;
|
||||
|
||||
out:
|
||||
if (p)
|
||||
put_page(p);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void __init mount_block_root(char *name, int flags)
|
||||
@@ -501,6 +524,42 @@ static int __init mount_nfs_root(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CIFS_ROOT
|
||||
|
||||
extern int cifs_root_data(char **dev, char **opts);
|
||||
|
||||
#define CIFSROOT_TIMEOUT_MIN 5
|
||||
#define CIFSROOT_TIMEOUT_MAX 30
|
||||
#define CIFSROOT_RETRY_MAX 5
|
||||
|
||||
static int __init mount_cifs_root(void)
|
||||
{
|
||||
char *root_dev, *root_data;
|
||||
unsigned int timeout;
|
||||
int try, err;
|
||||
|
||||
err = cifs_root_data(&root_dev, &root_data);
|
||||
if (err != 0)
|
||||
return 0;
|
||||
|
||||
timeout = CIFSROOT_TIMEOUT_MIN;
|
||||
for (try = 1; ; try++) {
|
||||
err = do_mount_root(root_dev, "cifs", root_mountflags,
|
||||
root_data);
|
||||
if (err == 0)
|
||||
return 1;
|
||||
if (try > CIFSROOT_RETRY_MAX)
|
||||
break;
|
||||
|
||||
ssleep(timeout);
|
||||
timeout <<= 1;
|
||||
if (timeout > CIFSROOT_TIMEOUT_MAX)
|
||||
timeout = CIFSROOT_TIMEOUT_MAX;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_BLK_DEV_RAM) || defined(CONFIG_BLK_DEV_FD)
|
||||
void __init change_floppy(char *fmt, ...)
|
||||
{
|
||||
@@ -542,6 +601,15 @@ void __init mount_root(void)
|
||||
ROOT_DEV = Root_FD0;
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_CIFS_ROOT
|
||||
if (ROOT_DEV == Root_CIFS) {
|
||||
if (mount_cifs_root())
|
||||
return;
|
||||
|
||||
printk(KERN_ERR "VFS: Unable to mount root fs via SMB, trying floppy.\n");
|
||||
ROOT_DEV = Root_FD0;
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_BLK_DEV_FD
|
||||
if (MAJOR(ROOT_DEV) == FLOPPY_MAJOR) {
|
||||
/* rd_doload is 2 for a dual initrd/ramload setup */
|
||||
@@ -621,8 +689,8 @@ void __init prepare_namespace(void)
|
||||
|
||||
mount_root();
|
||||
out:
|
||||
devtmpfs_mount("dev");
|
||||
ksys_mount(".", "/", NULL, MS_MOVE, NULL);
|
||||
devtmpfs_mount();
|
||||
do_mount(".", "/", NULL, MS_MOVE, NULL);
|
||||
ksys_chroot(".");
|
||||
}
|
||||
|
||||
|
||||
@@ -48,13 +48,10 @@ early_param("initrd", early_initrd);
|
||||
static int init_linuxrc(struct subprocess_info *info, struct cred *new)
|
||||
{
|
||||
ksys_unshare(CLONE_FS | CLONE_FILES);
|
||||
/* stdin/stdout/stderr for /linuxrc */
|
||||
ksys_open("/dev/console", O_RDWR, 0);
|
||||
ksys_dup(0);
|
||||
ksys_dup(0);
|
||||
console_on_rootfs();
|
||||
/* move initrd over / and chdir/chroot in initrd root */
|
||||
ksys_chdir("/root");
|
||||
ksys_mount(".", "/", NULL, MS_MOVE, NULL);
|
||||
do_mount(".", "/", NULL, MS_MOVE, NULL);
|
||||
ksys_chroot(".");
|
||||
ksys_setsid();
|
||||
return 0;
|
||||
@@ -89,7 +86,7 @@ static void __init handle_initrd(void)
|
||||
current->flags &= ~PF_FREEZER_SKIP;
|
||||
|
||||
/* move initrd to rootfs' /old */
|
||||
ksys_mount("..", ".", NULL, MS_MOVE, NULL);
|
||||
do_mount("..", ".", NULL, MS_MOVE, NULL);
|
||||
/* switch root and cwd back to / of rootfs */
|
||||
ksys_chroot("..");
|
||||
|
||||
@@ -103,7 +100,7 @@ static void __init handle_initrd(void)
|
||||
mount_root();
|
||||
|
||||
printk(KERN_NOTICE "Trying to move old root to /initrd ... ");
|
||||
error = ksys_mount("/old", "/root/initrd", NULL, MS_MOVE, NULL);
|
||||
error = do_mount("/old", "/root/initrd", NULL, MS_MOVE, NULL);
|
||||
if (!error)
|
||||
printk("okay\n");
|
||||
else {
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <linux/syscalls.h>
|
||||
#include <linux/utime.h>
|
||||
#include <linux/file.h>
|
||||
#include <linux/memblock.h>
|
||||
|
||||
static ssize_t __init xwrite(int fd, const char *p, size_t count)
|
||||
{
|
||||
@@ -529,6 +530,13 @@ extern unsigned long __initramfs_size;
|
||||
|
||||
void __weak free_initrd_mem(unsigned long start, unsigned long end)
|
||||
{
|
||||
#ifdef CONFIG_ARCH_KEEP_MEMBLOCK
|
||||
unsigned long aligned_start = ALIGN_DOWN(start, PAGE_SIZE);
|
||||
unsigned long aligned_end = ALIGN(end, PAGE_SIZE);
|
||||
|
||||
memblock_free(__pa(aligned_start), aligned_end - aligned_start);
|
||||
#endif
|
||||
|
||||
free_reserved_area((void *)start, (void *)end, POISON_FREE_INITMEM,
|
||||
"initrd");
|
||||
}
|
||||
|
||||
+26
-5
@@ -93,6 +93,7 @@
|
||||
#include <linux/rodata_test.h>
|
||||
#include <linux/jump_label.h>
|
||||
#include <linux/mem_encrypt.h>
|
||||
#include <linux/file.h>
|
||||
#include <linux/kcsan.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
@@ -1157,6 +1158,30 @@ static int __ref kernel_init(void *unused)
|
||||
"See Linux Documentation/admin-guide/init.rst for guidance.");
|
||||
}
|
||||
|
||||
void console_on_rootfs(void)
|
||||
{
|
||||
struct file *file;
|
||||
unsigned int i;
|
||||
|
||||
/* Open /dev/console in kernelspace, this should never fail */
|
||||
file = filp_open("/dev/console", O_RDWR, 0);
|
||||
if (IS_ERR(file))
|
||||
goto err_out;
|
||||
|
||||
/* create stdin/stdout/stderr, this should never fail */
|
||||
for (i = 0; i < 3; i++) {
|
||||
if (f_dupfd(i, file, 0) != i)
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
err_out:
|
||||
/* no panic -- this might not be fatal */
|
||||
pr_err("Warning: unable to open an initial console.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
static noinline void __init kernel_init_freeable(void)
|
||||
{
|
||||
/*
|
||||
@@ -1192,12 +1217,8 @@ static noinline void __init kernel_init_freeable(void)
|
||||
|
||||
do_basic_setup();
|
||||
|
||||
/* Open the /dev/console on the rootfs, this should never fail */
|
||||
if (ksys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
|
||||
pr_err("Warning: unable to open an initial console.\n");
|
||||
console_on_rootfs();
|
||||
|
||||
(void) ksys_dup(0);
|
||||
(void) ksys_dup(0);
|
||||
/*
|
||||
* check if there is an early userspace init. If yes, let it do all
|
||||
* the work
|
||||
|
||||
Reference in New Issue
Block a user