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