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