Merge tag 'kconfig-v5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 29 Apr 2021 21:32:00 +0000 (14:32 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 29 Apr 2021 21:32:00 +0000 (14:32 -0700)
Pull Kconfig updates from Masahiro Yamada:

 - Change 'option defconfig' to the environment variable
   KCONFIG_DEFCONFIG_LIST

 - Refactor tinyconfig without using allnoconfig_y

 - Remove 'option allnoconfig_y' syntax

 - Change 'option modules' to 'modules'

 - Do not use /boot/config-* etc. as base config for cross-compilation

 - Fix a search bug in nconf

 - Various code cleanups

* tag 'kconfig-v5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (34 commits)
  kconfig: refactor .gitignore
  kconfig: highlight xconfig 'comment' lines with '***'
  kconfig: highlight gconfig 'comment' lines with '***'
  kconfig: gconf: remove unused code
  kconfig: remove unused PACKAGE definition
  kconfig: nconf: stop endless search loops
  kconfig: split menu.c out of parser.y
  kconfig: nconf: refactor in print_in_middle()
  kconfig: nconf: remove meaningless wattrset() call from show_menu()
  kconfig: nconf: change set_config_filename() to void function
  kconfig: nconf: refactor attributes setup code
  kconfig: nconf: remove unneeded default for menu prompt
  kconfig: nconf: get rid of (void) casts from wattrset() calls
  kconfig: nconf: fix NORMAL attributes
  kconfig: mconf,nconf: remove unneeded '\0' termination after snprintf()
  kconfig: use /boot/config-* etc. as DEFCONFIG_LIST only for native build
  kconfig: change sym_change_count to a boolean flag
  kconfig: nconf: fix core dump when searching in empty menu
  kconfig: lxdialog: A spello fix and a punctuation added
  kconfig: streamline_config.pl: Couple of typo fixes
  ...

1  2 
Makefile
init/Kconfig
scripts/kconfig/confdata.c

diff --combined Makefile
+++ b/Makefile
@@@ -2,7 -2,7 +2,7 @@@
  VERSION = 5
  PATCHLEVEL = 12
  SUBLEVEL = 0
 -EXTRAVERSION = -rc3
 +EXTRAVERSION =
  NAME = Frozen Wasteland
  
  # *DOCUMENTATION*
@@@ -264,10 -264,6 +264,10 @@@ no-dot-config-targets := $(clean-target
                         $(version_h) headers headers_% archheaders archscripts \
                         %asm-generic kernelversion %src-pkg dt_binding_check \
                         outputmakefile
 +# Installation targets should not require compiler. Unfortunately, vdso_install
 +# is an exception where build artifacts may be updated. This must be fixed.
 +no-compiler-targets := $(no-dot-config-targets) install dtbs_install \
 +                      headers_install modules_install kernelrelease image_name
  no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease \
                          image_name
  single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/
  config-build  :=
  mixed-build   :=
  need-config   := 1
 +need-compiler := 1
  may-sync-config       := 1
  single-build  :=
  
@@@ -285,12 -280,6 +285,12 @@@ ifneq ($(filter $(no-dot-config-targets
        endif
  endif
  
 +ifneq ($(filter $(no-compiler-targets), $(MAKECMDGOALS)),)
 +      ifeq ($(filter-out $(no-compiler-targets), $(MAKECMDGOALS)),)
 +              need-compiler :=
 +      endif
 +endif
 +
  ifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),)
        ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),)
                may-sync-config :=
@@@ -350,14 -339,14 +350,14 @@@ __build_one_by_one
  
  else # !mixed-build
  
 -include scripts/Kbuild.include
 +include $(srctree)/scripts/Kbuild.include
  
  # Read KERNELRELEASE from include/config/kernel.release (if it exists)
  KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
  KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
  export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION
  
 -include scripts/subarch.include
 +include $(srctree)/scripts/subarch.include
  
  # Cross compiling and selecting different set of gcc/bin-utils
  # ---------------------------------------------------------------------------
@@@ -404,12 -393,14 +404,14 @@@ ifeq ($(ARCH),sh64
         SRCARCH := sh
  endif
  
+ export cross_compiling :=
+ ifneq ($(SRCARCH),$(SUBARCH))
+ cross_compiling := 1
+ endif
  KCONFIG_CONFIG        ?= .config
  export KCONFIG_CONFIG
  
- # Default file for 'make defconfig'. This may be overridden by arch-Makefile.
- export KBUILD_DEFCONFIG := defconfig
  # SHELL used by kbuild
  CONFIG_SHELL := sh
  
@@@ -574,18 -565,20 +576,18 @@@ endi
  # Some architectures define CROSS_COMPILE in arch/$(SRCARCH)/Makefile.
  # CC_VERSION_TEXT is referenced from Kconfig (so it needs export),
  # and from include/config/auto.conf.cmd to detect the compiler upgrade.
 -CC_VERSION_TEXT = $(shell $(CC) --version 2>/dev/null | head -n 1 | sed 's/\#//g')
 +CC_VERSION_TEXT = $(subst $(pound),,$(shell $(CC) --version 2>/dev/null | head -n 1))
  
  ifneq ($(findstring clang,$(CC_VERSION_TEXT)),)
  ifneq ($(CROSS_COMPILE),)
  CLANG_FLAGS   += --target=$(notdir $(CROSS_COMPILE:%-=%))
 -GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
 -CLANG_FLAGS   += --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
 -GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..)
 -endif
 -ifneq ($(GCC_TOOLCHAIN),)
 -CLANG_FLAGS   += --gcc-toolchain=$(GCC_TOOLCHAIN)
  endif
 -ifneq ($(LLVM_IAS),1)
 +ifeq ($(LLVM_IAS),1)
 +CLANG_FLAGS   += -integrated-as
 +else
  CLANG_FLAGS   += -no-integrated-as
 +GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
 +CLANG_FLAGS   += --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
  endif
  CLANG_FLAGS   += -Werror=unknown-warning-option
  KBUILD_CFLAGS += $(CLANG_FLAGS)
