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