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