linux/arch/x86/Kconfig
<<
>>
Prefs
   1# SPDX-License-Identifier: GPL-2.0
   2# Select 32 or 64 bit
   3config 64BIT
   4        bool "64-bit kernel" if "$(ARCH)" = "x86"
   5        default "$(ARCH)" != "i386"
   6        help
   7          Say yes to build a 64-bit kernel - formerly known as x86_64
   8          Say no to build a 32-bit kernel - formerly known as i386
   9
  10config X86_32
  11        def_bool y
  12        depends on !64BIT
  13        # Options that are inherently 32-bit kernel only:
  14        select ARCH_WANT_IPC_PARSE_VERSION
  15        select CLKSRC_I8253
  16        select CLONE_BACKWARDS
  17        select GENERIC_VDSO_32
  18        select HAVE_DEBUG_STACKOVERFLOW
  19        select KMAP_LOCAL
  20        select MODULES_USE_ELF_REL
  21        select OLD_SIGACTION
  22        select ARCH_SPLIT_ARG64
  23
  24config X86_64
  25        def_bool y
  26        depends on 64BIT
  27        # Options that are inherently 64-bit kernel only:
  28        select ARCH_HAS_GIGANTIC_PAGE
  29        select ARCH_SUPPORTS_INT128 if CC_HAS_INT128
  30        select ARCH_USE_CMPXCHG_LOCKREF
  31        select HAVE_ARCH_SOFT_DIRTY
  32        select MODULES_USE_ELF_RELA
  33        select NEED_DMA_MAP_STATE
  34        select SWIOTLB
  35        select ARCH_HAS_ELFCORE_COMPAT
  36        select ZONE_DMA32
  37
  38config FORCE_DYNAMIC_FTRACE
  39        def_bool y
  40        depends on X86_32
  41        depends on FUNCTION_TRACER
  42        select DYNAMIC_FTRACE
  43        help
  44          We keep the static function tracing (!DYNAMIC_FTRACE) around
  45          in order to test the non static function tracing in the
  46          generic code, as other architectures still use it. But we
  47          only need to keep it around for x86_64. No need to keep it
  48          for x86_32. For x86_32, force DYNAMIC_FTRACE.
  49#
  50# Arch settings
  51#
  52# ( Note that options that are marked 'if X86_64' could in principle be
  53#   ported to 32-bit as well. )
  54#
  55config X86
  56        def_bool y
  57        #
  58        # Note: keep this list sorted alphabetically
  59        #
  60        select ACPI_LEGACY_TABLES_LOOKUP        if ACPI
  61        select ACPI_SYSTEM_POWER_STATES_SUPPORT if ACPI
  62        select ARCH_32BIT_OFF_T                 if X86_32
  63        select ARCH_CLOCKSOURCE_INIT
  64        select ARCH_CORRECT_STACKTRACE_ON_KRETPROBE
  65        select ARCH_ENABLE_HUGEPAGE_MIGRATION if X86_64 && HUGETLB_PAGE && MIGRATION
  66        select ARCH_ENABLE_MEMORY_HOTPLUG if X86_64
  67        select ARCH_ENABLE_MEMORY_HOTREMOVE if MEMORY_HOTPLUG
  68        select ARCH_ENABLE_SPLIT_PMD_PTLOCK if (PGTABLE_LEVELS > 2) && (X86_64 || X86_PAE)
  69        select ARCH_ENABLE_THP_MIGRATION if X86_64 && TRANSPARENT_HUGEPAGE
  70        select ARCH_HAS_ACPI_TABLE_UPGRADE      if ACPI
  71        select ARCH_HAS_CACHE_LINE_SIZE
  72        select ARCH_HAS_CURRENT_STACK_POINTER
  73        select ARCH_HAS_DEBUG_VIRTUAL
  74        select ARCH_HAS_DEBUG_VM_PGTABLE        if !X86_PAE
  75        select ARCH_HAS_DEVMEM_IS_ALLOWED
  76        select ARCH_HAS_EARLY_DEBUG             if KGDB
  77        select ARCH_HAS_ELF_RANDOMIZE
  78        select ARCH_HAS_FAST_MULTIPLIER
  79        select ARCH_HAS_FORTIFY_SOURCE
  80        select ARCH_HAS_GCOV_PROFILE_ALL
  81        select ARCH_HAS_KCOV                    if X86_64
  82        select ARCH_HAS_MEM_ENCRYPT
  83        select ARCH_HAS_MEMBARRIER_SYNC_CORE
  84        select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
  85        select ARCH_HAS_PMEM_API                if X86_64
  86        select ARCH_HAS_PTE_DEVMAP              if X86_64
  87        select ARCH_HAS_PTE_SPECIAL
  88        select ARCH_HAS_UACCESS_FLUSHCACHE      if X86_64
  89        select ARCH_HAS_COPY_MC                 if X86_64
  90        select ARCH_HAS_SET_MEMORY
  91        select ARCH_HAS_SET_DIRECT_MAP
  92        select ARCH_HAS_STRICT_KERNEL_RWX
  93        select ARCH_HAS_STRICT_MODULE_RWX
  94        select ARCH_HAS_SYNC_CORE_BEFORE_USERMODE
  95        select ARCH_HAS_SYSCALL_WRAPPER
  96        select ARCH_HAS_UBSAN_SANITIZE_ALL
  97        select ARCH_HAS_VM_GET_PAGE_PROT
  98        select ARCH_HAS_DEBUG_WX
  99        select ARCH_HAS_ZONE_DMA_SET if EXPERT
 100        select ARCH_HAVE_NMI_SAFE_CMPXCHG
 101        select ARCH_MIGHT_HAVE_ACPI_PDC         if ACPI
 102        select ARCH_MIGHT_HAVE_PC_PARPORT
 103        select ARCH_MIGHT_HAVE_PC_SERIO
 104        select ARCH_STACKWALK
 105        select ARCH_SUPPORTS_ACPI
 106        select ARCH_SUPPORTS_ATOMIC_RMW
 107        select ARCH_SUPPORTS_DEBUG_PAGEALLOC
 108        select ARCH_SUPPORTS_PAGE_TABLE_CHECK   if X86_64
 109        select ARCH_SUPPORTS_NUMA_BALANCING     if X86_64
 110        select ARCH_SUPPORTS_KMAP_LOCAL_FORCE_MAP       if NR_CPUS <= 4096
 111        select ARCH_SUPPORTS_LTO_CLANG
 112        select ARCH_SUPPORTS_LTO_CLANG_THIN
 113        select ARCH_USE_BUILTIN_BSWAP
 114        select ARCH_USE_MEMTEST
 115        select ARCH_USE_QUEUED_RWLOCKS
 116        select ARCH_USE_QUEUED_SPINLOCKS
 117        select ARCH_USE_SYM_ANNOTATIONS
 118        select ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH
 119        select ARCH_WANT_DEFAULT_BPF_JIT        if X86_64
 120        select ARCH_WANTS_DYNAMIC_TASK_STRUCT
 121        select ARCH_WANTS_NO_INSTR
 122        select ARCH_WANT_GENERAL_HUGETLB
 123        select ARCH_WANT_HUGE_PMD_SHARE
 124        select ARCH_WANT_HUGETLB_PAGE_OPTIMIZE_VMEMMAP  if X86_64
 125        select ARCH_WANT_LD_ORPHAN_WARN
 126        select ARCH_WANTS_THP_SWAP              if X86_64
 127        select ARCH_HAS_PARANOID_L1D_FLUSH
 128        select BUILDTIME_TABLE_SORT
 129        select CLKEVT_I8253
 130        select CLOCKSOURCE_VALIDATE_LAST_CYCLE
 131        select CLOCKSOURCE_WATCHDOG
 132        select DCACHE_WORD_ACCESS
 133        select DYNAMIC_SIGFRAME
 134        select EDAC_ATOMIC_SCRUB
 135        select EDAC_SUPPORT
 136        select GENERIC_CLOCKEVENTS_BROADCAST    if X86_64 || (X86_32 && X86_LOCAL_APIC)
 137        select GENERIC_CLOCKEVENTS_MIN_ADJUST
 138        select GENERIC_CMOS_UPDATE
 139        select GENERIC_CPU_AUTOPROBE
 140        select GENERIC_CPU_VULNERABILITIES
 141        select GENERIC_EARLY_IOREMAP
 142        select GENERIC_ENTRY
 143        select GENERIC_IOMAP
 144        select GENERIC_IRQ_EFFECTIVE_AFF_MASK   if SMP
 145        select GENERIC_IRQ_MATRIX_ALLOCATOR     if X86_LOCAL_APIC
 146        select GENERIC_IRQ_MIGRATION            if SMP
 147        select GENERIC_IRQ_PROBE
 148        select GENERIC_IRQ_RESERVATION_MODE
 149        select GENERIC_IRQ_SHOW
 150        select GENERIC_PENDING_IRQ              if SMP
 151        select GENERIC_PTDUMP
 152        select GENERIC_SMP_IDLE_THREAD
 153        select GENERIC_TIME_VSYSCALL
 154        select GENERIC_GETTIMEOFDAY
 155        select GENERIC_VDSO_TIME_NS
 156        select GUP_GET_PTE_LOW_HIGH             if X86_PAE
 157        select HARDIRQS_SW_RESEND
 158        select HARDLOCKUP_CHECK_TIMESTAMP       if X86_64
 159        select HAVE_ACPI_APEI                   if ACPI
 160        select HAVE_ACPI_APEI_NMI               if ACPI
 161        select HAVE_ALIGNED_STRUCT_PAGE         if SLUB
 162        select HAVE_ARCH_AUDITSYSCALL
 163        select HAVE_ARCH_HUGE_VMAP              if X86_64 || X86_PAE
 164        select HAVE_ARCH_HUGE_VMALLOC           if X86_64
 165        select HAVE_ARCH_JUMP_LABEL
 166        select HAVE_ARCH_JUMP_LABEL_RELATIVE
 167        select HAVE_ARCH_KASAN                  if X86_64
 168        select HAVE_ARCH_KASAN_VMALLOC          if X86_64
 169        select HAVE_ARCH_KFENCE
 170        select HAVE_ARCH_KGDB
 171        select HAVE_ARCH_MMAP_RND_BITS          if MMU
 172        select HAVE_ARCH_MMAP_RND_COMPAT_BITS   if MMU && COMPAT
 173        select HAVE_ARCH_COMPAT_MMAP_BASES      if MMU && COMPAT
 174        select HAVE_ARCH_PREL32_RELOCATIONS
 175        select HAVE_ARCH_SECCOMP_FILTER
 176        select HAVE_ARCH_THREAD_STRUCT_WHITELIST
 177        select HAVE_ARCH_STACKLEAK
 178        select HAVE_ARCH_TRACEHOOK
 179        select HAVE_ARCH_TRANSPARENT_HUGEPAGE
 180        select HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD if X86_64
 181        select HAVE_ARCH_USERFAULTFD_WP         if X86_64 && USERFAULTFD
 182        select HAVE_ARCH_USERFAULTFD_MINOR      if X86_64 && USERFAULTFD
 183        select HAVE_ARCH_VMAP_STACK             if X86_64
 184        select HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET
 185        select HAVE_ARCH_WITHIN_STACK_FRAMES
 186        select HAVE_ASM_MODVERSIONS
 187        select HAVE_CMPXCHG_DOUBLE
 188        select HAVE_CMPXCHG_LOCAL
 189        select HAVE_CONTEXT_TRACKING            if X86_64
 190        select HAVE_CONTEXT_TRACKING_OFFSTACK   if HAVE_CONTEXT_TRACKING
 191        select HAVE_C_RECORDMCOUNT
 192        select HAVE_OBJTOOL_MCOUNT              if HAVE_OBJTOOL
 193        select HAVE_BUILDTIME_MCOUNT_SORT
 194        select HAVE_DEBUG_KMEMLEAK
 195        select HAVE_DMA_CONTIGUOUS
 196        select HAVE_DYNAMIC_FTRACE
 197        select HAVE_DYNAMIC_FTRACE_WITH_REGS
 198        select HAVE_DYNAMIC_FTRACE_WITH_ARGS    if X86_64
 199        select HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
 200        select HAVE_SAMPLE_FTRACE_DIRECT        if X86_64
 201        select HAVE_SAMPLE_FTRACE_DIRECT_MULTI  if X86_64
 202        select HAVE_EBPF_JIT
 203        select HAVE_EFFICIENT_UNALIGNED_ACCESS
 204        select HAVE_EISA
 205        select HAVE_EXIT_THREAD
 206        select HAVE_FAST_GUP
 207        select HAVE_FENTRY                      if X86_64 || DYNAMIC_FTRACE
 208        select HAVE_FTRACE_MCOUNT_RECORD
 209        select HAVE_FUNCTION_GRAPH_TRACER       if X86_32 || (X86_64 && DYNAMIC_FTRACE)
 210        select HAVE_FUNCTION_TRACER
 211        select HAVE_GCC_PLUGINS
 212        select HAVE_HW_BREAKPOINT
 213        select HAVE_IOREMAP_PROT
 214        select HAVE_IRQ_EXIT_ON_IRQ_STACK       if X86_64
 215        select HAVE_IRQ_TIME_ACCOUNTING
 216        select HAVE_JUMP_LABEL_HACK             if HAVE_OBJTOOL
 217        select HAVE_KERNEL_BZIP2
 218        select HAVE_KERNEL_GZIP
 219        select HAVE_KERNEL_LZ4
 220        select HAVE_KERNEL_LZMA
 221        select HAVE_KERNEL_LZO
 222        select HAVE_KERNEL_XZ
 223        select HAVE_KERNEL_ZSTD
 224        select HAVE_KPROBES
 225        select HAVE_KPROBES_ON_FTRACE
 226        select HAVE_FUNCTION_ERROR_INJECTION
 227        select HAVE_KRETPROBES
 228        select HAVE_RETHOOK
 229        select HAVE_KVM
 230        select HAVE_LIVEPATCH                   if X86_64
 231        select HAVE_MIXED_BREAKPOINTS_REGS
 232        select HAVE_MOD_ARCH_SPECIFIC
 233        select HAVE_MOVE_PMD
 234        select HAVE_MOVE_PUD
 235        select HAVE_NOINSTR_HACK                if HAVE_OBJTOOL
 236        select HAVE_NMI
 237        select HAVE_NOINSTR_VALIDATION          if HAVE_OBJTOOL
 238        select HAVE_OBJTOOL                     if X86_64
 239        select HAVE_OPTPROBES
 240        select HAVE_PCSPKR_PLATFORM
 241        select HAVE_PERF_EVENTS
 242        select HAVE_PERF_EVENTS_NMI
 243        select HAVE_HARDLOCKUP_DETECTOR_PERF    if PERF_EVENTS && HAVE_PERF_EVENTS_NMI
 244        select HAVE_PCI
 245        select HAVE_PERF_REGS
 246        select HAVE_PERF_USER_STACK_DUMP
 247        select MMU_GATHER_RCU_TABLE_FREE        if PARAVIRT
 248        select MMU_GATHER_MERGE_VMAS
 249        select HAVE_POSIX_CPU_TIMERS_TASK_WORK
 250        select HAVE_REGS_AND_STACK_ACCESS_API
 251        select HAVE_RELIABLE_STACKTRACE         if UNWINDER_ORC || STACK_VALIDATION
 252        select HAVE_FUNCTION_ARG_ACCESS_API
 253        select HAVE_SETUP_PER_CPU_AREA
 254        select HAVE_SOFTIRQ_ON_OWN_STACK
 255        select HAVE_STACKPROTECTOR              if CC_HAS_SANE_STACKPROTECTOR
 256        select HAVE_STACK_VALIDATION            if HAVE_OBJTOOL
 257        select HAVE_STATIC_CALL
 258        select HAVE_STATIC_CALL_INLINE          if HAVE_OBJTOOL
 259        select HAVE_PREEMPT_DYNAMIC_CALL
 260        select HAVE_RSEQ
 261        select HAVE_SYSCALL_TRACEPOINTS
 262        select HAVE_UACCESS_VALIDATION          if HAVE_OBJTOOL
 263        select HAVE_UNSTABLE_SCHED_CLOCK
 264        select HAVE_USER_RETURN_NOTIFIER
 265        select HAVE_GENERIC_VDSO
 266        select HOTPLUG_SMT                      if SMP
 267        select IRQ_FORCED_THREADING
 268        select NEED_PER_CPU_EMBED_FIRST_CHUNK
 269        select NEED_PER_CPU_PAGE_FIRST_CHUNK
 270        select NEED_SG_DMA_LENGTH
 271        select PCI_DOMAINS                      if PCI
 272        select PCI_LOCKLESS_CONFIG              if PCI
 273        select PERF_EVENTS
 274        select RTC_LIB
 275        select RTC_MC146818_LIB
 276        select SPARSE_IRQ
 277        select SRCU
 278        select SYSCTL_EXCEPTION_TRACE
 279        select THREAD_INFO_IN_TASK
 280        select TRACE_IRQFLAGS_SUPPORT
 281        select USER_STACKTRACE_SUPPORT
 282        select VIRT_TO_BUS
 283        select HAVE_ARCH_KCSAN                  if X86_64
 284        select X86_FEATURE_NAMES                if PROC_FS
 285        select PROC_PID_ARCH_STATUS             if PROC_FS
 286        select HAVE_ARCH_NODE_DEV_GROUP         if X86_SGX
 287        imply IMA_SECURE_AND_OR_TRUSTED_BOOT    if EFI
 288
 289config INSTRUCTION_DECODER
 290        def_bool y
 291        depends on KPROBES || PERF_EVENTS || UPROBES
 292
 293config OUTPUT_FORMAT
 294        string
 295        default "elf32-i386" if X86_32
 296        default "elf64-x86-64" if X86_64
 297
 298config LOCKDEP_SUPPORT
 299        def_bool y
 300
 301config STACKTRACE_SUPPORT
 302        def_bool y
 303
 304config MMU
 305        def_bool y
 306
 307config ARCH_MMAP_RND_BITS_MIN
 308        default 28 if 64BIT
 309        default 8
 310
 311config ARCH_MMAP_RND_BITS_MAX
 312        default 32 if 64BIT
 313        default 16
 314
 315config ARCH_MMAP_RND_COMPAT_BITS_MIN
 316        default 8
 317
 318config ARCH_MMAP_RND_COMPAT_BITS_MAX
 319        default 16
 320
 321config SBUS
 322        bool
 323
 324config GENERIC_ISA_DMA
 325        def_bool y
 326        depends on ISA_DMA_API
 327
 328config GENERIC_BUG
 329        def_bool y
 330        depends on BUG
 331        select GENERIC_BUG_RELATIVE_POINTERS if X86_64
 332
 333config GENERIC_BUG_RELATIVE_POINTERS
 334        bool
 335
 336config ARCH_MAY_HAVE_PC_FDC
 337        def_bool y
 338        depends on ISA_DMA_API
 339
 340config GENERIC_CALIBRATE_DELAY
 341        def_bool y
 342
 343config ARCH_HAS_CPU_RELAX
 344        def_bool y
 345
 346config ARCH_HIBERNATION_POSSIBLE
 347        def_bool y
 348
 349config ARCH_NR_GPIO
 350        int
 351        default 1024 if X86_64
 352        default 512
 353
 354config ARCH_SUSPEND_POSSIBLE
 355        def_bool y
 356
 357config AUDIT_ARCH
 358        def_bool y if X86_64
 359
 360config KASAN_SHADOW_OFFSET
 361        hex
 362        depends on KASAN
 363        default 0xdffffc0000000000
 364
 365config HAVE_INTEL_TXT
 366        def_bool y
 367        depends on INTEL_IOMMU && ACPI
 368
 369config X86_32_SMP
 370        def_bool y
 371        depends on X86_32 && SMP
 372
 373config X86_64_SMP
 374        def_bool y
 375        depends on X86_64 && SMP
 376
 377config ARCH_SUPPORTS_UPROBES
 378        def_bool y
 379
 380config FIX_EARLYCON_MEM
 381        def_bool y
 382
 383config DYNAMIC_PHYSICAL_MASK
 384        bool
 385
 386config PGTABLE_LEVELS
 387        int
 388        default 5 if X86_5LEVEL
 389        default 4 if X86_64
 390        default 3 if X86_PAE
 391        default 2
 392
 393config CC_HAS_SANE_STACKPROTECTOR
 394        bool
 395        default $(success,$(srctree)/scripts/gcc-x86_64-has-stack-protector.sh $(CC)) if 64BIT
 396        default $(success,$(srctree)/scripts/gcc-x86_32-has-stack-protector.sh $(CC))
 397        help
 398          We have to make sure stack protector is unconditionally disabled if
 399          the compiler produces broken code or if it does not let us control
 400          the segment on 32-bit kernels.
 401
 402menu "Processor type and features"
 403
 404config SMP
 405        bool "Symmetric multi-processing support"
 406        help
 407          This enables support for systems with more than one CPU. If you have
 408          a system with only one CPU, say N. If you have a system with more
 409          than one CPU, say Y.
 410
 411          If you say N here, the kernel will run on uni- and multiprocessor
 412          machines, but will use only one CPU of a multiprocessor machine. If
 413          you say Y here, the kernel will run on many, but not all,
 414          uniprocessor machines. On a uniprocessor machine, the kernel
 415          will run faster if you say N here.
 416
 417          Note that if you say Y here and choose architecture "586" or
 418          "Pentium" under "Processor family", the kernel will not work on 486
 419          architectures. Similarly, multiprocessor kernels for the "PPro"
 420          architecture may not work on all Pentium based boards.
 421
 422          People using multiprocessor machines who say Y here should also say
 423          Y to "Enhanced Real Time Clock Support", below. The "Advanced Power
 424          Management" code will be disabled if you say Y here.
 425
 426          See also <file:Documentation/x86/i386/IO-APIC.rst>,
 427          <file:Documentation/admin-guide/lockup-watchdogs.rst> and the SMP-HOWTO available at
 428          <http://www.tldp.org/docs.html#howto>.
 429
 430          If you don't know what to do here, say N.
 431
 432config X86_FEATURE_NAMES
 433        bool "Processor feature human-readable names" if EMBEDDED
 434        default y
 435        help
 436          This option compiles in a table of x86 feature bits and corresponding
 437          names.  This is required to support /proc/cpuinfo and a few kernel
 438          messages.  You can disable this to save space, at the expense of
 439          making those few kernel messages show numeric feature bits instead.
 440
 441          If in doubt, say Y.
 442
 443config X86_X2APIC
 444        bool "Support x2apic"
 445        depends on X86_LOCAL_APIC && X86_64 && (IRQ_REMAP || HYPERVISOR_GUEST)
 446        help
 447          This enables x2apic support on CPUs that have this feature.
 448
 449          This allows 32-bit apic IDs (so it can support very large systems),
 450          and accesses the local apic via MSRs not via mmio.
 451
 452          If you don't know what to do here, say N.
 453
 454config X86_MPPARSE
 455        bool "Enable MPS table" if ACPI
 456        default y
 457        depends on X86_LOCAL_APIC
 458        help
 459          For old smp systems that do not have proper acpi support. Newer systems
 460          (esp with 64bit cpus) with acpi support, MADT and DSDT will override it
 461
 462config GOLDFISH
 463        def_bool y
 464        depends on X86_GOLDFISH
 465
 466config X86_CPU_RESCTRL
 467        bool "x86 CPU resource control support"
 468        depends on X86 && (CPU_SUP_INTEL || CPU_SUP_AMD)
 469        select KERNFS
 470        select PROC_CPU_RESCTRL         if PROC_FS
 471        help
 472          Enable x86 CPU resource control support.
 473
 474          Provide support for the allocation and monitoring of system resources
 475          usage by the CPU.
 476
 477          Intel calls this Intel Resource Director Technology
 478          (Intel(R) RDT). More information about RDT can be found in the
 479          Intel x86 Architecture Software Developer Manual.
 480
 481          AMD calls this AMD Platform Quality of Service (AMD QoS).
 482          More information about AMD QoS can be found in the AMD64 Technology
 483          Platform Quality of Service Extensions manual.
 484
 485          Say N if unsure.
 486
 487if X86_32
 488config X86_BIGSMP
 489        bool "Support for big SMP systems with more than 8 CPUs"
 490        depends on SMP
 491        help
 492          This option is needed for the systems that have more than 8 CPUs.
 493
 494config X86_EXTENDED_PLATFORM
 495        bool "Support for extended (non-PC) x86 platforms"
 496        default y
 497        help
 498          If you disable this option then the kernel will only support
 499          standard PC platforms. (which covers the vast majority of
 500          systems out there.)
 501
 502          If you enable this option then you'll be able to select support
 503          for the following (non-PC) 32 bit x86 platforms:
 504                Goldfish (Android emulator)
 505                AMD Elan
 506                RDC R-321x SoC
 507                SGI 320/540 (Visual Workstation)
 508                STA2X11-based (e.g. Northville)
 509                Moorestown MID devices
 510
 511          If you have one of these systems, or if you want to build a
 512          generic distribution kernel, say Y here - otherwise say N.
 513endif # X86_32
 514
 515if X86_64
 516config X86_EXTENDED_PLATFORM
 517        bool "Support for extended (non-PC) x86 platforms"
 518        default y
 519        help
 520          If you disable this option then the kernel will only support
 521          standard PC platforms. (which covers the vast majority of
 522          systems out there.)
 523
 524          If you enable this option then you'll be able to select support
 525          for the following (non-PC) 64 bit x86 platforms:
 526                Numascale NumaChip
 527                ScaleMP vSMP
 528                SGI Ultraviolet
 529
 530          If you have one of these systems, or if you want to build a
 531          generic distribution kernel, say Y here - otherwise say N.
 532endif # X86_64
 533# This is an alphabetically sorted list of 64 bit extended platforms
 534# Please maintain the alphabetic order if and when there are additions
 535config X86_NUMACHIP
 536        bool "Numascale NumaChip"
 537        depends on X86_64
 538        depends on X86_EXTENDED_PLATFORM
 539        depends on NUMA
 540        depends on SMP
 541        depends on X86_X2APIC
 542        depends on PCI_MMCONFIG
 543        help
 544          Adds support for Numascale NumaChip large-SMP systems. Needed to
 545          enable more than ~168 cores.
 546          If you don't have one of these, you should say N here.
 547
 548config X86_VSMP
 549        bool "ScaleMP vSMP"
 550        select HYPERVISOR_GUEST
 551        select PARAVIRT
 552        depends on X86_64 && PCI
 553        depends on X86_EXTENDED_PLATFORM
 554        depends on SMP
 555        help
 556          Support for ScaleMP vSMP systems.  Say 'Y' here if this kernel is
 557          supposed to run on these EM64T-based machines.  Only choose this option
 558          if you have one of these machines.
 559
 560config X86_UV
 561        bool "SGI Ultraviolet"
 562        depends on X86_64
 563        depends on X86_EXTENDED_PLATFORM
 564        depends on NUMA
 565        depends on EFI
 566        depends on KEXEC_CORE
 567        depends on X86_X2APIC
 568        depends on PCI
 569        help
 570          This option is needed in order to support SGI Ultraviolet systems.
 571          If you don't have one of these, you should say N here.
 572
 573# Following is an alphabetically sorted list of 32 bit extended platforms
 574# Please maintain the alphabetic order if and when there are additions
 575
 576config X86_GOLDFISH
 577        bool "Goldfish (Virtual Platform)"
 578        depends on X86_EXTENDED_PLATFORM
 579        help
 580          Enable support for the Goldfish virtual platform used primarily
 581          for Android development. Unless you are building for the Android
 582          Goldfish emulator say N here.
 583
 584config X86_INTEL_CE
 585        bool "CE4100 TV platform"
 586        depends on PCI
 587        depends on PCI_GODIRECT
 588        depends on X86_IO_APIC
 589        depends on X86_32
 590        depends on X86_EXTENDED_PLATFORM
 591        select X86_REBOOTFIXUPS
 592        select OF
 593        select OF_EARLY_FLATTREE
 594        help
 595          Select for the Intel CE media processor (CE4100) SOC.
 596          This option compiles in support for the CE4100 SOC for settop
 597          boxes and media devices.
 598
 599config X86_INTEL_MID
 600        bool "Intel MID platform support"
 601        depends on X86_EXTENDED_PLATFORM
 602        depends on X86_PLATFORM_DEVICES
 603        depends on PCI
 604        depends on X86_64 || (PCI_GOANY && X86_32)
 605        depends on X86_IO_APIC
 606        select I2C
 607        select DW_APB_TIMER
 608        select INTEL_SCU_PCI
 609        help
 610          Select to build a kernel capable of supporting Intel MID (Mobile
 611          Internet Device) platform systems which do not have the PCI legacy
 612          interfaces. If you are building for a PC class system say N here.
 613
 614          Intel MID platforms are based on an Intel processor and chipset which
 615          consume less power than most of the x86 derivatives.
 616
 617config X86_INTEL_QUARK
 618        bool "Intel Quark platform support"
 619        depends on X86_32
 620        depends on X86_EXTENDED_PLATFORM
 621        depends on X86_PLATFORM_DEVICES
 622        depends on X86_TSC
 623        depends on PCI
 624        depends on PCI_GOANY
 625        depends on X86_IO_APIC
 626        select IOSF_MBI
 627        select INTEL_IMR
 628        select COMMON_CLK
 629        help
 630          Select to include support for Quark X1000 SoC.
 631          Say Y here if you have a Quark based system such as the Arduino
 632          compatible Intel Galileo.
 633
 634config X86_INTEL_LPSS
 635        bool "Intel Low Power Subsystem Support"
 636        depends on X86 && ACPI && PCI
 637        select COMMON_CLK
 638        select PINCTRL
 639        select IOSF_MBI
 640        help
 641          Select to build support for Intel Low Power Subsystem such as
 642          found on Intel Lynxpoint PCH. Selecting this option enables
 643          things like clock tree (common clock framework) and pincontrol
 644          which are needed by the LPSS peripheral drivers.
 645
 646config X86_AMD_PLATFORM_DEVICE
 647        bool "AMD ACPI2Platform devices support"
 648        depends on ACPI
 649        select COMMON_CLK
 650        select PINCTRL
 651        help
 652          Select to interpret AMD specific ACPI device to platform device
 653          such as I2C, UART, GPIO found on AMD Carrizo and later chipsets.
 654          I2C and UART depend on COMMON_CLK to set clock. GPIO driver is
 655          implemented under PINCTRL subsystem.
 656
 657config IOSF_MBI
 658        tristate "Intel SoC IOSF Sideband support for SoC platforms"
 659        depends on PCI
 660        help
 661          This option enables sideband register access support for Intel SoC
 662          platforms. On these platforms the IOSF sideband is used in lieu of
 663          MSR's for some register accesses, mostly but not limited to thermal
 664          and power. Drivers may query the availability of this device to
 665          determine if they need the sideband in order to work on these
 666          platforms. The sideband is available on the following SoC products.
 667          This list is not meant to be exclusive.
 668           - BayTrail
 669           - Braswell
 670           - Quark
 671
 672          You should say Y if you are running a kernel on one of these SoC's.
 673
 674config IOSF_MBI_DEBUG
 675        bool "Enable IOSF sideband access through debugfs"
 676        depends on IOSF_MBI && DEBUG_FS
 677        help
 678          Select this option to expose the IOSF sideband access registers (MCR,
 679          MDR, MCRX) through debugfs to write and read register information from
 680          different units on the SoC. This is most useful for obtaining device
 681          state information for debug and analysis. As this is a general access
 682          mechanism, users of this option would have specific knowledge of the
 683          device they want to access.
 684
 685          If you don't require the option or are in doubt, say N.
 686
 687config X86_RDC321X
 688        bool "RDC R-321x SoC"
 689        depends on X86_32
 690        depends on X86_EXTENDED_PLATFORM
 691        select M486
 692        select X86_REBOOTFIXUPS
 693        help
 694          This option is needed for RDC R-321x system-on-chip, also known
 695          as R-8610-(G).
 696          If you don't have one of these chips, you should say N here.
 697
 698config X86_32_NON_STANDARD
 699        bool "Support non-standard 32-bit SMP architectures"
 700        depends on X86_32 && SMP
 701        depends on X86_EXTENDED_PLATFORM
 702        help
 703          This option compiles in the bigsmp and STA2X11 default
 704          subarchitectures.  It is intended for a generic binary
 705          kernel. If you select them all, kernel will probe it one by
 706          one and will fallback to default.
 707
 708# Alphabetically sorted list of Non standard 32 bit platforms
 709
 710config X86_SUPPORTS_MEMORY_FAILURE
 711        def_bool y
 712        # MCE code calls memory_failure():
 713        depends on X86_MCE
 714        # On 32-bit this adds too big of NODES_SHIFT and we run out of page flags:
 715        # On 32-bit SPARSEMEM adds too big of SECTIONS_WIDTH:
 716        depends on X86_64 || !SPARSEMEM
 717        select ARCH_SUPPORTS_MEMORY_FAILURE
 718
 719config STA2X11
 720        bool "STA2X11 Companion Chip Support"
 721        depends on X86_32_NON_STANDARD && PCI
 722        select SWIOTLB
 723        select MFD_STA2X11
 724        select GPIOLIB
 725        help
 726          This adds support for boards based on the STA2X11 IO-Hub,
 727          a.k.a. "ConneXt". The chip is used in place of the standard
 728          PC chipset, so all "standard" peripherals are missing. If this
 729          option is selected the kernel will still be able to boot on
 730          standard PC machines.
 731
 732config X86_32_IRIS
 733        tristate "Eurobraille/Iris poweroff module"
 734        depends on X86_32
 735        help
 736          The Iris machines from EuroBraille do not have APM or ACPI support
 737          to shut themselves down properly.  A special I/O sequence is
 738          needed to do so, which is what this module does at
 739          kernel shutdown.
 740
 741          This is only for Iris machines from EuroBraille.
 742
 743          If unused, say N.
 744
 745config SCHED_OMIT_FRAME_POINTER
 746        def_bool y
 747        prompt "Single-depth WCHAN output"
 748        depends on X86
 749        help
 750          Calculate simpler /proc/<PID>/wchan values. If this option
 751          is disabled then wchan values will recurse back to the
 752          caller function. This provides more accurate wchan values,
 753          at the expense of slightly more scheduling overhead.
 754
 755          If in doubt, say "Y".
 756
 757menuconfig HYPERVISOR_GUEST
 758        bool "Linux guest support"
 759        help
 760          Say Y here to enable options for running Linux under various hyper-
 761          visors. This option enables basic hypervisor detection and platform
 762          setup.
 763
 764          If you say N, all options in this submenu will be skipped and
 765          disabled, and Linux guest support won't be built in.
 766
 767if HYPERVISOR_GUEST
 768
 769config PARAVIRT
 770        bool "Enable paravirtualization code"
 771        depends on HAVE_STATIC_CALL
 772        help
 773          This changes the kernel so it can modify itself when it is run
 774          under a hypervisor, potentially improving performance significantly
 775          over full virtualization.  However, when run without a hypervisor
 776          the kernel is theoretically slower and slightly larger.
 777
 778config PARAVIRT_XXL
 779        bool
 780
 781config PARAVIRT_DEBUG
 782        bool "paravirt-ops debugging"
 783        depends on PARAVIRT && DEBUG_KERNEL
 784        help
 785          Enable to debug paravirt_ops internals.  Specifically, BUG if
 786          a paravirt_op is missing when it is called.
 787
 788config PARAVIRT_SPINLOCKS
 789        bool "Paravirtualization layer for spinlocks"
 790        depends on PARAVIRT && SMP
 791        help
 792          Paravirtualized spinlocks allow a pvops backend to replace the
 793          spinlock implementation with something virtualization-friendly
 794          (for example, block the virtual CPU rather than spinning).
 795
 796          It has a minimal impact on native kernels and gives a nice performance
 797          benefit on paravirtualized KVM / Xen kernels.
 798
 799          If you are unsure how to answer this question, answer Y.
 800
 801config X86_HV_CALLBACK_VECTOR
 802        def_bool n
 803
 804source "arch/x86/xen/Kconfig"
 805
 806config KVM_GUEST
 807        bool "KVM Guest support (including kvmclock)"
 808        depends on PARAVIRT
 809        select PARAVIRT_CLOCK
 810        select ARCH_CPUIDLE_HALTPOLL
 811        select X86_HV_CALLBACK_VECTOR
 812        default y
 813        help
 814          This option enables various optimizations for running under the KVM
 815          hypervisor. It includes a paravirtualized clock, so that instead
 816          of relying on a PIT (or probably other) emulation by the
 817          underlying device model, the host provides the guest with
 818          timing infrastructure such as time of day, and system time
 819
 820config ARCH_CPUIDLE_HALTPOLL
 821        def_bool n
 822        prompt "Disable host haltpoll when loading haltpoll driver"
 823        help
 824          If virtualized under KVM, disable host haltpoll.
 825
 826config PVH
 827        bool "Support for running PVH guests"
 828        help
 829          This option enables the PVH entry point for guest virtual machines
 830          as specified in the x86/HVM direct boot ABI.
 831
 832config PARAVIRT_TIME_ACCOUNTING
 833        bool "Paravirtual steal time accounting"
 834        depends on PARAVIRT
 835        help
 836          Select this option to enable fine granularity task steal time
 837          accounting. Time spent executing other tasks in parallel with
 838          the current vCPU is discounted from the vCPU power. To account for
 839          that, there can be a small performance impact.
 840
 841          If in doubt, say N here.
 842
 843config PARAVIRT_CLOCK
 844        bool
 845
 846config JAILHOUSE_GUEST
 847        bool "Jailhouse non-root cell support"
 848        depends on X86_64 && PCI
 849        select X86_PM_TIMER
 850        help
 851          This option allows to run Linux as guest in a Jailhouse non-root
 852          cell. You can leave this option disabled if you only want to start
 853          Jailhouse and run Linux afterwards in the root cell.
 854
 855config ACRN_GUEST
 856        bool "ACRN Guest support"
 857        depends on X86_64
 858        select X86_HV_CALLBACK_VECTOR
 859        help
 860          This option allows to run Linux as guest in the ACRN hypervisor. ACRN is
 861          a flexible, lightweight reference open-source hypervisor, built with
 862          real-time and safety-criticality in mind. It is built for embedded
 863          IOT with small footprint and real-time features. More details can be
 864          found in https://projectacrn.org/.
 865
 866config INTEL_TDX_GUEST
 867        bool "Intel TDX (Trust Domain Extensions) - Guest Support"
 868        depends on X86_64 && CPU_SUP_INTEL
 869        depends on X86_X2APIC
 870        select ARCH_HAS_CC_PLATFORM
 871        select X86_MEM_ENCRYPT
 872        select X86_MCE
 873        help
 874          Support running as a guest under Intel TDX.  Without this support,
 875          the guest kernel can not boot or run under TDX.
 876          TDX includes memory encryption and integrity capabilities
 877          which protect the confidentiality and integrity of guest
 878          memory contents and CPU state. TDX guests are protected from
 879          some attacks from the VMM.
 880
 881endif # HYPERVISOR_GUEST
 882
 883source "arch/x86/Kconfig.cpu"
 884
 885config HPET_TIMER
 886        def_bool X86_64
 887        prompt "HPET Timer Support" if X86_32
 888        help
 889          Use the IA-PC HPET (High Precision Event Timer) to manage
 890          time in preference to the PIT and RTC, if a HPET is
 891          present.
 892          HPET is the next generation timer replacing legacy 8254s.
 893          The HPET provides a stable time base on SMP
 894          systems, unlike the TSC, but it is more expensive to access,
 895          as it is off-chip.  The interface used is documented
 896          in the HPET spec, revision 1.
 897
 898          You can safely choose Y here.  However, HPET will only be
 899          activated if the platform and the BIOS support this feature.
 900          Otherwise the 8254 will be used for timing services.
 901
 902          Choose N to continue using the legacy 8254 timer.
 903
 904config HPET_EMULATE_RTC
 905        def_bool y
 906        depends on HPET_TIMER && (RTC_DRV_CMOS=m || RTC_DRV_CMOS=y)
 907
 908# Mark as expert because too many people got it wrong.
 909# The code disables itself when not needed.
 910config DMI
 911        default y
 912        select DMI_SCAN_MACHINE_NON_EFI_FALLBACK
 913        bool "Enable DMI scanning" if EXPERT
 914        help
 915          Enabled scanning of DMI to identify machine quirks. Say Y
 916          here unless you have verified that your setup is not
 917          affected by entries in the DMI blacklist. Required by PNP
 918          BIOS code.
 919
 920config GART_IOMMU
 921        bool "Old AMD GART IOMMU support"
 922        select DMA_OPS
 923        select IOMMU_HELPER
 924        select SWIOTLB
 925        depends on X86_64 && PCI && AMD_NB
 926        help
 927          Provides a driver for older AMD Athlon64/Opteron/Turion/Sempron
 928          GART based hardware IOMMUs.
 929
 930          The GART supports full DMA access for devices with 32-bit access
 931          limitations, on systems with more than 3 GB. This is usually needed
 932          for USB, sound, many IDE/SATA chipsets and some other devices.
 933
 934          Newer systems typically have a modern AMD IOMMU, supported via
 935          the CONFIG_AMD_IOMMU=y config option.
 936
 937          In normal configurations this driver is only active when needed:
 938          there's more than 3 GB of memory and the system contains a
 939          32-bit limited device.
 940
 941          If unsure, say Y.
 942
 943config BOOT_VESA_SUPPORT
 944        bool
 945        help
 946          If true, at least one selected framebuffer driver can take advantage
 947          of VESA video modes set at an early boot stage via the vga= parameter.
 948
 949config MAXSMP
 950        bool "Enable Maximum number of SMP Processors and NUMA Nodes"
 951        depends on X86_64 && SMP && DEBUG_KERNEL
 952        select CPUMASK_OFFSTACK
 953        help
 954          Enable maximum number of CPUS and NUMA Nodes for this architecture.
 955          If unsure, say N.
 956
 957#
 958# The maximum number of CPUs supported:
 959#
 960# The main config value is NR_CPUS, which defaults to NR_CPUS_DEFAULT,
 961# and which can be configured interactively in the
 962# [NR_CPUS_RANGE_BEGIN ... NR_CPUS_RANGE_END] range.
 963#
 964# The ranges are different on 32-bit and 64-bit kernels, depending on
 965# hardware capabilities and scalability features of the kernel.
 966#
 967# ( If MAXSMP is enabled we just use the highest possible value and disable
 968#   interactive configuration. )
 969#
 970
 971config NR_CPUS_RANGE_BEGIN
 972        int
 973        default NR_CPUS_RANGE_END if MAXSMP
 974        default    1 if !SMP
 975        default    2
 976
 977config NR_CPUS_RANGE_END
 978        int
 979        depends on X86_32
 980        default   64 if  SMP &&  X86_BIGSMP
 981        default    8 if  SMP && !X86_BIGSMP
 982        default    1 if !SMP
 983
 984config NR_CPUS_RANGE_END
 985        int
 986        depends on X86_64
 987        default 8192 if  SMP && CPUMASK_OFFSTACK
 988        default  512 if  SMP && !CPUMASK_OFFSTACK
 989        default    1 if !SMP
 990
 991config NR_CPUS_DEFAULT
 992        int
 993        depends on X86_32
 994        default   32 if  X86_BIGSMP
 995        default    8 if  SMP
 996        default    1 if !SMP
 997
 998config NR_CPUS_DEFAULT
 999        int