@@@ -593,12 -586,6 +595,12 @@@ KBUILD_AFLAGS    += $(CLANG_FLAGS
  export CLANG_FLAGS
  endif
  
 +# Include this also for config targets because some architectures need
 +# cc-cross-prefix to determine CROSS_COMPILE.
 +ifdef need-compiler
 +include $(srctree)/scripts/Makefile.compiler
 +endif
 +
  ifdef config-build
  # ===========================================================================
  # *config targets only - make sure prerequisites are updated, and descend
  # Read arch specific Makefile to set KBUILD_DEFCONFIG as needed.
  # KBUILD_DEFCONFIG may point out an alternative default configuration
  # used for 'make defconfig'
 -include arch/$(SRCARCH)/Makefile
 +include $(srctree)/arch/$(SRCARCH)/Makefile
  export KBUILD_DEFCONFIG KBUILD_KCONFIG CC_VERSION_TEXT
  
  config: outputmakefile scripts_basic FORCE
@@@ -694,7 -681,7 +696,7 @@@ RETPOLINE_VDSO_CFLAGS := $(call cc-opti
  export RETPOLINE_CFLAGS
  export RETPOLINE_VDSO_CFLAGS
  
 -include arch/$(SRCARCH)/Makefile
 +include $(srctree)/arch/$(SRCARCH)/Makefile
  
  ifdef need-config
  ifdef may-sync-config
@@@ -828,10 -815,6 +830,10 @@@ KBUILD_CFLAGS    += -ftrivial-auto-var-ini
  KBUILD_CFLAGS += -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang
  endif
  
 +# While VLAs have been removed, GCC produces unreachable stack probes
 +# for the randomize_kstack_offset feature. Disable it for all compilers.
 +KBUILD_CFLAGS += $(call cc-option, -fno-stack-clash-protection)
 +
  DEBUG_CFLAGS  :=
  
  # Workaround for GCC versions < 5.0
@@@ -923,7 -906,7 +925,7 @@@ endi
  ifdef CONFIG_LTO_CLANG
  ifdef CONFIG_LTO_CLANG_THIN
  CC_FLAGS_LTO  := -flto=thin -fsplit-lto-unit
 -KBUILD_LDFLAGS        += --thinlto-cache-dir=$(extmod-prefix).thinlto-cache
 +KBUILD_LDFLAGS        += --thinlto-cache-dir=$(extmod_prefix).thinlto-cache
  else
  CC_FLAGS_LTO  := -flto
  endif
@@@ -939,23 -922,6 +941,23 @@@ KBUILD_AFLAGS    += -fno-lt
  export CC_FLAGS_LTO
  endif
  
 +ifdef CONFIG_CFI_CLANG
 +CC_FLAGS_CFI  := -fsanitize=cfi \
 +                 -fsanitize-cfi-cross-dso \
 +                 -fno-sanitize-cfi-canonical-jump-tables \
 +                 -fno-sanitize-trap=cfi \
 +                 -fno-sanitize-blacklist
 +
 +ifdef CONFIG_CFI_PERMISSIVE
 +CC_FLAGS_CFI  += -fsanitize-recover=cfi
 +endif
 +
 +# If LTO flags are filtered out, we must also filter out CFI.
 +CC_FLAGS_LTO  += $(CC_FLAGS_CFI)
 +KBUILD_CFLAGS += $(CC_FLAGS_CFI)
 +export CC_FLAGS_CFI
 +endif
 +
  ifdef CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_32B
  KBUILD_CFLAGS += -falign-functions=32
  endif
@@@ -1084,10 -1050,51 +1086,10 @@@ export INSTALL_DTBS_PATH ?= $(INSTALL_P
  MODLIB        = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
  export MODLIB
  
 -#
 -# INSTALL_MOD_STRIP, if defined, will cause modules to be
 -# stripped after they are installed.  If INSTALL_MOD_STRIP is '1', then
 -# the default option --strip-debug will be used.  Otherwise,
 -# INSTALL_MOD_STRIP value will be used as the options to the strip command.
 -
 -ifdef INSTALL_MOD_STRIP
 -ifeq ($(INSTALL_MOD_STRIP),1)
 -mod_strip_cmd = $(STRIP) --strip-debug
 -else
 -mod_strip_cmd = $(STRIP) $(INSTALL_MOD_STRIP)
 -endif # INSTALL_MOD_STRIP=1
 -else
 -mod_strip_cmd = true
 -endif # INSTALL_MOD_STRIP
 -export mod_strip_cmd
 -
 -# CONFIG_MODULE_COMPRESS, if defined, will cause module to be compressed
 -# after they are installed in agreement with CONFIG_MODULE_COMPRESS_GZIP
 -# or CONFIG_MODULE_COMPRESS_XZ.
 -
 -mod_compress_cmd = true
 -ifdef CONFIG_MODULE_COMPRESS
 -  ifdef CONFIG_MODULE_COMPRESS_GZIP
 -    mod_compress_cmd = $(KGZIP) -n -f
 -  endif # CONFIG_MODULE_COMPRESS_GZIP
 -  ifdef CONFIG_MODULE_COMPRESS_XZ
 -    mod_compress_cmd = $(XZ) --lzma2=dict=2MiB -f
 -  endif # CONFIG_MODULE_COMPRESS_XZ
 -endif # CONFIG_MODULE_COMPRESS
 -export mod_compress_cmd
 -
 -ifdef CONFIG_MODULE_SIG_ALL
 -$(eval $(call config_filename,MODULE_SIG_KEY))
 -
 -mod_sign_cmd = scripts/sign-file $(CONFIG_MODULE_SIG_HASH) $(MODULE_SIG_KEY_SRCPREFIX)$(CONFIG_MODULE_SIG_KEY) certs/signing_key.x509
 -else
 -mod_sign_cmd = true
 -endif
 -export mod_sign_cmd
 -
  HOST_LIBELF_LIBS = $(shell pkg-config libelf --libs 2>/dev/null || echo -lelf)
  
  has_libelf = $(call try-run,\
 -               echo "int main() {}" | $(HOSTCC) -xc -o /dev/null $(HOST_LIBELF_LIBS) -,1,0)
 +               echo "int main() {}" | $(HOSTCC) $(KBUILD_HOSTLDFLAGS) -xc -o /dev/null $(HOST_LIBELF_LIBS) -,1,0)
  
  ifdef CONFIG_STACK_VALIDATION
    ifeq ($(has_libelf),1)
@@@ -1121,9 -1128,9 +1123,9 @@@ endif # CONFIG_BP
  
  PHONY += prepare0
  
 -extmod-prefix = $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)
 -export MODORDER := $(extmod-prefix)modules.order
 -export MODULES_NSDEPS := $(extmod-prefix)modules.nsdeps
 +export extmod_prefix = $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)
 +export MODORDER := $(extmod_prefix)modules.order
 +export MODULES_NSDEPS := $(extmod_prefix)modules.nsdeps
  
  ifeq ($(KBUILD_EXTMOD),)
  core-y                += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/
