* Linus Torvalds <[email protected]> wrote:

> On Mon, Mar 21, 2016 at 12:34 AM, Ingo Molnar <[email protected]> wrote:
> >
> > Furthermore, I'd reorganize the 'arch settings' section into 4 groups, the
> > following way:
> >
> > 1) Options that are fundamentally only set on x86-32 kernels:
> >
> > 2) Options that are fundamentally only set on x86-64 kernels:
> >
> > 3) Bi-arch options and options that are not yet implemented for both
> >
> > 4) All other options are moved as selects to their respective config 
> > entries.
> 
> Yes, that sounds much better than what we have now.

... a late update a few months later:

JFYI, I've pushed out a series of changes that implements all this:

 c763ea2650df x86/kconfig: Sort the 'config X86' selects alphabetically
 953fee1d82f3 x86/kconfig: Clean up 32-bit compat options
 39f88911b9dc x86/kconfig: Clean up IA32_EMULATION select
 52c8e6017c76 x86/kconfig, x86/pkeys: Move pkeys selects to 
X86_INTEL_MEMORY_PROTECTION_KEYS
 d94e068573f2 x86/kconfig: Move 64-bit only arch Kconfig selects to 'config 
X86_64'
 341c787e34af x86/kconfig: Move 32-bit only arch Kconfig selects to 'config 
X86_32'

Combo patch is below. Full tree can be found at:

  git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/build

The remaining 'if X86_64' options are all features that are selected for the 
64-bit kernel but could be used on the 32-bit kernel as well (just nobody 
bothered 
porting it yet). I kept those in the generic section for the time being.

Thanks,

        Ingo

---
 arch/x86/Kconfig | 68 ++++++++++++++++++++++++++++++++++----------------------
 1 file changed, 41 insertions(+), 27 deletions(-)

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index bada636d1065..e01f101d4413 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -9,28 +9,50 @@ config 64BIT
 config X86_32
        def_bool y
        depends on !64BIT
+       # Options that are inherently 32-bit kernel only:
+       select ARCH_WANT_IPC_PARSE_VERSION
+       select CLKSRC_I8253
+       select CLONE_BACKWARDS
+       select HAVE_AOUT
+       select HAVE_GENERIC_DMA_COHERENT
+       select MODULES_USE_ELF_REL
+       select OLD_SIGACTION
 
 config X86_64
        def_bool y
        depends on 64BIT
+       # Options that are inherently 64-bit kernel only:
+       select ARCH_HAS_GIGANTIC_PAGE
+       select ARCH_SUPPORTS_INT128
+       select ARCH_USE_CMPXCHG_LOCKREF
+       select HAVE_ARCH_SOFT_DIRTY
+       select MODULES_USE_ELF_RELA
+       select X86_DEV_DMA_OPS
 
-### Arch settings
+#
+# Arch settings
+#
+# ( Note that options that are marked 'if X86_64' could in principle be
+#   ported to 32-bit as well. )
+#
 config X86
        def_bool y
+       #
+       # Note: keep this list sorted alphabetically
+       #
        select ACPI_LEGACY_TABLES_LOOKUP        if ACPI
        select ACPI_SYSTEM_POWER_STATES_SUPPORT if ACPI
        select ANON_INODES
        select ARCH_CLOCKSOURCE_DATA
        select ARCH_DISCARD_MEMBLOCK
-       select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI
+       select ARCH_HAS_ACPI_TABLE_UPGRADE      if ACPI
        select ARCH_HAS_DEVMEM_IS_ALLOWED
        select ARCH_HAS_ELF_RANDOMIZE
        select ARCH_HAS_FAST_MULTIPLIER
        select ARCH_HAS_GCOV_PROFILE_ALL
-       select ARCH_HAS_GIGANTIC_PAGE           if X86_64
        select ARCH_HAS_KCOV                    if X86_64
-       select ARCH_HAS_PMEM_API                if X86_64
        select ARCH_HAS_MMIO_FLUSH
+       select ARCH_HAS_PMEM_API                if X86_64
        select ARCH_HAS_SG_CHAIN
        select ARCH_HAS_UBSAN_SANITIZE_ALL
        select ARCH_HAVE_NMI_SAFE_CMPXCHG
@@ -39,23 +61,17 @@ config X86
        select ARCH_MIGHT_HAVE_PC_SERIO
        select ARCH_SUPPORTS_ATOMIC_RMW
        select ARCH_SUPPORTS_DEFERRED_STRUCT_PAGE_INIT
-       select ARCH_SUPPORTS_INT128             if X86_64
        select ARCH_SUPPORTS_NUMA_BALANCING     if X86_64
        select ARCH_USE_BUILTIN_BSWAP
-       select ARCH_USE_CMPXCHG_LOCKREF         if X86_64
        select ARCH_USE_QUEUED_RWLOCKS
        select ARCH_USE_QUEUED_SPINLOCKS
        select ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH if SMP
-       select ARCH_WANTS_DYNAMIC_TASK_STRUCT
        select ARCH_WANT_FRAME_POINTERS
-       select ARCH_WANT_IPC_PARSE_VERSION      if X86_32
+       select ARCH_WANTS_DYNAMIC_TASK_STRUCT
        select BUILDTIME_EXTABLE_SORT
        select CLKEVT_I8253
-       select CLKSRC_I8253                     if X86_32
        select CLOCKSOURCE_VALIDATE_LAST_CYCLE
        select CLOCKSOURCE_WATCHDOG
-       select CLONE_BACKWARDS                  if X86_32
-       select COMPAT_OLD_SIGACTION             if IA32_EMULATION
        select DCACHE_WORD_ACCESS
        select EDAC_ATOMIC_SCRUB
        select EDAC_SUPPORT