1000        depends on X86_64
1001        default 8192 if  MAXSMP
1002        default   64 if  SMP
1003        default    1 if !SMP
1004
1005config NR_CPUS
1006        int "Maximum number of CPUs" if SMP && !MAXSMP
1007        range NR_CPUS_RANGE_BEGIN NR_CPUS_RANGE_END
1008        default NR_CPUS_DEFAULT
1009        help
1010          This allows you to specify the maximum number of CPUs which this
1011          kernel will support.  If CPUMASK_OFFSTACK is enabled, the maximum
1012          supported value is 8192, otherwise the maximum value is 512.  The
1013          minimum value which makes sense is 2.
1014
1015          This is purely to save memory: each supported CPU adds about 8KB
1016          to the kernel image.
1017
1018config SCHED_CLUSTER
1019        bool "Cluster scheduler support"
1020        depends on SMP
1021        default y
1022        help
1023          Cluster scheduler support improves the CPU scheduler's decision
1024          making when dealing with machines that have clusters of CPUs.
1025          Cluster usually means a couple of CPUs which are placed closely
1026          by sharing mid-level caches, last-level cache tags or internal
1027          busses.
1028
1029config SCHED_SMT
1030        def_bool y if SMP
1031
1032config SCHED_MC
1033        def_bool y
1034        prompt "Multi-core scheduler support"
1035        depends on SMP
1036        help
1037          Multi-core scheduler support improves the CPU scheduler's decision
1038          making when dealing with multi-core CPU chips at a cost of slightly
1039          increased overhead in some places. If unsure say N here.
1040
1041config SCHED_MC_PRIO
1042        bool "CPU core priorities scheduler support"
1043        depends on SCHED_MC && CPU_SUP_INTEL
1044        select X86_INTEL_PSTATE
1045        select CPU_FREQ
1046        default y
1047        help
1048          Intel Turbo Boost Max Technology 3.0 enabled CPUs have a
1049          core ordering determined at manufacturing time, which allows
1050          certain cores to reach higher turbo frequencies (when running
1051          single threaded workloads) than others.
1052
1053          Enabling this kernel feature teaches the scheduler about
1054          the TBM3 (aka ITMT) priority order of the CPU cores and adjusts the
1055          scheduler's CPU selection logic accordingly, so that higher
1056          overall system performance can be achieved.
1057
1058          This feature will have no effect on CPUs without this feature.
1059
1060          If unsure say Y here.
1061
1062config UP_LATE_INIT
1063        def_bool y
1064        depends on !SMP && X86_LOCAL_APIC
1065
1066config X86_UP_APIC
1067        bool "Local APIC support on uniprocessors" if !PCI_MSI
1068        default PCI_MSI
1069        depends on X86_32 && !SMP && !X86_32_NON_STANDARD
1070        help
1071          A local APIC (Advanced Programmable Interrupt Controller) is an
1072          integrated interrupt controller in the CPU. If you have a single-CPU
1073          system which has a processor with a local APIC, you can say Y here to
1074          enable and use it. If you say Y here even though your machine doesn't
1075          have a local APIC, then the kernel will still run with no slowdown at
1076          all. The local APIC supports CPU-generated self-interrupts (timer,
1077          performance counters), and the NMI watchdog which detects hard
1078          lockups.
1079
1080config X86_UP_IOAPIC
1081        bool "IO-APIC support on uniprocessors"
1082        depends on X86_UP_APIC
1083        help
1084          An IO-APIC (I/O Advanced Programmable Interrupt Controller) is an
1085          SMP-capable replacement for PC-style interrupt controllers. Most
1086          SMP systems and many recent uniprocessor systems have one.
1087
1088          If you have a single-CPU system with an IO-APIC, you can say Y here
1089          to use it. If you say Y here even though your machine doesn't have
1090          an IO-APIC, then the kernel will still run with no slowdown at all.
1091
1092config X86_LOCAL_APIC
1093        def_bool y
1094        depends on X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_APIC || PCI_MSI
1095        select IRQ_DOMAIN_HIERARCHY
1096        select PCI_MSI_IRQ_DOMAIN if PCI_MSI
1097
1098config X86_IO_APIC
1099        def_bool y
1100        depends on X86_LOCAL_APIC || X86_UP_IOAPIC
1101
1102config X86_REROUTE_FOR_BROKEN_BOOT_IRQS
1103        bool "Reroute for broken boot IRQs"
1104        depends on X86_IO_APIC
1105        help
1106          This option enables a workaround that fixes a source of
1107          spurious interrupts. This is recommended when threaded
1108          interrupt handling is used on systems where the generation of
1109          superfluous "boot interrupts" cannot be disabled.
1110
1111          Some chipsets generate a legacy INTx "boot IRQ" when the IRQ
1112          entry in the chipset's IO-APIC is masked (as, e.g. the RT
1113          kernel does during interrupt handling). On chipsets where this
1114          boot IRQ generation cannot be disabled, this workaround keeps
1115          the original IRQ line masked so that only the equivalent "boot
1116          IRQ" is delivered to the CPUs. The workaround also tells the
1117          kernel to set up the IRQ handler on the boot IRQ line. In this
1118          way only one interrupt is delivered to the kernel. Otherwise
1119          the spurious second interrupt may cause the kernel to bring
1120          down (vital) interrupt lines.
1121
1122          Only affects "broken" chipsets. Interrupt sharing may be
1123          increased on these systems.
1124
1125config X86_MCE
1126        bool "Machine Check / overheating reporting"
1127        select GENERIC_ALLOCATOR
1128        default y
1129        help
1130          Machine Check support allows the processor to notify the
1131          kernel if it detects a problem (e.g. overheating, data corruption).
1132          The action the kernel takes depends on the severity of the problem,
1133          ranging from warning messages to halting the machine.
1134
1135config X86_MCELOG_LEGACY
1136        bool "Support for deprecated /dev/mcelog character device"
1137        depends on X86_MCE
1138        help
1139          Enable support for /dev/mcelog which is needed by the old mcelog
1140          userspace logging daemon. Consider switching to the new generation
1141          rasdaemon solution.
1142
1143config X86_MCE_INTEL
1144        def_bool y
1145        prompt "Intel MCE features"
1146        depends on X86_MCE && X86_LOCAL_APIC
1147        help
1148          Additional support for intel specific MCE features such as
1149          the thermal monitor.
1150
1151config X86_MCE_AMD
1152        def_bool y
1153        prompt "AMD MCE features"
1154        depends on X86_MCE && X86_LOCAL_APIC && AMD_NB
1155        help
1156          Additional support for AMD specific MCE features such as
1157          the DRAM Error Threshold.
1158
1159config X86_ANCIENT_MCE
1160        bool "Support for old Pentium 5 / WinChip machine checks"
1161        depends on X86_32 && X86_MCE
1162        help
1163          Include support for machine check handling on old Pentium 5 or WinChip
1164          systems. These typically need to be enabled explicitly on the command
1165          line.
1166
1167config X86_MCE_THRESHOLD
1168        depends on X86_MCE_AMD || X86_MCE_INTEL
1169        def_bool y
1170
1171config X86_MCE_INJECT
1172        depends on X86_MCE && X86_LOCAL_APIC && DEBUG_FS
1173        tristate "Machine check injector support"
1174        help
1175          Provide support for injecting machine checks for testing purposes.
1176          If you don't know what a machine check is and you don't do kernel
1177          QA it is safe to say n.
1178
1179source "arch/x86/events/Kconfig"
1180
1181config X86_LEGACY_VM86
1182        bool "Legacy VM86 support"
1183        depends on X86_32
1184        help
1185          This option allows user programs to put the CPU into V8086
1186          mode, which is an 80286-era approximation of 16-bit real mode.
1187
1188          Some very old versions of X and/or vbetool require this option
1189          for user mode setting.  Similarly, DOSEMU will use it if
1190          available to accelerate real mode DOS programs.  However, any
1191          recent version of DOSEMU, X, or vbetool should be fully
1192          functional even without kernel VM86 support, as they will all
1193          fall back to software emulation. Nevertheless, if you are using
1194          a 16-bit DOS program where 16-bit performance matters, vm86
1195          mode might be faster than emulation and you might want to
1196          enable this option.
1197
1198          Note that any app that works on a 64-bit kernel is unlikely to
1199          need this option, as 64-bit kernels don't, and can't, support
1200          V8086 mode. This option is also unrelated to 16-bit protected
1201          mode and is not needed to run most 16-bit programs under Wine.
1202
1203          Enabling this option increases the complexity of the kernel
1204          and slows down exception handling a tiny bit.
1205
1206          If unsure, say N here.
1207
1208config VM86
1209        bool
1210        default X86_LEGACY_VM86
1211
1212config X86_16BIT
1213        bool "Enable support for 16-bit segments" if EXPERT
1214        default y
1215        depends on MODIFY_LDT_SYSCALL
1216        help
1217          This option is required by programs like Wine to run 16-bit
1218          protected mode legacy code on x86 processors.  Disabling
1219          this option saves about 300 bytes on i386, or around 6K text
1220          plus 16K runtime memory on x86-64,
1221
1222config X86_ESPFIX32
1223        def_bool y
1224        depends on X86_16BIT && X86_32
1225
1226config X86_ESPFIX64
1227        def_bool y
1228        depends on X86_16BIT && X86_64
1229
1230config X86_VSYSCALL_EMULATION
1231        bool "Enable vsyscall emulation" if EXPERT
1232        default y
1233        depends on X86_64
1234        help
1235          This enables emulation of the legacy vsyscall page.  Disabling
1236          it is roughly equivalent to booting with vsyscall=none, except
1237          that it will also disable the helpful warning if a program
1238          tries to use a vsyscall.  With this option set to N, offending
1239          programs will just segfault, citing addresses of the form
1240          0xffffffffff600?00.
1241
1242          This option is required by many programs built before 2013, and
1243          care should be used even with newer programs if set to N.
1244
1245          Disabling this option saves about 7K of kernel size and
1246          possibly 4K of additional runtime pagetable memory.
1247
1248config X86_IOPL_IOPERM
1249        bool "IOPERM and IOPL Emulation"
1250        default y
1251        help
1252          This enables the ioperm() and iopl() syscalls which are necessary
1253          for legacy applications.
1254
1255          Legacy IOPL support is an overbroad mechanism which allows user
1256          space aside of accessing all 65536 I/O ports also to disable
1257          interrupts. To gain this access the caller needs CAP_SYS_RAWIO
1258          capabilities and permission from potentially active security
1259          modules.
1260
1261          The emulation restricts the functionality of the syscall to
1262          only allowing the full range I/O port access, but prevents the
1263          ability to disable interrupts from user space which would be
1264          granted if the hardware IOPL mechanism would be used.
1265
1266config TOSHIBA
1267        tristate "Toshiba Laptop support"
1268        depends on X86_32
1269        help
1270          This adds a driver to safely access the System Management Mode of
1271          the CPU on Toshiba portables with a genuine Toshiba BIOS. It does
1272          not work on models with a Phoenix BIOS. The System Management Mode
1273          is used to set the BIOS and power saving options on Toshiba portables.
1274
1275          For information on utilities to make use of this driver see the
1276          Toshiba Linux utilities web site at:
1277          <http://www.buzzard.org.uk/toshiba/>.
1278
1279          Say Y if you intend to run this kernel on a Toshiba portable.
1280          Say N otherwise.
1281
1282config X86_REBOOTFIXUPS
1283        bool "Enable X86 board specific fixups for reboot"
1284        depends on X86_32
1285        help
1286          This enables chipset and/or board specific fixups to be done
1287          in order to get reboot to work correctly. This is only needed on
1288          some combinations of hardware and BIOS. The symptom, for which
1289          this config is intended, is when reboot ends with a stalled/hung
1290          system.
1291
1292          Currently, the only fixup is for the Geode machines using
1293          CS5530A and CS5536 chipsets and the RDC R-321x SoC.
1294
1295          Say Y if you want to enable the fixup. Currently, it's safe to
1296          enable this option even if you don't need it.
1297          Say N otherwise.
1298
1299config MICROCODE
1300        bool "CPU microcode loading support"
1301        default y
1302        depends on CPU_SUP_AMD || CPU_SUP_INTEL
1303        help
1304          If you say Y here, you will be able to update the microcode on
1305          Intel and AMD processors. The Intel support is for the IA32 family,
1306          e.g. Pentium Pro, Pentium II, Pentium III, Pentium 4, Xeon etc. The
1307          AMD support is for families 0x10 and later. You will obviously need
1308          the actual microcode binary data itself which is not shipped with
1309          the Linux kernel.
1310
1311          The preferred method to load microcode from a detached initrd is described
1312          in Documentation/x86/microcode.rst. For that you need to enable
1313          CONFIG_BLK_DEV_INITRD in order for the loader to be able to scan the
1314          initrd for microcode blobs.
1315
1316          In addition, you can build the microcode into the kernel. For that you
1317          need to add the vendor-supplied microcode to the CONFIG_EXTRA_FIRMWARE
1318          config option.
1319
1320config MICROCODE_INTEL
1321        bool "Intel microcode loading support"
1322        depends on CPU_SUP_INTEL && MICROCODE
1323        default MICROCODE
1324        help
1325          This options enables microcode patch loading support for Intel
1326          processors.
1327
1328          For the current Intel microcode data package go to
1329          <https://downloadcenter.intel.com> and search for
1330          'Linux Processor Microcode Data File'.
1331
1332config MICROCODE_AMD
1333        bool "AMD microcode loading support"
1334        depends on CPU_SUP_AMD && MICROCODE
1335        help
1336          If you select this option, microcode patch loading support for AMD
1337          processors will be enabled.
1338
1339config MICROCODE_LATE_LOADING
1340        bool "Late microcode loading (DANGEROUS)"
1341        default n
1342        depends on MICROCODE
1343        help
1344          Loading microcode late, when the system is up and executing instructions
1345          is a tricky business and should be avoided if possible. Just the sequence
1346          of synchronizing all cores and SMT threads is one fragile dance which does
1347          not guarantee that cores might not softlock after the loading. Therefore,
1348          use this at your own risk. Late loading taints the kernel too.
1349
1350config X86_MSR
1351        tristate "/dev/cpu/*/msr - Model-specific register support"
1352        help
1353          This device gives privileged processes access to the x86
1354          Model-Specific Registers (MSRs).  It is a character device with
1355          major 202 and minors 0 to 31 for /dev/cpu/0/msr to /dev/cpu/31/msr.
1356          MSR accesses are directed to a specific CPU on multi-processor
1357          systems.
1358
1359config X86_CPUID
1360        tristate "/dev/cpu/*/cpuid - CPU information support"
1361        help
1362          This device gives processes access to the x86 CPUID instruction to
1363          be executed on a specific processor.  It is a character device
1364          with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to
1365          /dev/cpu/31/cpuid.
1366
1367choice
1368        prompt "High Memory Support"
1369        default HIGHMEM4G
1370        depends on X86_32
1371
1372config NOHIGHMEM
1373        bool "off"
1374        help
1375          Linux can use up to 64 Gigabytes of physical memory on x86 systems.
1376          However, the address space of 32-bit x86 processors is only 4
1377          Gigabytes large. That means that, if you have a large amount of
1378          physical memory, not all of it can be "permanently mapped" by the
1379          kernel. The physical memory that's not permanently mapped is called
1380          "high memory".
1381
1382          If you are compiling a kernel which will never run on a machine with
1383          more than 1 Gigabyte total physical RAM, answer "off" here (default
1384          choice and suitable for most users). This will result in a "3GB/1GB"
1385          split: 3GB are mapped so that each process sees a 3GB virtual memory
1386          space and the remaining part of the 4GB virtual memory space is used
1387          by the kernel to permanently map as much physical memory as
1388          possible.
1389
1390          If the machine has between 1 and 4 Gigabytes physical RAM, then
1391          answer "4GB" here.
1392
1393          If more than 4 Gigabytes is used then answer "64GB" here. This
1394          selection turns Intel PAE (Physical Address Extension) mode on.
1395          PAE implements 3-level paging on IA32 processors. PAE is fully
1396          supported by Linux, PAE mode is implemented on all recent Intel
1397          processors (Pentium Pro and better). NOTE: If you say "64GB" here,
1398          then the kernel will not boot on CPUs that don't support PAE!
1399
1400          The actual amount of total physical memory will either be
1401          auto detected or can be forced by using a kernel command line option
1402          such as "mem=256M". (Try "man bootparam" or see the documentation of
1403          your boot loader (lilo or loadlin) about how to pass options to the
1404          kernel at boot time.)
1405
1406          If unsure, say "off".
1407
1408config HIGHMEM4G
1409        bool "4GB"
1410        help
1411          Select this if you have a 32-bit processor and between 1 and 4
1412          gigabytes of physical RAM.
1413
1414config HIGHMEM64G
1415        bool "64GB"
1416        depends on !M486SX && !M486 && !M586 && !M586TSC && !M586MMX && !MGEODE_LX && !MGEODEGX1 && !MCYRIXIII && !MELAN && !MWINCHIPC6 && !MWINCHIP3D && !MK6
1417        select X86_PAE
1418        help
1419          Select this if you have a 32-bit processor and more than 4
1420          gigabytes of physical RAM.
1421
1422endchoice
1423
1424choice
1425        prompt "Memory split" if EXPERT
1426        default VMSPLIT_3G
1427        depends on X86_32
1428        help
1429          Select the desired split between kernel and user memory.
1430
1431          If the address range available to the kernel is less than the
1432          physical memory installed, the remaining memory will be available
1433          as "high memory". Accessing high memory is a little more costly
1434          than low memory, as it needs to be mapped into the kernel first.
1435          Note that increasing the kernel address space limits the range
1436          available to user programs, making the address space there
1437          tighter.  Selecting anything other than the default 3G/1G split
1438          will also likely make your kernel incompatible with binary-only
1439          kernel modules.
1440
1441          If you are not absolutely sure what you are doing, leave this
1442          option alone!
1443
1444        config VMSPLIT_3G
1445                bool "3G/1G user/kernel split"
1446        config VMSPLIT_3G_OPT
1447                depends on !X86_PAE
1448                bool "3G/1G user/kernel split (for full 1G low memory)"
1449        config VMSPLIT_2G
1450                bool "2G/2G user/kernel split"
1451        config VMSPLIT_2G_OPT
1452                depends on !X86_PAE
1453                bool "2G/2G user/kernel split (for full 2G low memory)"
1454        config VMSPLIT_1G
1455                bool "1G/3G user/kernel split"
1456endchoice
1457
1458config PAGE_OFFSET
1459        hex
1460        default 0xB0000000 if VMSPLIT_3G_OPT
1461        default 0x80000000 if VMSPLIT_2G
1462        default 0x78000000 if VMSPLIT_2G_OPT
1463        default 0x40000000 if VMSPLIT_1G
1464        default 0xC0000000
1465        depends on X86_32
1466
1467config HIGHMEM
1468        def_bool y
1469        depends on X86_32 && (HIGHMEM64G || HIGHMEM4G)
1470
1471config X86_PAE
1472        bool "PAE (Physical Address Extension) Support"
1473        depends on X86_32 && !HIGHMEM4G
1474        select PHYS_ADDR_T_64BIT
1475        select SWIOTLB
1476        help
1477          PAE is required for NX support, and furthermore enables
1478          larger swapspace support for non-overcommit purposes. It
1479          has the cost of more pagetable lookup overhead, and also
1480          consumes more pagetable space per process.
1481
1482config X86_5LEVEL
1483        bool "Enable 5-level page tables support"
1484        default y
1485        select DYNAMIC_MEMORY_LAYOUT
1486        select SPARSEMEM_VMEMMAP
1487        depends on X86_64
1488        help
1489          5-level paging enables access to larger address space:
1490          upto 128 PiB of virtual address space and 4 PiB of
1491          physical address space.
1492
1493          It will be supported by future Intel CPUs.
1494
1495          A kernel with the option enabled can be booted on machines that
1496          support 4- or 5-level paging.
1497
1498          See Documentation/x86/x86_64/5level-paging.rst for more
1499          information.
1500
1501          Say N if unsure.
1502
1503config X86_DIRECT_GBPAGES
1504        def_bool y
1505        depends on X86_64
1506        help
1507          Certain kernel features effectively disable kernel
1508          linear 1 GB mappings (even if the CPU otherwise
1509          supports them), so don't confuse the user by printing
1510          that we have them enabled.
1511
1512config X86_CPA_STATISTICS
1513        bool "Enable statistic for Change Page Attribute"
1514        depends on DEBUG_FS
1515        help
1516          Expose statistics about the Change Page Attribute mechanism, which
1517          helps to determine the effectiveness of preserving large and huge
1518          page mappings when mapping protections are changed.
1519
1520config X86_MEM_ENCRYPT
1521        select ARCH_HAS_FORCE_DMA_UNENCRYPTED
1522        select DYNAMIC_PHYSICAL_MASK
1523        def_bool n
1524
1525config AMD_MEM_ENCRYPT
1526        bool "AMD Secure Memory Encryption (SME) support"
1527        depends on X86_64 && CPU_SUP_AMD
1528        select DMA_COHERENT_POOL
1529        select ARCH_USE_MEMREMAP_PROT
1530        select INSTRUCTION_DECODER
1531        select ARCH_HAS_CC_PLATFORM
1532        select X86_MEM_ENCRYPT
1533        help
1534          Say yes to enable support for the encryption of system memory.
1535          This requires an AMD processor that supports Secure Memory
1536          Encryption (SME).
1537
1538config AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT
1539        bool "Activate AMD Secure Memory Encryption (SME) by default"
1540        depends on AMD_MEM_ENCRYPT
1541        help
1542          Say yes to have system memory encrypted by default if running on
1543          an AMD processor that supports Secure Memory Encryption (SME).
1544
1545          If set to Y, then the encryption of system memory can be
1546          deactivated with the mem_encrypt=off command line option.
1547
1548          If set to N, then the encryption of system memory can be
1549          activated with the mem_encrypt=on command line option.
1550
1551# Common NUMA Features
1552config NUMA
1553        bool "NUMA Memory Allocation and Scheduler Support"
1554        depends on SMP
1555        depends on X86_64 || (X86_32 && HIGHMEM64G && X86_BIGSMP)
1556        default y if X86_BIGSMP
1557        select USE_PERCPU_NUMA_NODE_ID
1558        help
1559          Enable NUMA (Non-Uniform Memory Access) support.
1560
1561          The kernel will try to allocate memory used by a CPU on the
1562          local memory controller of the CPU and add some more
1563          NUMA awareness to the kernel.
1564
1565          For 64-bit this is recommended if the system is Intel Core i7
1566          (or later), AMD Opteron, or EM64T NUMA.
1567
1568          For 32-bit this is only needed if you boot a 32-bit
1569          kernel on a 64-bit NUMA platform.
1570
1571          Otherwise, you should say N.
1572
1573config AMD_NUMA
1574        def_bool y
1575        prompt "Old style AMD Opteron NUMA detection"
1576        depends on X86_64 && NUMA && PCI
1577        help
1578          Enable AMD NUMA node topology detection.  You should say Y here if
1579          you have a multi processor AMD system. This uses an old method to
1580          read the NUMA configuration directly from the builtin Northbridge
1581          of Opteron. It is recommended to use X86_64_ACPI_NUMA instead,
1582          which also takes priority if both are compiled in.
1583
1584config X86_64_ACPI_NUMA
1585        def_bool y
1586        prompt "ACPI NUMA detection"
1587        depends on X86_64 && NUMA && ACPI && PCI
1588        select ACPI_NUMA
1589        help
1590          Enable ACPI SRAT based node topology detection.
1591
1592config NUMA_EMU
1593        bool "NUMA emulation"
1594        depends on NUMA
1595        help
1596          Enable NUMA emulation. A flat machine will be split
1597          into virtual nodes when booted with "numa=fake=N", where N is the
1598          number of nodes. This is only useful for debugging.
1599
1600config NODES_SHIFT
1601        int "Maximum NUMA Nodes (as a power of 2)" if !MAXSMP
1602        range 1 10
1603        default "10" if MAXSMP
1604        default "6" if X86_64
1605        default "3"
1606        depends on NUMA
1607        help
1608          Specify the maximum number of NUMA Nodes available on the target
1609          system.  Increases memory reserved to accommodate various tables.
1610
1611config ARCH_FLATMEM_ENABLE
1612        def_bool y
1613        depends on X86_32 && !NUMA
1614
1615config ARCH_SPARSEMEM_ENABLE
1616        def_bool y
1617        depends on X86_64 || NUMA || X86_32 || X86_32_NON_STANDARD
1618        select SPARSEMEM_STATIC if X86_32
1619        select SPARSEMEM_VMEMMAP_ENABLE if X86_64
1620
1621config ARCH_SPARSEMEM_DEFAULT
1622        def_bool X86_64 || (NUMA && X86_32)
1623
1624config ARCH_SELECT_MEMORY_MODEL
1625        def_bool y
1626        depends on ARCH_SPARSEMEM_ENABLE && ARCH_FLATMEM_ENABLE
1627
1628config ARCH_MEMORY_PROBE
1629        bool "Enable sysfs memory/probe interface"
1630        depends on MEMORY_HOTPLUG
1631        help
1632          This option enables a sysfs memory/probe interface for testing.
1633          See Documentation/admin-guide/mm/memory-hotplug.rst for more information.
1634          If you are unsure how to answer this question, answer N.
1635
1636config ARCH_PROC_KCORE_TEXT
1637        def_bool y
1638        depends on X86_64 && PROC_KCORE
1639
1640config ILLEGAL_POINTER_VALUE
1641        hex
1642        default 0 if X86_32
1643        default 0xdead000000000000 if X86_64
1644
1645config X86_PMEM_LEGACY_DEVICE
1646        bool
1647
1648config X86_PMEM_LEGACY
1649        tristate "Support non-standard NVDIMMs and ADR protected memory"
1650        depends on PHYS_ADDR_T_64BIT
1651        depends on BLK_DEV
1652        select X86_PMEM_LEGACY_DEVICE
1653        select NUMA_KEEP_MEMINFO if NUMA
1654        select LIBNVDIMM
1655        help
1656          Treat memory marked using the non-standard e820 type of 12 as used
1657          by the Intel Sandy Bridge-EP reference BIOS as protected memory.
1658          The kernel will offer these regions to the 'pmem' driver so
1659          they can be used for persistent storage.
1660
1661          Say Y if unsure.
1662
1663config HIGHPTE
1664        bool "Allocate 3rd-level pagetables from highmem"
1665        depends on HIGHMEM
1666        help
1667          The VM uses one page table entry for each page of physical memory.
1668          For systems with a lot of RAM, this can be wasteful of precious
1669          low memory.  Setting this option will put user-space page table
1670          entries in high memory.
1671
1672config X86_CHECK_BIOS_CORRUPTION
1673        bool "Check for low memory corruption"
1674        help
1675          Periodically check for memory corruption in low memory, which
1676          is suspected to be caused by BIOS.  Even when enabled in the
1677          configuration, it is disabled at runtime.  Enable it by
1678          setting "memory_corruption_check=1" on the kernel command
1679          line.  By default it scans the low 64k of memory every 60
1680          seconds; see the memory_corruption_check_size and
1681          memory_corruption_check_period parameters in
1682          Documentation/admin-guide/kernel-parameters.rst to adjust this.
1683
1684          When enabled with the default parameters, this option has
1685          almost no overhead, as it reserves a relatively small amount
1686          of memory and scans it infrequently.  It both detects corruption
1687          and prevents it from affecting the running system.
1688
1689          It is, however, intended as a diagnostic tool; if repeatable
1690          BIOS-originated corruption always affects the same memory,
1691          you can use memmap= to prevent the kernel from using that
1692          memory.
1693
1694config X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK
1695        bool "Set the default setting of memory_corruption_check"
1696        depends on X86_CHECK_BIOS_CORRUPTION
1697        default y
1698        help
1699          Set whether the default state of memory_corruption_check is
1700          on or off.
1701
1702config MATH_EMULATION
1703        bool
1704        depends on MODIFY_LDT_SYSCALL
1705        prompt "Math emulation" if X86_32 && (M486SX || MELAN)
1706        help
1707          Linux can emulate a math coprocessor (used for floating point
1708          operations) if you don't have one. 486DX and Pentium processors have
1709          a math coprocessor built in, 486SX and 386 do not, unless you added
1710          a 487DX or 387, respectively. (The messages during boot time can
1711          give you some hints here ["man dmesg"].) Everyone needs either a
1712          coprocessor or this emulation.
1713
1714          If you don't have a math coprocessor, you need to say Y here; if you
1715          say Y here even though you have a coprocessor, the coprocessor will
1716          be used nevertheless. (This behavior can be changed with the kernel
1717          command line option "no387", which comes handy if your coprocessor
1718          is broken. Try "man bootparam" or see the documentation of your boot
1719          loader (lilo or loadlin) about how to pass options to the kernel at
1720          boot time.) This means that it is a good idea to say Y here if you
1721          intend to use this kernel on different machines.
1722
1723          More information about the internals of the Linux math coprocessor
1724          emulation can be found in <file:arch/x86/math-emu/README>.
1725
1726          If you are not sure, say Y; apart from resulting in a 66 KB bigger
1727          kernel, it won't hurt.
1728
1729config MTRR
1730        def_bool y
1731        prompt "MTRR (Memory Type Range Register) support" if EXPERT
1732        help
1733          On Intel P6 family processors (Pentium Pro, Pentium II and later)
1734          the Memory Type Range Registers (MTRRs) may be used to control
1735          processor access to memory ranges. This is most useful if you have
1736          a video (VGA) card on a PCI or AGP bus. Enabling write-combining
1737          allows bus write transfers to be combined into a larger transfer
1738          before bursting over the PCI/AGP bus. This can increase performance
1739          of image write operations 2.5 times or more. Saying Y here creates a
1740          /proc/mtrr file which may be used to manipulate your processor's
1741          MTRRs. Typically the X server should use this.
1742
1743          This code has a reasonably generic interface so that similar
1744          control registers on other processors can be easily supported
1745          as well:
1746
1747          The Cyrix 6x86, 6x86MX and M II processors have Address Range
1748          Registers (ARRs) which provide a similar functionality to MTRRs. For
1749          these, the ARRs are used to emulate the MTRRs.
1750          The AMD K6-2 (stepping 8 and above) and K6-3 processors have two
1751          MTRRs. The Centaur C6 (WinChip) has 8 MCRs, allowing
1752          write-combining. All of these processors are supported by this code
1753          and it makes sense to say Y here if you have one of them.
1754
1755          Saying Y here also fixes a problem with buggy SMP BIOSes which only
1756          set the MTRRs for the boot CPU and not for the secondary CPUs. This
1757          can lead to all sorts of problems, so it's good to say Y here.
1758
1759          You can safely say Y even if your machine doesn't have MTRRs, you'll
1760          just add about 9 KB to your kernel.
1761
1762          See <file:Documentation/x86/mtrr.rst> for more information.
1763
1764config MTRR_SANITIZER
1765        def_bool y
1766        prompt "MTRR cleanup support"
1767        depends on MTRR
1768        help
1769          Convert MTRR layout from continuous to discrete, so X drivers can
1770          add writeback entries.
1771
1772          Can be disabled with disable_mtrr_cleanup on the kernel command line.
1773          The largest mtrr entry size for a continuous block can be set with
1774          mtrr_chunk_size.
1775
1776          If unsure, say Y.
1777
1778config MTRR_SANITIZER_ENABLE_DEFAULT
1779        int "MTRR cleanup enable value (0-1)"
1780        range 0 1
1781        default "0"
1782        depends on MTRR_SANITIZER
1783        help
1784          Enable mtrr cleanup default value
1785
1786config MTRR_SANITIZER_SPARE_REG_NR_DEFAULT
1787        int "MTRR cleanup spare reg num (0-7)"
1788        range 0 7
1789        default "1"
1790        depends on MTRR_SANITIZER
1791        help
1792          mtrr cleanup spare entries default, it can be changed via
1793          mtrr_spare_reg_nr=N on the kernel command line.
1794
1795config X86_PAT
1796        def_bool y
1797        prompt "x86 PAT support" if EXPERT
1798        depends on MTRR
1799        help
1800          Use PAT attributes to setup page level cache control.
1801
1802          PATs are the modern equivalents of MTRRs and are much more
1803          flexible than MTRRs.
1804
1805          Say N here if you see bootup problems (boot crash, boot hang,
1806          spontaneous reboots) or a non-working video driver.
1807
1808          If unsure, say Y.
1809
1810config ARCH_USES_PG_UNCACHED
1811        def_bool y
1812        depends on X86_PAT
1813
1814config ARCH_RANDOM
1815        def_bool y
1816        prompt "x86 architectural random number generator" if EXPERT
1817        help
1818          Enable the x86 architectural RDRAND instruction
1819          (Intel Bull Mountain technology) to generate random numbers.
1820          If supported, this is a high bandwidth, cryptographically
1821          secure hardware random number generator.
1822
1823config X86_UMIP
1824        def_bool y
1825        prompt "User Mode Instruction Prevention" if EXPERT
1826        help
1827          User Mode Instruction Prevention (UMIP) is a security feature in
1828          some x86 processors. If enabled, a general protection fault is
1829          issued if the SGDT, SLDT, SIDT, SMSW or STR instructions are
1830          executed in user mode. These instructions unnecessarily expose
1831          information about the hardware state.
1832
1833          The vast majority of applications do not use these instructions.
1834          For the very few that do, software emulation is provided in
1835          specific cases in protected and virtual-8086 modes. Emulated
1836          results are dummy.
1837
1838config CC_HAS_IBT
1839        # GCC >= 9 and binutils >= 2.29
1840        # Retpoline check to work around https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93654
1841        # Clang/LLVM >= 14
1842        # https://github.com/llvm/llvm-project/commit/e0b89df2e0f0130881bf6c39bf31d7f6aac00e0f
1843        # https://github.com/llvm/llvm-project/commit/dfcf69770bc522b9e411c66454934a37c1f35332
1844        def_bool ((CC_IS_GCC && $(cc-option, -fcf-protection=branch -mindirect-branch-register)) || \
1845                  (CC_IS_CLANG && CLANG_VERSION >= 140000)) && \
1846                  $(as-instr,endbr64)
1847
1848config X86_KERNEL_IBT
1849        prompt "Indirect Branch Tracking"
1850        bool
1851        depends on X86_64 && CC_HAS_IBT && HAVE_OBJTOOL
1852        # https://github.com/llvm/llvm-project/commit/9d7001eba9c4cb311e03cd8cdc231f9e579f2d0f
1853        depends on !LD_IS_LLD || LLD_VERSION >= 140000
1854        select OBJTOOL
1855        help
1856          Build the kernel with support for Indirect Branch Tracking, a
1857          hardware support course-grain forward-edge Control Flow Integrity
1858          protection. It enforces that all indirect calls must land on
1859          an ENDBR instruction, as such, the compiler will instrument the
1860          code with them to make this happen.
1861
1862          In addition to building the kernel with IBT, seal all functions that
1863          are not indirect call targets, avoiding them ever becoming one.
1864
1865          This requires LTO like objtool runs and will slow down the build. It
1866          does significantly reduce the number of ENDBR instructions in the
1867          kernel image.
1868
1869config X86_INTEL_MEMORY_PROTECTION_KEYS
1870        prompt "Memory Protection Keys"
1871        def_bool y
1872        # Note: only available in 64-bit mode
1873        depends on X86_64 && (CPU_SUP_INTEL || CPU_SUP_AMD)
1874        select ARCH_USES_HIGH_VMA_FLAGS
1875        select ARCH_HAS_PKEYS
1876        help
1877          Memory Protection Keys provides a mechanism for enforcing
1878          page-based protections, but without requiring modification of the
1879          page tables when an application changes protection domains.
1880
1881          For details, see Documentation/core-api/protection-keys.rst
1882
1883          If unsure, say y.
1884
1885choice
1886        prompt "TSX enable mode"
1887        depends on CPU_SUP_INTEL
1888        default X86_INTEL_TSX_MODE_OFF
1889        help
1890          Intel's TSX (Transactional Synchronization Extensions) feature
1891          allows to optimize locking protocols through lock elision which
1892          can lead to a noticeable performance boost.
1893
1894          On the other hand it has been shown that TSX can be exploited
1895          to form side channel attacks (e.g. TAA) and chances are there
1896          will be more of those attacks discovered in the future.
1897
1898          Therefore TSX is not enabled by default (aka tsx=off). An admin
1899          might override this decision by tsx=on the command line parameter.
1900          Even with TSX enabled, the kernel will attempt to enable the best
1901          possible TAA mitigation setting depending on the microcode available
1902          for the particular machine.
1903
1904          This option allows to set the default tsx mode between tsx=on, =off
1905          and =auto. See Documentation/admin-guide/kernel-parameters.txt for more
1906          details.
1907
1908          Say off if not sure, auto if TSX is in use but it should be used on safe
1909          platforms or on if TSX is in use and the security aspect of tsx is not
1910          relevant.
1911
1912config X86_INTEL_TSX_MODE_OFF
1913        bool "off"
1914        help
1915          TSX is disabled if possible - equals to tsx=off command line parameter.
1916
1917config X86_INTEL_TSX_MODE_ON
1918        bool "on"
1919        help
1920          TSX is always enabled on TSX capable HW - equals the tsx=on command
1921          line parameter.
1922
1923config X86_INTEL_TSX_MODE_AUTO
1924        bool "auto"
1925        help
1926          TSX is enabled on TSX capable HW that is believed to be safe against
1927          side channel attacks- equals the tsx=auto command line parameter.
1928endchoice
1929
1930config X86_SGX
1931        bool "Software Guard eXtensions (SGX)"
1932        depends on X86_64 && CPU_SUP_INTEL
1933        depends on CRYPTO=y
1934        depends on CRYPTO_SHA256=y
1935        select SRCU
1936        select MMU_NOTIFIER
1937        select NUMA_KEEP_MEMINFO if NUMA
1938        select XARRAY_MULTI
1939        help
1940          Intel(R) Software Guard eXtensions (SGX) is a set of CPU instructions
1941          that can be used by applications to set aside private regions of code
1942          and data, referred to as enclaves. An enclave's private memory can
1943          only be accessed by code running within the enclave. Accesses from
1944          outside the enclave, including other enclaves, are disallowed by
1945          hardware.
1946
1947          If unsure, say N.
1948
1949config EFI
1950        bool "EFI runtime service support"
1951        depends on ACPI
1952        select UCS2_STRING
1953        select EFI_RUNTIME_WRAPPERS
1954        select ARCH_USE_MEMREMAP_PROT
1955        help
1956          This enables the kernel to use EFI runtime services that are
1957          available (such as the EFI variable services).
1958
1959          This option is only useful on systems that have EFI firmware.
1960          In addition, you should use the latest ELILO loader available
1961          at <http://elilo.sourceforge.net> in order to take advantage
1962          of EFI runtime services. However, even with this option, the
1963          resultant kernel should continue to boot on existing non-EFI
1964          platforms.
1965
1966config EFI_STUB
1967        bool "EFI stub support"
1968        depends on EFI
1969        depends on $(cc-option,-mabi=ms) || X86_32
1970        select RELOCATABLE
1971        help
1972          This kernel feature allows a bzImage to be loaded directly
1973          by EFI firmware without the use of a bootloader.
1974
1975          See Documentation/admin-guide/efi-stub.rst for more information.
1976
1977config EFI_MIXED
1978        bool "EFI mixed-mode support"
1979        depends on EFI_STUB && X86_64
1980        help
1981          Enabling this feature allows a 64-bit kernel to be booted
1982          on a 32-bit firmware, provided that your CPU supports 64-bit
1983          mode.
1984
1985          Note that it is not possible to boot a mixed-mode enabled
1986          kernel via the EFI boot stub - a bootloader that supports
1987          the EFI handover protocol must be used.
1988
1989          If unsure, say N.
1990
1991source "kernel/Kconfig.hz"
1992
1993config KEXEC
1994        bool "kexec system call"
1995        select KEXEC_CORE
1996        help
1997          kexec is a system call that implements the ability to shutdown your
1998          current kernel, and to start another kernel.  It is like a reboot
1999          but it is independent of the system firmware.   And like a reboot
2000          you can start any kernel with it, not just Linux.
2001
2002          The name comes from the similarity to the exec system call.
2003
2004          It is an ongoing process to be certain the hardware in a machine
2005          is properly shutdown, so do not be surprised if this code does not
2006          initially work for you.  As of this writing the exact hardware
2007          interface is strongly in flux, so no good recommendation can be
2008          made.
2009
2010config KEXEC_FILE
2011        bool "kexec file based system call"
2012        select KEXEC_CORE
2013        select BUILD_BIN2C
2014        depends on X86_64
2015        depends on CRYPTO=y
2016        depends on CRYPTO_SHA256=y
2017        help
2018          This is new version of kexec system call. This system call is
2019          file based and takes file descriptors as system call argument
2020          for kernel and initramfs as opposed to list of segments as
2021          accepted by previous system call.
2022
2023config ARCH_HAS_KEXEC_PURGATORY
2024        def_bool KEXEC_FILE
2025
2026config KEXEC_SIG
2027        bool "Verify kernel signature during kexec_file_load() syscall"
2028        depends on KEXEC_FILE
2029        help
2030
2031          This option makes the kexec_file_load() syscall check for a valid
2032          signature of the kernel image.  The image can still be loaded without
2033          a valid signature unless you also enable KEXEC_SIG_FORCE, though if
2034          there's a signature that we can check, then it must be valid.
2035
2036          In addition to this option, you need to enable signature
2037          verification for the corresponding kernel image type being
2038          loaded in order for this to work.
2039
2040config KEXEC_SIG_FORCE
2041        bool "Require a valid signature in kexec_file_load() syscall"
2042        depends on KEXEC_SIG
2043        help
2044          This option makes kernel signature verification mandatory for
2045          the kexec_file_load() syscall.
2046
2047config KEXEC_BZIMAGE_VERIFY_SIG
2048        bool "Enable bzImage signature verification support"
2049        depends on KEXEC_SIG
2050        depends on SIGNED_PE_FILE_VERIFICATION
2051        select SYSTEM_TRUSTED_KEYRING
2052        help
2053          Enable bzImage signature verification support.
2054
2055config CRASH_DUMP
2056        bool "kernel crash dumps"
2057        depends on X86_64 || (X86_32 && HIGHMEM)
2058        help
2059          Generate crash dump after being started by kexec.
2060          This should be normally only set in special crash dump kernels
2061          which are loaded in the main kernel with kexec-tools into
2062          a specially reserved region and then later executed after
2063          a crash by kdump/kexec. The crash dump kernel must be compiled
2064          to a memory address not used by the main kernel or BIOS using
2065          PHYSICAL_START, or it must be built as a relocatable image
2066          (CONFIG_RELOCATABLE=y).
2067          For more details see Documentation/admin-guide/kdump/kdump.rst
2068
2069config KEXEC_JUMP
2070        bool "kexec jump"
2071        depends on KEXEC && HIBERNATION
2072        help
2073          Jump between original kernel and kexeced kernel and invoke
2074          code in physical address mode via KEXEC
2075
2076config PHYSICAL_START
2077        hex "Physical address where the kernel is loaded" if (EXPERT || CRASH_DUMP)
2078        default "0x1000000"
2079        help
2080          This gives the physical address where the kernel is loaded.
2081
2082          If kernel is a not relocatable (CONFIG_RELOCATABLE=n) then
2083          bzImage will decompress itself to above physical address and
2084          run from there. Otherwise, bzImage will run from the address where
2085          it has been loaded by the boot loader and will ignore above physical
2086          address.
2087
2088          In normal kdump cases one does not have to set/change this option
2089          as now bzImage can be compiled as a completely relocatable image
2090          (CONFIG_RELOCATABLE=y) and be used to load and run from a different
2091          address. This option is mainly useful for the folks who don't want
2092          to use a bzImage for capturing the crash dump and want to use a
2093          vmlinux instead. vmlinux is not relocatable hence a kernel needs
2094          to be specifically compiled to run from a specific memory area
2095          (normally a reserved region) and this option comes handy.
2096
2097          So if you are using bzImage for capturing the crash dump,
2098          leave the value here unchanged to 0x1000000 and set
2099          CONFIG_RELOCATABLE=y.  Otherwise if you plan to use vmlinux
2100          for capturing the crash dump change this value to start of
2101          the reserved region.  In other words, it can be set based on
2102          the "X" value as specified in the "crashkernel=YM@XM"
2103          command line boot parameter passed to the panic-ed
2104          kernel. Please take a look at Documentation/admin-guide/kdump/kdump.rst
2105          for more details about crash dumps.
2106
2107          Usage of bzImage for capturing the crash dump is recommended as
2108          one does not have to build two kernels. Same kernel can be used
2109          as production kernel and capture kernel. Above option should have
2110          gone away after relocatable bzImage support is introduced. But it
2111          is present because there are users out there who continue to use
2112          vmlinux for dump capture. This option should go away down the
2113          line.
2114
2115          Don't change this unless you know what you are doing.
2116
2117config RELOCATABLE
2118        bool "Build a relocatable kernel"
2119        default y
2120        help
2121          This builds a kernel image that retains relocation information
2122          so it can be loaded someplace besides the default 1MB.
2123          The relocations tend to make the kernel binary about 10% larger,
2124          but are discarded at runtime.
2125
2126          One use is for the kexec on panic case where the recovery kernel
2127          must live at a different physical address than the primary
2128          kernel.
2129
2130          Note: If CONFIG_RELOCATABLE=y, then the kernel runs from the address
2131          it has been loaded at and the compile time physical address
2132          (CONFIG_PHYSICAL_START) is used as the minimum location.
2133
2134config RANDOMIZE_BASE
2135        bool "Randomize the address of the kernel image (KASLR)"
2136        depends on RELOCATABLE
2137        default y
2138        help
2139          In support of Kernel Address Space Layout Randomization (KASLR),
2140          this randomizes the physical address at which the kernel image
2141          is decompressed and the virtual address where the kernel
2142          image is mapped, as a security feature that deters exploit
2143          attempts relying on knowledge of the location of kernel
2144          code internals.
2145
2146          On 64-bit, the kernel physical and virtual addresses are
2147          randomized separately. The physical address will be anywhere
2148          between 16MB and the top of physical memory (up to 64TB). The
2149          virtual address will be randomized from 16MB up to 1GB (9 bits
2150          of entropy). Note that this also reduces the memory space
2151          available to kernel modules from 1.5GB to 1GB.
2152
2153          On 32-bit, the kernel physical and virtual addresses are
2154          randomized together. They will be randomized from 16MB up to
2155          512MB (8 bits of entropy).
2156
2157          Entropy is generated using the RDRAND instruction if it is
2158          supported. If RDTSC is supported, its value is mixed into
2159          the entropy pool as well. If neither RDRAND nor RDTSC are
2160          supported, then entropy is read from the i8254 timer. The
2161          usable entropy is limited by the kernel being built using
2162          2GB addressing, and that PHYSICAL_ALIGN must be at a
2163          minimum of 2MB. As a result, only 10 bits of entropy are
2164          theoretically possible, but the implementations are further
2165          limited due to memory layouts.
2166
2167          If unsure, say Y.
2168
2169# Relocation on x86 needs some additional build support
2170config X86_NEED_RELOCS
2171        def_bool y
2172        depends on RANDOMIZE_BASE || (X86_32 && RELOCATABLE)
2173
2174config PHYSICAL_ALIGN
2175        hex "Alignment value to which kernel should be aligned"
2176        default "0x200000"
2177        range 0x2000 0x1000000 if X86_32
2178        range 0x200000 0x1000000 if X86_64
2179        help
2180          This value puts the alignment restrictions on physical address
2181          where kernel is loaded and run from. Kernel is compiled for an
2182          address which meets above alignment restriction.
2183
2184          If bootloader loads the kernel at a non-aligned address and
2185          CONFIG_RELOCATABLE is set, kernel will move itself to nearest
2186          address aligned to above value and run from there.
2187
2188          If bootloader loads the kernel at a non-aligned address and
2189          CONFIG_RELOCATABLE is not set, kernel will ignore the run time
2190          load address and decompress itself to the address it has been
2191          compiled for and run from there. The address for which kernel is
2192          compiled already meets above alignment restrictions. Hence the
2193          end result is that kernel runs from a physical address meeting
2194          above alignment restrictions.
2195
2196          On 32-bit this value must be a multiple of 0x2000. On 64-bit
2197          this value must be a multiple of 0x200000.
2198
2199          Don't change this unless you know what you are doing.
2200
2201config DYNAMIC_MEMORY_LAYOUT
2202        bool
2203        help
2204          This option makes base addresses of vmalloc and vmemmap as well as
2205          __PAGE_OFFSET movable during boot.
2206
2207config RANDOMIZE_MEMORY
2208        bool "Randomize the kernel memory sections"
2209        depends on X86_64
2210        depends on RANDOMIZE_BASE
2211        select DYNAMIC_MEMORY_LAYOUT
2212        default RANDOMIZE_BASE
2213        help
2214          Randomizes the base virtual address of kernel memory sections
2215          (physical memory mapping, vmalloc & vmemmap). This security feature
2216          makes exploits relying on predictable memory locations less reliable.
2217
2218          The order of allocations remains unchanged. Entropy is generated in
2219          the same way as RANDOMIZE_BASE. Current implementation in the optimal
2220          configuration have in average 30,000 different possible virtual
2221          addresses for each memory section.
2222
2223          If unsure, say Y.
2224
2225config RANDOMIZE_MEMORY_PHYSICAL_PADDING
2226        hex "Physical memory mapping padding" if EXPERT
2227        depends on RANDOMIZE_MEMORY
2228        default "0xa" if MEMORY_HOTPLUG
2229        default "0x0"
2230        range 0x1 0x40 if MEMORY_HOTPLUG
2231        range 0x0 0x40
2232        help
2233          Define the padding in terabytes added to the existing physical
2234          memory size during kernel memory randomization. It is useful
2235          for memory hotplug support but reduces the entropy available for
2236          address randomization.
2237
2238          If unsure, leave at the default value.
2239
2240config HOTPLUG_CPU
2241        def_bool y
2242        depends on SMP
2243
2244config BOOTPARAM_HOTPLUG_CPU0
2245        bool "Set default setting of cpu0_hotpluggable"
2246        depends on HOTPLUG_CPU
2247        help
2248          Set whether default state of cpu0_hotpluggable is on or off.
2249
2250          Say Y here to enable CPU0 hotplug by default. If this switch
2251          is turned on, there is no need to give cpu0_hotplug kernel
2252          parameter and the CPU0 hotplug feature is enabled by default.
2253
2254          Please note: there are two known CPU0 dependencies if you want
2255          to enable the CPU0 hotplug feature either by this switch or by
2256          cpu0_hotplug kernel parameter.
2257
2258          First, resume from hibernate or suspend always starts from CPU0.
2259          So hibernate and suspend are prevented if CPU0 is offline.
2260
2261          Second dependency is PIC interrupts always go to CPU0. CPU0 can not
2262          offline if any interrupt can not migrate out of CPU0. There may
2263          be other CPU0 dependencies.
2264
2265          Please make sure the dependencies are under your control before
2266          you enable this feature.
2267
2268          Say N if you don't want to enable CPU0 hotplug feature by default.
2269          You still can enable the CPU0 hotplug feature at boot by kernel
2270          parameter cpu0_hotplug.
2271
2272config DEBUG_HOTPLUG_CPU0
2273        def_bool n
2274        prompt "Debug CPU0 hotplug"
2275        depends on HOTPLUG_CPU
2276        help
2277          Enabling this option offlines CPU0 (if CPU0 can be offlined) as
2278          soon as possible and boots up userspace with CPU0 offlined. User
2279          can online CPU0 back after boot time.
2280
2281          To debug CPU0 hotplug, you need to enable CPU0 offline/online
2282          feature by either turning on CONFIG_BOOTPARAM_HOTPLUG_CPU0 during
2283          compilation or giving cpu0_hotplug kernel parameter at boot.
2284
2285          If unsure, say N.
2286
2287config COMPAT_VDSO
2288        def_bool n
2289        prompt "Disable the 32-bit vDSO (needed for glibc 2.3.3)"
2290        depends on COMPAT_32
2291        help
2292          Certain buggy versions of glibc will crash if they are
2293          presented with a 32-bit vDSO that is not mapped at the address
2294          indicated in its segment table.
2295
2296          The bug was introduced by f866314b89d56845f55e6f365e18b31ec978ec3a
2297          and fixed by 3b3ddb4f7db98ec9e912ccdf54d35df4aa30e04a and
2298          49ad572a70b8aeb91e57483a11dd1b77e31c4468.  Glibc 2.3.3 is
2299          the only released version with the bug, but OpenSUSE 9
2300          contains a buggy "glibc 2.3.2".
2301
2302          The symptom of the bug is that everything crashes on startup, saying:
2303          dl_main: Assertion `(void *) ph->p_vaddr == _rtld_local._dl_sysinfo_dso' failed!
2304
2305          Saying Y here changes the default value of the vdso32 boot
2306          option from 1 to 0, which turns off the 32-bit vDSO entirely.
2307          This works around the glibc bug but hurts performance.
2308
2309          If unsure, say N: if you are compiling your own kernel, you
2310          are unlikely to be using a buggy version of glibc.
2311
2312choice
2313        prompt "vsyscall table for legacy applications"
2314        depends on X86_64
2315        default LEGACY_VSYSCALL_XONLY
2316        help
2317          Legacy user code that does not know how to find the vDSO expects
2318          to be able to issue three syscalls by calling fixed addresses in
2319          kernel space. Since this location is not randomized with ASLR,
2320          it can be used to assist security vulnerability exploitation.
2321
2322          This setting can be changed at boot time via the kernel command
2323          line parameter vsyscall=[emulate|xonly|none].  Emulate mode
2324          is deprecated and can only be enabled using the kernel command
2325          line.
2326
2327          On a system with recent enough glibc (2.14 or newer) and no
2328          static binaries, you can say None without a performance penalty
2329          to improve security.
2330
2331          If unsure, select "Emulate execution only".
2332
2333        config LEGACY_VSYSCALL_XONLY
2334                bool "Emulate execution only"
2335                help
2336                  The kernel traps and emulates calls into the fixed vsyscall
2337                  address mapping and does not allow reads.  This
2338                  configuration is recommended when userspace might use the
2339                  legacy vsyscall area but support for legacy binary
2340                  instrumentation of legacy code is not needed.  It mitigates
2341                  certain uses of the vsyscall area as an ASLR-bypassing
2342                  buffer.
2343
2344        config LEGACY_VSYSCALL_NONE
2345                bool "None"
2346                help
2347                  There will be no vsyscall mapping at all. This will
2348                  eliminate any risk of ASLR bypass due to the vsyscall
2349                  fixed address mapping. Attempts to use the vsyscalls
2350                  will be reported to dmesg, so that either old or
2351                  malicious userspace programs can be identified.
2352
2353endchoice
2354
2355config CMDLINE_BOOL
2356        bool "Built-in kernel command line"
2357        help
2358          Allow for specifying boot arguments to the kernel at
2359          build time.  On some systems (e.g. embedded ones), it is
2360          necessary or convenient to provide some or all of the
2361          kernel boot arguments with the kernel itself (that is,
2362          to not rely on the boot loader to provide them.)
2363
2364          To compile command line arguments into the kernel,
2365          set this option to 'Y', then fill in the
2366          boot arguments in CONFIG_CMDLINE.
2367
2368          Systems with fully functional boot loaders (i.e. non-embedded)
2369          should leave this option set to 'N'.
2370
2371config CMDLINE
2372        string "Built-in kernel command string"
2373        depends on CMDLINE_BOOL
2374        default ""
2375        help
2376          Enter arguments here that should be compiled into the kernel
2377          image and used at boot time.  If the boot loader provides a
2378          command line at boot time, it is appended to this string to
2379          form the full kernel command line, when the system boots.
2380
2381          However, you can use the CONFIG_CMDLINE_OVERRIDE option to
2382          change this behavior.
2383
2384          In most cases, the command line (whether built-in or provided
2385          by the boot loader) should specify the device for the root
2386          file system.
2387
2388config CMDLINE_OVERRIDE
2389        bool "Built-in command line overrides boot loader arguments"
2390        depends on CMDLINE_BOOL && CMDLINE != ""
2391        help
2392          Set this option to 'Y' to have the kernel ignore the boot loader
2393          command line, and use ONLY the built-in command line.
2394
2395          This is used to work around broken boot loaders.  This should
2396          be set to 'N' under normal conditions.
2397
2398config MODIFY_LDT_SYSCALL
2399        bool "Enable the LDT (local descriptor table)" if EXPERT
2400        default y
2401        help
2402          Linux can allow user programs to install a per-process x86
2403          Local Descriptor Table (LDT) using the modify_ldt(2) system
2404          call.  This is required to run 16-bit or segmented code such as
2405          DOSEMU or some Wine programs.  It is also used by some very old
2406          threading libraries.
2407
2408          Enabling this feature adds a small amount of overhead to
2409          context switches and increases the low-level kernel attack
2410          surface.  Disabling it removes the modify_ldt(2) system call.
2411
2412          Saying 'N' here may make sense for embedded or server kernels.
2413
2414config STRICT_SIGALTSTACK_SIZE
2415        bool "Enforce strict size checking for sigaltstack"
2416        depends on DYNAMIC_SIGFRAME
2417        help
2418          For historical reasons MINSIGSTKSZ is a constant which became
2419          already too small with AVX512 support. Add a mechanism to
2420          enforce strict checking of the sigaltstack size against the
2421          real size of the FPU frame. This option enables the check
2422          by default. It can also be controlled via the kernel command
2423          line option 'strict_sas_size' independent of this config
2424          switch. Enabling it might break existing applications which
2425          allocate a too small sigaltstack but 'work' because they
2426          never get a signal delivered.
2427
2428          Say 'N' unless you want to really enforce this check.
2429
2430source "kernel/livepatch/Kconfig"
2431
2432endmenu
2433
2434config CC_HAS_SLS
2435        def_bool $(cc-option,-mharden-sls=all)
2436
2437config CC_HAS_RETURN_THUNK
2438        def_bool $(cc-option,-mfunction-return=thunk-extern)
2439
2440menuconfig SPECULATION_MITIGATIONS
2441        bool "Mitigations for speculative execution vulnerabilities"
2442        default y
2443        help
2444          Say Y here to enable options which enable mitigations for
2445          speculative execution hardware vulnerabilities.
2446
2447          If you say N, all mitigations will be disabled. You really
2448          should know what you are doing to say so.
2449
2450if SPECULATION_MITIGATIONS
2451
2452config PAGE_TABLE_ISOLATION
2453        bool "Remove the kernel mapping in user mode"
2454        default y
2455        depends on (X86_64 || X86_PAE)
2456        help
2457          This feature reduces the number of hardware side channels by
2458          ensuring that the majority of kernel addresses are not mapped
2459          into userspace.
2460
2461          See Documentation/x86/pti.rst for more details.
2462
2463config RETPOLINE
2464        bool "Avoid speculative indirect branches in kernel"
2465        select OBJTOOL if HAVE_OBJTOOL
2466        default y
2467        help
2468          Compile kernel with the retpoline compiler options to guard against
2469          kernel-to-user data leaks by avoiding speculative indirect
2470          branches. Requires a compiler with -mindirect-branch=thunk-extern
2471          support for full protection. The kernel may run slower.
2472
2473config RETHUNK
2474        bool "Enable return-thunks"
2475        depends on RETPOLINE && CC_HAS_RETURN_THUNK
2476        select OBJTOOL if HAVE_OBJTOOL
2477        default y if X86_64
2478        help
2479          Compile the kernel with the return-thunks compiler option to guard
2480          against kernel-to-user data leaks by avoiding return speculation.
2481          Requires a compiler with -mfunction-return=thunk-extern
2482          support for full protection. The kernel may run slower.
2483
2484config CPU_UNRET_ENTRY
2485        bool "Enable UNRET on kernel entry"
2486        depends on CPU_SUP_AMD && RETHUNK && X86_64
2487        default y
2488        help
2489          Compile the kernel with support for the retbleed=unret mitigation.
2490
2491config CPU_IBPB_ENTRY
2492        bool "Enable IBPB on kernel entry"
2493        depends on CPU_SUP_AMD && X86_64
2494        default y
2495        help
2496          Compile the kernel with support for the retbleed=ibpb mitigation.
2497
2498config CPU_IBRS_ENTRY
2499        bool "Enable IBRS on kernel entry"
2500        depends on CPU_SUP_INTEL && X86_64
2501        default y
2502        help
2503          Compile the kernel with support for the spectre_v2=ibrs mitigation.
2504          This mitigates both spectre_v2 and retbleed at great cost to
2505          performance.
2506
2507config SLS
2508        bool "Mitigate Straight-Line-Speculation"
2509        depends on CC_HAS_SLS && X86_64
2510        select OBJTOOL if HAVE_OBJTOOL
2511        default n
2512        help
2513          Compile the kernel with straight-line-speculation options to guard
2514          against straight line speculation. The kernel image might be slightly
2515          larger.
2516
2517endif
2518
2519config ARCH_HAS_ADD_PAGES
2520        def_bool y
2521        depends on ARCH_ENABLE_MEMORY_HOTPLUG
2522
2523config ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE
2524        def_bool y
2525
2526menu "Power management and ACPI options"
2527
2528config ARCH_HIBERNATION_HEADER
2529        def_bool y
2530        depends on HIBERNATION
2531
2532source "kernel/power/Kconfig"
2533
2534source "drivers/acpi/Kconfig"
2535
2536config X86_APM_BOOT
2537        def_bool y
2538        depends on APM
2539
2540menuconfig APM
2541        tristate "APM (Advanced Power Management) BIOS support"
2542        depends on X86_32 && PM_SLEEP
2543        help
2544          APM is a BIOS specification for saving power using several different
2545          techniques. This is mostly useful for battery powered laptops with
2546          APM compliant BIOSes. If you say Y here, the system time will be
2547          reset after a RESUME operation, the /proc/apm device will provide
2548          battery status information, and user-space programs will receive
2549          notification of APM "events" (e.g. battery status change).
2550
2551          If you select "Y" here, you can disable actual use of the APM
2552          BIOS by passing the "apm=off" option to the kernel at boot time.
2553
2554          Note that the APM support is almost completely disabled for
2555          machines with more than one CPU.
2556
2557          In order to use APM, you will need supporting software. For location
2558          and more information, read <file:Documentation/power/apm-acpi.rst>
2559          and the Battery Powered Linux mini-HOWTO, available from
2560          <http://www.tldp.org/docs.html#howto>.
2561
2562          This driver does not spin down disk drives (see the hdparm(8)
2563          manpage ("man 8 hdparm") for that), and it doesn't turn off
2564          VESA-compliant "green" monitors.
2565
2566          This driver does not support the TI 4000M TravelMate and the ACER
2567          486/DX4/75 because they don't have compliant BIOSes. Many "green"
2568          desktop machines also don't have compliant BIOSes, and this driver
2569          may cause those machines to panic during the boot phase.
2570
2571          Generally, if you don't have a battery in your machine, there isn't
2572          much point in using this driver and you should say N. If you get
2573          random kernel OOPSes or reboots that don't seem to be related to
2574          anything, try disabling/enabling this option (or disabling/enabling
2575          APM in your BIOS).
2576
2577          Some other things you should try when experiencing seemingly random,
2578          "weird" problems:
2579
2580          1) make sure that you have enough swap space and that it is
2581          enabled.
2582          2) pass the "no-hlt" option to the kernel
2583          3) switch on floating point emulation in the kernel and pass
2584          the "no387" option to the kernel
2585          4) pass the "floppy=nodma" option to the kernel
2586          5) pass the "mem=4M" option to the kernel (thereby disabling
2587          all but the first 4 MB of RAM)
2588          6) make sure that the CPU is not over clocked.
2589          7) read the sig11 FAQ at <http://www.bitwizard.nl/sig11/>
2590          8) disable the cache from your BIOS settings
2591          9) install a fan for the video card or exchange video RAM
2592          10) install a better fan for the CPU
2593          11) exchange RAM chips
2594          12) exchange the motherboard.
2595
2596          To compile this driver as a module, choose M here: the
2597          module will be called apm.
2598
2599if APM
2600
2601config APM_IGNORE_USER_SUSPEND
2602        bool "Ignore USER SUSPEND"
2603        help
2604          This option will ignore USER SUSPEND requests. On machines with a
2605          compliant APM BIOS, you want to say N. However, on the NEC Versa M
2606          series notebooks, it is necessary to say Y because of a BIOS bug.
2607
2608config APM_DO_ENABLE
2609        bool "Enable PM at boot time"
2610        help
2611          Enable APM features at boot time. From page 36 of the APM BIOS
2612          specification: "When disabled, the APM BIOS does not automatically
2613          power manage devices, enter the Standby State, enter the Suspend
2614          State, or take power saving steps in response to CPU Idle calls."
2615          This driver will make CPU Idle calls when Linux is idle (unless this
2616          feature is turned off -- see "Do CPU IDLE calls", below). This
2617          should always save battery power, but more complicated APM features
2618          will be dependent on your BIOS implementation. You may need to turn
2619          this option off if your computer hangs at boot time when using APM
2620          support, or if it beeps continuously instead of suspending. Turn
2621          this off if you have a NEC UltraLite Versa 33/C or a Toshiba
2622          T400CDT. This is off by default since most machines do fine without
2623          this feature.
2624
2625config APM_CPU_IDLE
2626        depends on CPU_IDLE
2627        bool "Make CPU Idle calls when idle"
2628        help
2629          Enable calls to APM CPU Idle/CPU Busy inside the kernel's idle loop.
2630          On some machines, this can activate improved power savings, such as
2631          a slowed CPU clock rate, when the machine is idle. These idle calls
2632          are made after the idle loop has run for some length of time (e.g.,
2633          333 mS). On some machines, this will cause a hang at boot time or
2634          whenever the CPU becomes idle. (On machines with more than one CPU,
2635          this option does nothing.)
2636
2637config APM_DISPLAY_BLANK
2638        bool "Enable console blanking using APM"
2639        help
2640          Enable console blanking using the APM. Some laptops can use this to
2641          turn off the LCD backlight when the screen blanker of the Linux
2642          virtual console blanks the screen. Note that this is only used by
2643          the virtual console screen blanker, and won't turn off the backlight
2644          when using the X Window system. This also doesn't have anything to
2645          do with your VESA-compliant power-saving monitor. Further, this
2646          option doesn't work for all laptops -- it might not turn off your
2647          backlight at all, or it might print a lot of errors to the console,
2648          especially if you are using gpm.
2649
2650config APM_ALLOW_INTS
2651        bool "Allow interrupts during APM BIOS calls"
2652        help
2653          Normally we disable external interrupts while we are making calls to
2654          the APM BIOS as a measure to lessen the effects of a badly behaving
2655          BIOS implementation.  The BIOS should reenable interrupts if it
2656          needs to.  Unfortunately, some BIOSes do not -- especially those in
2657          many of the newer IBM Thinkpads.  If you experience hangs when you
2658          suspend, try setting this to Y.  Otherwise, say N.
2659
2660endif # APM
2661
2662source "drivers/cpufreq/Kconfig"
2663
2664source "drivers/cpuidle/Kconfig"
2665
2666source "drivers/idle/Kconfig"
2667
2668endmenu
2669
2670menu "Bus options (PCI etc.)"
2671
2672choice
2673        prompt "PCI access mode"
2674        depends on X86_32 && PCI
2675        default PCI_GOANY
2676        help
2677          On PCI systems, the BIOS can be used to detect the PCI devices and
2678          determine their configuration. However, some old PCI motherboards
2679          have BIOS bugs and may crash if this is done. Also, some embedded
2680          PCI-based systems don't have any BIOS at all. Linux can also try to
2681          detect the PCI hardware directly without using the BIOS.
2682
2683          With this option, you can specify how Linux should detect the
2684          PCI devices. If you choose "BIOS", the BIOS will be used,
2685          if you choose "Direct", the BIOS won't be used, and if you
2686          choose "MMConfig", then PCI Express MMCONFIG will be used.
2687          If you choose "Any", the kernel will try MMCONFIG, then the
2688          direct access method and falls back to the BIOS if that doesn't
2689          work. If unsure, go with the default, which is "Any".
2690
2691config PCI_GOBIOS
2692        bool "BIOS"
2693
2694config PCI_GOMMCONFIG
2695        bool "MMConfig"
2696
2697config PCI_GODIRECT
2698        bool "Direct"
2699
2700config PCI_GOOLPC
2701        bool "OLPC XO-1"
2702        depends on OLPC
2703
2704config PCI_GOANY
2705        bool "Any"
2706
2707endchoice
2708
2709config PCI_BIOS
2710        def_bool y
2711        depends on X86_32 && PCI && (PCI_GOBIOS || PCI_GOANY)
2712
2713# x86-64 doesn't support PCI BIOS access from long mode so always go direct.
2714config PCI_DIRECT
2715        def_bool y
2716        depends on PCI && (X86_64 || (PCI_GODIRECT || PCI_GOANY || PCI_GOOLPC || PCI_GOMMCONFIG))
2717
2718config PCI_MMCONFIG
2719        bool "Support mmconfig PCI config space access" if X86_64
2720        default y
2721        depends on PCI && (ACPI || JAILHOUSE_GUEST)
2722        depends on X86_64 || (PCI_GOANY || PCI_GOMMCONFIG)
2723
2724config PCI_OLPC
2725        def_bool y
2726        depends on PCI && OLPC && (PCI_GOOLPC || PCI_GOANY)
2727
2728config PCI_XEN
2729        def_bool y
2730        depends on PCI && XEN
2731
2732config MMCONF_FAM10H
2733        def_bool y
2734        depends on X86_64 && PCI_MMCONFIG && ACPI
2735
2736config PCI_CNB20LE_QUIRK
2737        bool "Read CNB20LE Host Bridge Windows" if EXPERT
2738        depends on PCI
2739        help
2740          Read the PCI windows out of the CNB20LE host bridge. This allows
2741          PCI hotplug to work on systems with the CNB20LE chipset which do
2742          not have ACPI.
2743
2744          There's no public spec for this chipset, and this functionality
2745          is known to be incomplete.
2746
2747          You should say N unless you know you need this.
2748
2749config ISA_BUS
2750        bool "ISA bus support on modern systems" if EXPERT
2751        help
2752          Expose ISA bus device drivers and options available for selection and
2753          configuration. Enable this option if your target machine has an ISA
2754          bus. ISA is an older system, displaced by PCI and newer bus
2755          architectures -- if your target machine is modern, it probably does
2756          not have an ISA bus.
2757
2758          If unsure, say N.
2759
2760# x86_64 have no ISA slots, but can have ISA-style DMA.
2761config ISA_DMA_API
2762        bool "ISA-style DMA support" if (X86_64 && EXPERT)
2763        default y
2764        help
2765          Enables ISA-style DMA support for devices requiring such controllers.
2766          If unsure, say Y.
2767
2768if X86_32
2769
2770config ISA
2771        bool "ISA support"
2772        help
2773          Find out whether you have ISA slots on your motherboard.  ISA is the
2774          name of a bus system, i.e. the way the CPU talks to the other stuff
2775          inside your box.  Other bus systems are PCI, EISA, MicroChannel
2776          (MCA) or VESA.  ISA is an older system, now being displaced by PCI;
2777          newer boards don't support it.  If you have ISA, say Y, otherwise N.
2778
2779config SCx200
2780        tristate "NatSemi SCx200 support"
2781        help
2782          This provides basic support for National Semiconductor's
2783          (now AMD's) Geode processors.  The driver probes for the
2784          PCI-IDs of several on-chip devices, so its a good dependency
2785          for other scx200_* drivers.
2786
2787          If compiled as a module, the driver is named scx200.
2788
2789config SCx200HR_TIMER
2790        tristate "NatSemi SCx200 27MHz High-Resolution Timer Support"
2791        depends on SCx200
2792        default y
2793        help
2794          This driver provides a clocksource built upon the on-chip
2795          27MHz high-resolution timer.  Its also a workaround for
2796          NSC Geode SC-1100's buggy TSC, which loses time when the
2797          processor goes idle (as is done by the scheduler).  The
2798          other workaround is idle=poll boot option.
2799
2800config OLPC
2801        bool "One Laptop Per Child support"
2802        depends on !X86_PAE
2803        select GPIOLIB
2804        select OF
2805        select OF_PROMTREE
2806        select IRQ_DOMAIN
2807        select OLPC_EC
2808        help
2809          Add support for detecting the unique features of the OLPC
2810          XO hardware.
2811
2812config OLPC_XO1_PM
2813        bool "OLPC XO-1 Power Management"
2814        depends on OLPC && MFD_CS5535=y && PM_SLEEP
2815        help
2816          Add support for poweroff and suspend of the OLPC XO-1 laptop.
2817
2818config OLPC_XO1_RTC
2819        bool "OLPC XO-1 Real Time Clock"
2820        depends on OLPC_XO1_PM && RTC_DRV_CMOS
2821        help
2822          Add support for the XO-1 real time clock, which can be used as a
2823          programmable wakeup source.
2824
2825config OLPC_XO1_SCI
2826        bool "OLPC XO-1 SCI extras"
2827        depends on OLPC && OLPC_XO1_PM && GPIO_CS5535=y
2828        depends on INPUT=y
2829        select POWER_SUPPLY
2830        help
2831          Add support for SCI-based features of the OLPC XO-1 laptop:
2832           - EC-driven system wakeups
2833           - Power button
2834           - Ebook switch
2835           - Lid switch
2836           - AC adapter status updates
2837           - Battery status updates
2838
2839config OLPC_XO15_SCI
2840        bool "OLPC XO-1.5 SCI extras"
2841        depends on OLPC && ACPI
2842        select POWER_SUPPLY
2843        help
2844          Add support for SCI-based features of the OLPC XO-1.5 laptop:
2845           - EC-driven system wakeups
2846           - AC adapter status updates
2847           - Battery status updates
2848
2849config ALIX
2850        bool "PCEngines ALIX System Support (LED setup)"
2851        select GPIOLIB
2852        help
2853          This option enables system support for the PCEngines ALIX.
2854          At present this just sets up LEDs for GPIO control on
2855          ALIX2/3/6 boards.  However, other system specific setup should
2856          get added here.
2857
2858          Note: You must still enable the drivers for GPIO and LED support
2859          (GPIO_CS5535 & LEDS_GPIO) to actually use the LEDs
2860
2861          Note: You have to set alix.force=1 for boards with Award BIOS.
2862
2863config NET5501
2864        bool "Soekris Engineering net5501 System Support (LEDS, GPIO, etc)"
2865        select GPIOLIB
2866        help
2867          This option enables system support for the Soekris Engineering net5501.
2868
2869config GEOS
2870        bool "Traverse Technologies GEOS System Support (LEDS, GPIO, etc)"
2871        select GPIOLIB
2872        depends on DMI
2873        help
2874          This option enables system support for the Traverse Technologies GEOS.
2875
2876config TS5500
2877        bool "Technologic Systems TS-5500 platform support"
2878        depends on MELAN
2879        select CHECK_SIGNATURE
2880        select NEW_LEDS
2881        select LEDS_CLASS
2882        help
2883          This option enables system support for the Technologic Systems TS-5500.
2884
2885endif # X86_32
2886
2887config AMD_NB
2888        def_bool y
2889        depends on CPU_SUP_AMD && PCI
2890
2891endmenu
2892
2893menu "Binary Emulations"
2894
2895config IA32_EMULATION
2896        bool "IA32 Emulation"
2897        depends on X86_64
2898        select ARCH_WANT_OLD_COMPAT_IPC
2899        select BINFMT_ELF
2900        select COMPAT_OLD_SIGACTION
2901        help
2902          Include code to run legacy 32-bit programs under a
2903          64-bit kernel. You should likely turn this on, unless you're
2904          100% sure that you don't have any 32-bit programs left.
2905
2906config X86_X32_ABI
2907        bool "x32 ABI for 64-bit mode"
2908        depends on X86_64
2909        # llvm-objcopy does not convert x86_64 .note.gnu.property or
2910        # compressed debug sections to x86_x32 properly:
2911        # https://github.com/ClangBuiltLinux/linux/issues/514
2912        # https://github.com/ClangBuiltLinux/linux/issues/1141
2913        depends on $(success,$(OBJCOPY) --version | head -n1 | grep -qv llvm)
2914        help
2915          Include code to run binaries for the x32 native 32-bit ABI
2916          for 64-bit processors.  An x32 process gets access to the
2917          full 64-bit register file and wide data path while leaving
2918          pointers at 32 bits for smaller memory footprint.
2919
2920config COMPAT_32
2921        def_bool y
2922        depends on IA32_EMULATION || X86_32
2923        select HAVE_UID16
2924        select OLD_SIGSUSPEND3
2925
2926config COMPAT
2927        def_bool y
2928        depends on IA32_EMULATION || X86_X32_ABI
2929
2930config COMPAT_FOR_U64_ALIGNMENT
2931        def_bool y
2932        depends on COMPAT
2933
2934endmenu
2935
2936config HAVE_ATOMIC_IOMAP
2937        def_bool y
2938        depends on X86_32
2939
2940source "arch/x86/kvm/Kconfig"
2941
2942source "arch/x86/Kconfig.assembler"
2943