@@@ -1191,7 -1198,7 +1193,7 @@@ cmd_link-vmlinux 
        $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
  
  vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE
 -      +$(call if_changed,link-vmlinux)
 +      +$(call if_changed_dep,link-vmlinux)
  
  targets := vmlinux
  
@@@ -1336,11 -1343,7 +1338,11 @@@ headers: $(version_h) scripts_unifdef u
  # Deprecated. It is no-op now.
  PHONY += headers_check
  headers_check:
 -      @:
 +      @echo >&2 "=================== WARNING ==================="
 +      @echo >&2 "Since Linux 5.5, 'make headers_check' is no-op,"
 +      @echo >&2 "and will be removed after Linux 5.15 release."
 +      @echo >&2 "Please remove headers_check from your scripts."
 +      @echo >&2 "==============================================="
  
  ifdef CONFIG_HEADERS_INSTALL
  prepare: headers
@@@ -1438,6 -1441,11 +1440,6 @@@ endi
  
  PHONY += modules
  modules: $(if $(KBUILD_BUILTIN),vmlinux) modules_check modules_prepare
 -      $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
 -
 -PHONY += modules_check
 -modules_check: modules.order
 -      $(Q)$(CONFIG_SHELL) $(srctree)/scripts/modules-check.sh $<
  
  cmd_modules_order = $(AWK) '!x[$$0]++' $(real-prereqs) > $@
  