@@ -77,7 +93,6 @@ config X86
        select HAVE_ACPI_APEI                   if ACPI
        select HAVE_ACPI_APEI_NMI               if ACPI
        select HAVE_ALIGNED_STRUCT_PAGE         if SLUB
-       select HAVE_AOUT                        if X86_32
        select HAVE_ARCH_AUDITSYSCALL
        select HAVE_ARCH_HARDENED_USERCOPY
        select HAVE_ARCH_HUGE_VMAP              if X86_64 || X86_PAE
@@ -88,12 +103,10 @@ config X86
        select HAVE_ARCH_MMAP_RND_BITS          if MMU
        select HAVE_ARCH_MMAP_RND_COMPAT_BITS   if MMU && COMPAT
        select HAVE_ARCH_SECCOMP_FILTER
-       select HAVE_ARCH_SOFT_DIRTY             if X86_64
        select HAVE_ARCH_TRACEHOOK
        select HAVE_ARCH_TRANSPARENT_HUGEPAGE
-       select HAVE_ARCH_WITHIN_STACK_FRAMES
-       select HAVE_EBPF_JIT                    if X86_64
        select HAVE_ARCH_VMAP_STACK             if X86_64
+       select HAVE_ARCH_WITHIN_STACK_FRAMES
        select HAVE_CC_STACKPROTECTOR
        select HAVE_CMPXCHG_DOUBLE
        select HAVE_CMPXCHG_LOCAL
@@ -106,6 +119,7 @@ config X86
        select HAVE_DMA_CONTIGUOUS
        select HAVE_DYNAMIC_FTRACE
        select HAVE_DYNAMIC_FTRACE_WITH_REGS
+       select HAVE_EBPF_JIT                    if X86_64
        select HAVE_EFFICIENT_UNALIGNED_ACCESS
        select HAVE_EXIT_THREAD
        select HAVE_FENTRY                      if X86_64
@@ -113,7 +127,6 @@ config X86
        select HAVE_FUNCTION_GRAPH_TRACER
        select HAVE_FUNCTION_TRACER
        select HAVE_GCC_PLUGINS
-       select HAVE_GENERIC_DMA_COHERENT        if X86_32
        select HAVE_HW_BREAKPOINT
        select HAVE_IDE
        select HAVE_IOREMAP_PROT
@@ -142,15 +155,11 @@ config X86
        select HAVE_PERF_REGS
        select HAVE_PERF_USER_STACK_DUMP
        select HAVE_REGS_AND_STACK_ACCESS_API
+       select HAVE_STACK_VALIDATION            if X86_64
        select HAVE_SYSCALL_TRACEPOINTS
-       select HAVE_UID16                       if X86_32 || IA32_EMULATION
        select HAVE_UNSTABLE_SCHED_CLOCK
        select HAVE_USER_RETURN_NOTIFIER
        select IRQ_FORCED_THREADING
-       select MODULES_USE_ELF_RELA             if X86_64
-       select MODULES_USE_ELF_REL              if X86_32
-       select OLD_SIGACTION                    if X86_32
-       select OLD_SIGSUSPEND3                  if X86_32 || IA32_EMULATION
        select PERF_EVENTS
        select RTC_LIB
        select RTC_MC146818_LIB
@@ -160,11 +169,7 @@ config X86
        select THREAD_INFO_IN_TASK
        select USER_STACKTRACE_SUPPORT
        select VIRT_TO_BUS
-       select X86_DEV_DMA_OPS                  if X86_64
        select X86_FEATURE_NAMES                if PROC_FS
-       select HAVE_STACK_VALIDATION            if X86_64
-       select ARCH_USES_HIGH_VMA_FLAGS         if 
X86_INTEL_MEMORY_PROTECTION_KEYS
-       select ARCH_HAS_PKEYS                   if 
X86_INTEL_MEMORY_PROTECTION_KEYS
 
 config INSTRUCTION_DECODER
        def_bool y
@@ -1737,6 +1742,8 @@ config X86_INTEL_MEMORY_PROTECTION_KEYS
        def_bool y
        # Note: only available in 64-bit mode
        depends on CPU_SUP_INTEL && X86_64
+       select ARCH_USES_HIGH_VMA_FLAGS
+       select ARCH_HAS_PKEYS
        ---help---
          Memory Protection Keys provides a mechanism for enforcing
          page-based protections, but without requiring modification of the
@@ -2092,7 +2099,7 @@ config DEBUG_HOTPLUG_CPU0
 config COMPAT_VDSO
        def_bool n
        prompt "Disable the 32-bit vDSO (needed for glibc 2.3.3)"
-       depends on X86_32 || IA32_EMULATION
+       depends on COMPAT_32
        ---help---
          Certain buggy versions of glibc will crash if they are
          presented with a 32-bit vDSO that is not mapped at the address
@@ -2694,9 +2701,10 @@ source "fs/Kconfig.binfmt"
 config IA32_EMULATION
        bool "IA32 Emulation"
        depends on X86_64
+       select ARCH_WANT_OLD_COMPAT_IPC
        select BINFMT_ELF
        select COMPAT_BINFMT_ELF
-       select ARCH_WANT_OLD_COMPAT_IPC
+       select COMPAT_OLD_SIGACTION
        ---help---
          Include code to run legacy 32-bit programs under a
          64-bit kernel. You should likely turn this on, unless you're
@@ -2721,6 +2729,12 @@ config X86_X32
          elf32_x86_64 support enabled to compile a kernel with this
          option set.
 
+config COMPAT_32
+       def_bool y
+       depends on IA32_EMULATION || X86_32
+       select HAVE_UID16
+       select OLD_SIGSUSPEND3
+
 config COMPAT
        def_bool y
        depends on IA32_EMULATION || X86_X32

Reply via email to