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