@@@ -1451,28 -1459,12 +1453,28 @@@ PHONY += modules_prepar
  modules_prepare: prepare
        $(Q)$(MAKE) $(build)=scripts scripts/module.lds
  
 -# Target to install modules
 -PHONY += modules_install
 -modules_install: _modinst_ _modinst_post
 +export modules_sign_only :=
 +
 +ifeq ($(CONFIG_MODULE_SIG),y)
 +PHONY += modules_sign
 +modules_sign: modules_install
 +      @:
 +
 +# modules_sign is a subset of modules_install.
 +# 'make modules_install modules_sign' is equivalent to 'make modules_install'.
 +ifeq ($(filter modules_install,$(MAKECMDGOALS)),)
 +modules_sign_only := y
 +endif
 +endif
  
 -PHONY += _modinst_
 -_modinst_:
 +modinst_pre :=
 +ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
 +modinst_pre := __modinst_pre
 +endif
 +
 +modules_install: $(modinst_pre)
 +PHONY += __modinst_pre
 +__modinst_pre:
        @rm -rf $(MODLIB)/kernel
        @rm -f $(MODLIB)/source
        @mkdir -p $(MODLIB)/kernel
        @sed 's:^:kernel/:' modules.order > $(MODLIB)/modules.order
        @cp -f modules.builtin $(MODLIB)/
        @cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/
 -      $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
 -
 -# This depmod is only for convenience to give the initial
 -# boot a modules.dep even before / is mounted read-write.  However the
 -# boot script depmod is the master version.
 -PHONY += _modinst_post
 -_modinst_post: _modinst_
 -      $(call cmd,depmod)
 -
 -ifeq ($(CONFIG_MODULE_SIG), y)
 -PHONY += modules_sign
 -modules_sign:
 -      $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modsign
 -endif
 -
 -else # CONFIG_MODULES
 -
 -# Modules not configured
 -# ---------------------------------------------------------------------------
 -
 -PHONY += modules modules_install
 -modules modules_install:
 -      @echo >&2
 -      @echo >&2 "The present kernel configuration has modules disabled."
 -      @echo >&2 "Type 'make config' and enable loadable module support."
 -      @echo >&2 "Then build a kernel with module support enabled."
 -      @echo >&2
 -      @exit 1
  
  endif # CONFIG_MODULES
  
  # make distclean Remove editor backup files, patch leftover files and the like
  
  # Directories & files removed with 'make clean'
 -CLEAN_FILES += include/ksym vmlinux.symvers \
 +CLEAN_FILES += include/ksym vmlinux.symvers modules-only.symvers \
               modules.builtin modules.builtin.modinfo modules.nsdeps \
               compile_commands.json .thinlto-cache
  
@@@ -1732,10 -1752,27 +1734,10 @@@ KBUILD_BUILTIN :
  KBUILD_MODULES := 1
  
  build-dirs := $(KBUILD_EXTMOD)
 -PHONY += modules
 -modules: $(MODORDER)
 -      $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
 -
  $(MODORDER): descend
        @:
  
 -PHONY += modules_install
 -modules_install: _emodinst_ _emodinst_post
 -
 -install-dir := $(if $(INSTALL_MOD_DIR),$(INSTALL_MOD_DIR),extra)
 -PHONY += _emodinst_
 -_emodinst_:
 -      $(Q)mkdir -p $(MODLIB)/$(install-dir)
 -      $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
 -
 -PHONY += _emodinst_post
 -_emodinst_post: _emodinst_
 -      $(call cmd,depmod)
 -
 -compile_commands.json: $(extmod-prefix)compile_commands.json
 +compile_commands.json: $(extmod_prefix)compile_commands.json
  PHONY += compile_commands.json
  
  clean-dirs := $(KBUILD_EXTMOD)
@@@ -1757,43 -1794,6 +1759,43 @@@ PHONY += prepare modules_prepar
  
  endif # KBUILD_EXTMOD
  
 +# ---------------------------------------------------------------------------
 +# Modules
 +
 +PHONY += modules modules_install
 +
 +ifdef CONFIG_MODULES
 +
 +modules: modules_check
 +      $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
 +
 +PHONY += modules_check
 +modules_check: $(MODORDER)
 +      $(Q)$(CONFIG_SHELL) $(srctree)/scripts/modules-check.sh $<
 +
 +quiet_cmd_depmod = DEPMOD  $(MODLIB)
 +      cmd_depmod = $(CONFIG_SHELL) $(srctree)/scripts/depmod.sh $(DEPMOD) \
 +                   $(KERNELRELEASE)
 +
 +modules_install:
 +      $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
 +      $(call cmd,depmod)
 +
 +else # CONFIG_MODULES
 +
 +# Modules not configured
 +# ---------------------------------------------------------------------------
 +
 +modules modules_install:
 +      @echo >&2 '***'
 +      @echo >&2 '*** The present kernel configuration has modules disabled.'
 +      @echo >&2 '*** To use the module feature, please run "make menuconfig" etc.'
 +      @echo >&2 '*** to enable CONFIG_MODULES.'
 +      @echo >&2 '***'
 +      @exit 1
 +
 +endif # CONFIG_MODULES
 +
  # Single targets
  # ---------------------------------------------------------------------------
  # To build individual files in subdirectories, you can do like this:
@@@ -1825,12 -1825,12 +1827,12 @@@ endi
  
  PHONY += single_modpost
  single_modpost: $(single-no-ko) modules_prepare
 -      $(Q){ $(foreach m, $(single-ko), echo $(extmod-prefix)$m;) } > $(MODORDER)
 +      $(Q){ $(foreach m, $(single-ko), echo $(extmod_prefix)$m;) } > $(MODORDER)
        $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
  
  KBUILD_MODULES := 1
  
 -export KBUILD_SINGLE_TARGETS := $(addprefix $(extmod-prefix), $(single-no-ko))
 +export KBUILD_SINGLE_TARGETS := $(addprefix $(extmod_prefix), $(single-no-ko))
  
  # trim unrelated directories
  build-dirs := $(foreach d, $(build-dirs), \
@@@ -1899,12 -1899,12 +1901,12 @@@ nsdeps: module
  quiet_cmd_gen_compile_commands = GEN     $@
        cmd_gen_compile_commands = $(PYTHON3) $< -a $(AR) -o $@ $(filter-out $<, $(real-prereqs))
  
 -$(extmod-prefix)compile_commands.json: scripts/clang-tools/gen_compile_commands.py \
 +$(extmod_prefix)compile_commands.json: scripts/clang-tools/gen_compile_commands.py \
        $(if $(KBUILD_EXTMOD),,$(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)) \
        $(if $(CONFIG_MODULES), $(MODORDER)) FORCE
        $(call if_changed,gen_compile_commands)
  
 -targets += $(extmod-prefix)compile_commands.json
 +targets += $(extmod_prefix)compile_commands.json
  
  PHONY += clang-tidy clang-analyzer
  
@@@ -1912,7 -1912,7 +1914,7 @@@ ifdef CONFIG_CC_IS_CLAN
  quiet_cmd_clang_tools = CHECK   $<
        cmd_clang_tools = $(PYTHON3) $(srctree)/scripts/clang-tools/run-clang-tools.py $@ $<
  
 -clang-tidy clang-analyzer: $(extmod-prefix)compile_commands.json
 +clang-tidy clang-analyzer: $(extmod_prefix)compile_commands.json
        $(call cmd,clang_tools)
  else
  clang-tidy clang-analyzer:
@@@ -1982,6 -1982,11 +1984,6 @@@ tools/%: FORC
  quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN   $(wildcard $(rm-files)))
        cmd_rmfiles = rm -rf $(rm-files)
  
 -# Run depmod only if we have System.map and depmod is executable
 -quiet_cmd_depmod = DEPMOD  $(KERNELRELEASE)
 -      cmd_depmod = $(CONFIG_SHELL) $(srctree)/scripts/depmod.sh $(DEPMOD) \
 -                   $(KERNELRELEASE)
 -
  # read saved command lines for existing targets
  existing-targets := $(wildcard $(sort $(targets)))
  
diff --combined init/Kconfig
@@@ -1,13 -1,4 +1,4 @@@
  # SPDX-License-Identifier: GPL-2.0-only
- config DEFCONFIG_LIST
-       string
-       depends on !UML
-       option defconfig_list
-       default "/lib/modules/$(shell,uname -r)/.config"
-       default "/etc/kernel-config"
-       default "/boot/config-$(shell,uname -r)"
-       default "arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG)"
  config CC_VERSION_TEXT
        string
        default "$(CC_VERSION_TEXT)"
@@@ -21,7 -12,7 +12,7 @@@
  
          - Ensure full rebuild when the compiler is updated
            include/linux/compiler-version.h contains this option in the comment
 -          line so fixdep adds include/config/cc/version/text.h into the
 +          line so fixdep adds include/config/CC_VERSION_TEXT into the
            auto-generated dependency. When the compiler is updated, syncconfig
            will touch it and then every file will be rebuilt.
  
@@@ -41,18 -32,6 +32,18 @@@ config CLANG_VERSIO
        default $(cc-version) if CC_IS_CLANG
        default 0
  
 +config AS_IS_GNU
 +      def_bool $(success,test "$(as-name)" = GNU)
 +
 +config AS_IS_LLVM
 +      def_bool $(success,test "$(as-name)" = LLVM)
 +
 +config AS_VERSION
 +      int
 +      # Use clang version if this is the integrated assembler
 +      default CLANG_VERSION if AS_IS_LLVM
 +      default $(as-version)
 +
  config LD_IS_BFD
        def_bool $(success,test "$(ld-name)" = BFD)
  
@@@ -1122,20 -1101,6 +1113,20 @@@ config CGROUP_BP
          BPF_CGROUP_INET_INGRESS will be executed on the ingress path of
          inet sockets.
  
 +config CGROUP_MISC
 +      bool "Misc resource controller"
 +      default n
 +      help
 +        Provides a controller for miscellaneous resources on a host.
 +
 +        Miscellaneous scalar resources are the resources on the host system
 +        which cannot be abstracted like the other cgroups. This controller
 +        tracks and limits the miscellaneous resources used by a process
 +        attached to a cgroup hierarchy.
 +
 +        For more information, please check misc cgroup section in
 +        /Documentation/admin-guide/cgroup-v2.rst.
 +
  config CGROUP_DEBUG
        bool "Debug controller"
        default n
@@@ -1734,8 -1699,6 +1725,8 @@@ config BPF_SYSCAL
        select BPF
        select IRQ_WORK
        select TASKS_TRACE_RCU
 +      select BINARY_PRINTF
 +      select NET_SOCK_MSG if INET
        default n
        help
          Enable the bpf() system call that allows to manipulate eBPF
@@@ -1805,7 -1768,6 +1796,6 @@@ config DEBUG_RSE
  
  config EMBEDDED
        bool "Embedded system"
-       option allnoconfig_y
        select EXPERT
        help
          This option should be enabled if compiling the kernel for
@@@ -2080,7 -2042,7 +2070,7 @@@ config MODULE_SIG_FORMA
  
  menuconfig MODULES
        bool "Enable loadable module support"
-       option modules
+       modules
        help
          Kernel modules are small pieces of compiled code which can
          be inserted in the running kernel, rather than being
@@@ -2241,53 -2203,40 +2231,53 @@@ config MODULE_SIG_HAS
        default "sha384" if MODULE_SIG_SHA384
        default "sha512" if MODULE_SIG_SHA512
  
 -config MODULE_COMPRESS
 -      bool "Compress modules on installation"
 +choice
 +      prompt "Module compression mode"
        help
 +        This option allows you to choose the algorithm which will be used to
 +        compress modules when 'make modules_install' is run. (or, you can
 +        choose to not compress modules at all.)
  
 -        Compresses kernel modules when 'make modules_install' is run; gzip or
 -        xz depending on "Compression algorithm" below.
 +        External modules will also be compressed in the same way during the
 +        installation.
  
 -        module-init-tools MAY support gzip, and kmod MAY support gzip and xz.
 +        For modules inside an initrd or initramfs, it's more efficient to
 +        compress the whole initrd or initramfs instead.
  
 -        Out-of-tree kernel modules installed using Kbuild will also be
 -        compressed upon installation.
 +        This is fully compatible with signed modules.
  
 -        Note: for modules inside an initrd or initramfs, it's more efficient
 -        to compress the whole initrd or initramfs instead.
 +        Please note that the tool used to load modules needs to support the
 +        corresponding algorithm. module-init-tools MAY support gzip, and kmod
 +        MAY support gzip, xz and zstd.
  
 -        Note: This is fully compatible with signed modules.
 +        Your build system needs to provide the appropriate compression tool
 +        to compress the modules.
  
 -        If in doubt, say N.
 +        If in doubt, select 'None'.
  
 -choice
 -      prompt "Compression algorithm"
 -      depends on MODULE_COMPRESS
 -      default MODULE_COMPRESS_GZIP
 +config MODULE_COMPRESS_NONE
 +      bool "None"
        help
 -        This determines which sort of compression will be used during
 -        'make modules_install'.
 -
 -        GZIP (default) and XZ are supported.
 +        Do not compress modules. The installed modules are suffixed
 +        with .ko.
  
  config MODULE_COMPRESS_GZIP
        bool "GZIP"
 +      help
 +        Compress modules with GZIP. The installed modules are suffixed
 +        with .ko.gz.
  
  config MODULE_COMPRESS_XZ
        bool "XZ"
 +      help
 +        Compress modules with XZ. The installed modules are suffixed
 +        with .ko.xz.
 +
 +config MODULE_COMPRESS_ZSTD
 +      bool "ZSTD"
 +      help
 +        Compress modules with ZSTD. The installed modules are suffixed
 +        with .ko.zst.
  
  endchoice
  
@@@ -2337,7 -2286,7 +2327,7 @@@ endif # MODULE
  
  config MODULES_TREE_LOOKUP
        def_bool y
 -      depends on PERF_EVENTS || TRACING
 +      depends on PERF_EVENTS || TRACING || CFI_CLANG
  
  config INIT_ALL_POSSIBLE
        bool
@@@ -33,7 -33,7 +33,7 @@@ static bool is_dir(const char *path
        struct stat st;
  
        if (stat(path, &st))
-               return 0;
+               return false;
  
        return S_ISDIR(st.st_mode);
  }
@@@ -130,14 -130,19 +130,14 @@@ static size_t depfile_prefix_len
  static int conf_touch_dep(const char *name)
  {
        int fd, ret;
 -      const char *s;
 -      char *d, c;
 +      char *d;
  
 -      /* check overflow: prefix + name + ".h" + '\0' must fit in buffer. */
 -      if (depfile_prefix_len + strlen(name) + 3 > sizeof(depfile_path))
 +      /* check overflow: prefix + name + '\0' must fit in buffer. */
 +      if (depfile_prefix_len + strlen(name) + 1 > sizeof(depfile_path))
                return -1;
  
        d = depfile_path + depfile_prefix_len;
 -      s = name;
 -
 -      while ((c = *s++))
 -              *d++ = (c == '_') ? '/' : tolower(c);
 -      strcpy(d, ".h");
 +      strcpy(d, name);
  
        /* Assume directory path already exists. */
        fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
@@@ -355,28 -360,46 +355,46 @@@ int conf_read_simple(const char *name, 
        if (name) {
                in = zconf_fopen(name);
        } else {
-               struct property *prop;
+               char *env;
  
                name = conf_get_configname();
                in = zconf_fopen(name);
                if (in)
                        goto load;
-               sym_add_change_count(1);
-               if (!sym_defconfig_list)
+               conf_set_changed(true);
+               env = getenv("KCONFIG_DEFCONFIG_LIST");
+               if (!env)
                        return 1;
  
-               for_all_defaults(sym_defconfig_list, prop) {
-                       if (expr_calc_value(prop->visible.expr) == no ||
-                           prop->expr->type != E_SYMBOL)
-                               continue;
-                       sym_calc_value(prop->expr->left.sym);
-                       name = sym_get_string_value(prop->expr->left.sym);
-                       in = zconf_fopen(name);
+               while (1) {
+                       bool is_last;
+                       while (isspace(*env))
+                               env++;
+                       if (!*env)
+                               break;
+                       p = env;
+                       while (*p && !isspace(*p))
+                               p++;
+                       is_last = (*p == '\0');
+                       *p = '\0';
+                       in = zconf_fopen(env);
                        if (in) {
                                conf_message("using defaults found in %s",
-                                        name);
+                                            env);
                                goto load;
                        }
+                       if (is_last)
+                               break;
+                       env = p + 1;
                }
        }
        if (!in)
@@@ -421,7 -444,7 +439,7 @@@ load
                        if (def == S_DEF_USER) {
                                sym = sym_find(line + 2 + strlen(CONFIG_));
                                if (!sym) {
-                                       sym_add_change_count(1);
+                                       conf_set_changed(true);
                                        continue;
                                }
                        } else {
                                         * Reading from include/config/auto.conf
                                         * If CONFIG_FOO previously existed in
                                         * auto.conf but it is missing now,
 -                                       * include/config/foo.h must be touched.
 +                                       * include/config/FOO must be touched.
                                         */
                                        conf_touch_dep(line + strlen(CONFIG_));
                                else
-                                       sym_add_change_count(1);
+                                       conf_set_changed(true);
                                continue;
                        }
  
@@@ -512,7 -535,7 +530,7 @@@ int conf_read(const char *name
        int conf_unsaved = 0;
        int i;
  
-       sym_set_change_count(0);
+       conf_set_changed(false);
  
        if (conf_read_simple(name, S_DEF_USER)) {
                sym_calc_value(modules_sym);
                }
        }
  
-       sym_add_change_count(conf_warnings || conf_unsaved);
+       if (conf_warnings || conf_unsaved)
+               conf_set_changed(true);
  
        return 0;
  }
@@@ -915,7 -939,7 +934,7 @@@ next
                if (is_same(name, tmpname)) {
                        conf_message("No change to %s", name);
                        unlink(tmpname);
-                       sym_set_change_count(0);
+                       conf_set_changed(false);
                        return 0;
                }
  
  
        conf_message("configuration written to %s", name);
  
-       sym_set_change_count(0);
+       conf_set_changed(false);
  
        return 0;
  }
@@@ -1095,26 -1119,20 +1114,20 @@@ int conf_write_autoconf(int overwrite
        return 0;
  }
  
- static int sym_change_count;
+ static bool conf_changed;
  static void (*conf_changed_callback)(void);
  
- void sym_set_change_count(int count)
+ void conf_set_changed(bool val)
  {
-       int _sym_change_count = sym_change_count;
-       sym_change_count = count;
-       if (conf_changed_callback &&
-           (bool)_sym_change_count != (bool)count)
+       if (conf_changed_callback && conf_changed != val)
                conf_changed_callback();
- }
  
- void sym_add_change_count(int count)
- {
-       sym_set_change_count(count + sym_change_count);
+       conf_changed = val;
  }
  
  bool conf_get_changed(void)
  {
-       return sym_change_count;
+       return conf_changed;
  }
  
  void conf_set_changed_callback(void (*fn)(void))
        conf_changed_callback = fn;
  }
  
- static bool randomize_choice_values(struct symbol *csym)
- {
-       struct property *prop;
-       struct symbol *sym;
-       struct expr *e;
-       int cnt, def;
-       /*
-        * If choice is mod then we may have more items selected
-        * and if no then no-one.
-        * In both cases stop.
-        */
-       if (csym->curr.tri != yes)
-               return false;
-       prop = sym_get_choice_prop(csym);
-       /* count entries in choice block */
-       cnt = 0;
-       expr_list_for_each_sym(prop->expr, e, sym)
-               cnt++;
-       /*
-        * find a random value and set it to yes,
-        * set the rest to no so we have only one set
-        */
-       def = (rand() % cnt);
-       cnt = 0;
-       expr_list_for_each_sym(prop->expr, e, sym) {
-               if (def == cnt++) {
-                       sym->def[S_DEF_USER].tri = yes;
-                       csym->def[S_DEF_USER].val = sym;
-               }
-               else {
-                       sym->def[S_DEF_USER].tri = no;
-               }
-               sym->flags |= SYMBOL_DEF_USER;
-               /* clear VALID to get value calculated */
-               sym->flags &= ~SYMBOL_VALID;
-       }
-       csym->flags |= SYMBOL_DEF_USER;
-       /* clear VALID to get value calculated */
-       csym->flags &= ~(SYMBOL_VALID);
-       return true;
- }
  void set_all_choice_values(struct symbol *csym)
  {
        struct property *prop;
        /* clear VALID to get value calculated */
        csym->flags &= ~(SYMBOL_VALID | SYMBOL_NEED_SET_CHOICE_VALUES);
  }
- bool conf_set_all_new_symbols(enum conf_def_mode mode)
- {
-       struct symbol *sym, *csym;
-       int i, cnt, pby, pty, ptm;      /* pby: probability of bool     = y
-                                        * pty: probability of tristate = y
-                                        * ptm: probability of tristate = m
-                                        */
-       pby = 50; pty = ptm = 33; /* can't go as the default in switch-case
-                                  * below, otherwise gcc whines about
-                                  * -Wmaybe-uninitialized */
-       if (mode == def_random) {
-               int n, p[3];
-               char *env = getenv("KCONFIG_PROBABILITY");
-               n = 0;
-               while( env && *env ) {
-                       char *endp;
-                       int tmp = strtol( env, &endp, 10 );
-                       if( tmp >= 0 && tmp <= 100 ) {
-                               p[n++] = tmp;
-                       } else {
-                               errno = ERANGE;
-                               perror( "KCONFIG_PROBABILITY" );
-                               exit( 1 );
-                       }
-                       env = (*endp == ':') ? endp+1 : endp;
-                       if( n >=3 ) {
-                               break;
-                       }
-               }
-               switch( n ) {
-               case 1:
-                       pby = p[0]; ptm = pby/2; pty = pby-ptm;
-                       break;
-               case 2:
-                       pty = p[0]; ptm = p[1]; pby = pty + ptm;
-                       break;
-               case 3:
-                       pby = p[0]; pty = p[1]; ptm = p[2];
-                       break;
-               }
-               if( pty+ptm > 100 ) {
-                       errno = ERANGE;
-                       perror( "KCONFIG_PROBABILITY" );
-                       exit( 1 );
-               }
-       }
-       bool has_changed = false;
-       for_all_symbols(i, sym) {
-               if (sym_has_value(sym) || (sym->flags & SYMBOL_VALID))
-                       continue;
-               switch (sym_get_type(sym)) {
-               case S_BOOLEAN:
-               case S_TRISTATE:
-                       has_changed = true;
-                       switch (mode) {
-                       case def_yes:
-                               sym->def[S_DEF_USER].tri = yes;
-                               break;
-                       case def_mod:
-                               sym->def[S_DEF_USER].tri = mod;
-                               break;
-                       case def_no:
-                               if (sym->flags & SYMBOL_ALLNOCONFIG_Y)
-                                       sym->def[S_DEF_USER].tri = yes;
-                               else
-                                       sym->def[S_DEF_USER].tri = no;
-                               break;
-                       case def_random:
-                               sym->def[S_DEF_USER].tri = no;
-                               cnt = rand() % 100;
-                               if (sym->type == S_TRISTATE) {
-                                       if (cnt < pty)
-                                               sym->def[S_DEF_USER].tri = yes;
-                                       else if (cnt < (pty+ptm))
-                                               sym->def[S_DEF_USER].tri = mod;
-                               } else if (cnt < pby)
-                                       sym->def[S_DEF_USER].tri = yes;
-                               break;
-                       default:
-                               continue;
-                       }
-                       if (!(sym_is_choice(sym) && mode == def_random))
-                               sym->flags |= SYMBOL_DEF_USER;
-                       break;
-               default:
-                       break;
-               }
-       }
-       sym_clear_all_valid();
-       /*
-        * We have different type of choice blocks.
-        * If curr.tri equals to mod then we can select several
-        * choice symbols in one block.
-        * In this case we do nothing.
-        * If curr.tri equals yes then only one symbol can be
-        * selected in a choice block and we set it to yes,
-        * and the rest to no.
-        */
-       if (mode != def_random) {
-               for_all_symbols(i, csym) {
-                       if ((sym_is_choice(csym) && !sym_has_value(csym)) ||
-                           sym_is_choice_value(csym))
-                               csym->flags |= SYMBOL_NEED_SET_CHOICE_VALUES;
-               }
-       }
-       for_all_symbols(i, csym) {
-               if (sym_has_value(csym) || !sym_is_choice(csym))
-                       continue;
-               sym_calc_value(csym);
-               if (mode == def_random)
-                       has_changed |= randomize_choice_values(csym);
-               else {
-                       set_all_choice_values(csym);
-                       has_changed = true;
-               }
-       }
-       return has_changed;
- }
- void conf_rewrite_mod_or_yes(enum conf_def_mode mode)
- {
-       struct symbol *sym;
-       int i;
-       tristate old_val = (mode == def_y2m) ? yes : mod;
-       tristate new_val = (mode == def_y2m) ? mod : yes;
-       for_all_symbols(i, sym) {
-               if (sym_get_type(sym) == S_TRISTATE &&
-                   sym->def[S_DEF_USER].tri == old_val)
-                       sym->def[S_DEF_USER].tri = new_val;
-       }
-       sym_clear_all_valid();
- }