arch/x86/Kconfig v5.13-rc1

64BIT

64-bit kernel" if "$(ARCH)" = "x86

Say yes to build a 64-bit kernel - formerly known as x86_64
Say no to build a 32-bit kernel - formerly known as i386

FORCE_DYNAMIC_FTRACE

We keep the static function tracing (!DYNAMIC_FTRACE) around
in order to test the non static function tracing in the
generic code, as other architectures still use it. But we
only need to keep it around for x86_64. No need to keep it
for x86_32. For x86_32, force DYNAMIC_FTRACE.

CC_HAS_SANE_STACKPROTECTOR

We have to make sure stack protector is unconditionally disabled if
the compiler produces broken code or if it does not let us control
the segment on 32-bit kernels.


Menu: Processor type and features

ZONE_DMA

DMA memory allocation support

DMA memory allocation support allows devices with less than 32-bit
addressing to allocate within the first 16MB of address space.
Disable if no such devices will be used.

If unsure, say Y.

SMP

Symmetric multi-processing support

This enables support for systems with more than one CPU. If you have
a system with only one CPU, say N. If you have a system with more
than one CPU, say Y.

If you say N here, the kernel will run on uni- and multiprocessor
machines, but will use only one CPU of a multiprocessor machine. If
you say Y here, the kernel will run on many, but not all,
uniprocessor machines. On a uniprocessor machine, the kernel
will run faster if you say N here.

Note that if you say Y here and choose architecture "586" or
"Pentium" under "Processor family", the kernel will not work on 486
architectures. Similarly, multiprocessor kernels for the "PPro"
architecture may not work on all Pentium based boards.

People using multiprocessor machines who say Y here should also say
Y to "Enhanced Real Time Clock Support", below. The "Advanced Power
Management" code will be disabled if you say Y here.

See also <file:Documentation/x86/i386/IO-APIC.rst>,
<file:Documentation/admin-guide/lockup-watchdogs.rst> and the SMP-HOWTO available at
<http://www.tldp.org/docs.html#howto>.

If you don't know what to do here, say N.

X86_FEATURE_NAMES

Processor feature human-readable names

This option compiles in a table of x86 feature bits and corresponding
names.  This is required to support /proc/cpuinfo and a few kernel
messages.  You can disable this to save space, at the expense of
making those few kernel messages show numeric feature bits instead.

If in doubt, say Y.

X86_X2APIC

Support x2apic

This enables x2apic support on CPUs that have this feature.

This allows 32-bit apic IDs (so it can support very large systems),
and accesses the local apic via MSRs not via mmio.

If you don't know what to do here, say N.

X86_MPPARSE

Enable MPS table

For old smp systems that do not have proper acpi support. Newer systems
(esp with 64bit cpus) with acpi support, MADT and DSDT will override it

RETPOLINE

Avoid speculative indirect branches in kernel

Compile kernel with the retpoline compiler options to guard against
kernel-to-user data leaks by avoiding speculative indirect
branches. Requires a compiler with -mindirect-branch=thunk-extern
support for full protection. The kernel may run slower.

X86_CPU_RESCTRL

x86 CPU resource control support

Enable x86 CPU resource control support.

Provide support for the allocation and monitoring of system resources
usage by the CPU.

Intel calls this Intel Resource Director Technology
(Intel(R) RDT). More information about RDT can be found in the
Intel x86 Architecture Software Developer Manual.

AMD calls this AMD Platform Quality of Service (AMD QoS).
More information about AMD QoS can be found in the AMD64 Technology
Platform Quality of Service Extensions manual.

Say N if unsure.

X86_BIGSMP

Support for big SMP systems with more than 8 CPUs

This option is needed for the systems that have more than 8 CPUs.

X86_EXTENDED_PLATFORM

Support for extended (non-PC) x86 platforms

If you disable this option then the kernel will only support
standard PC platforms. (which covers the vast majority of
systems out there.)

If you enable this option then you'll be able to select support
for the following (non-PC) 32 bit x86 platforms:
Goldfish (Android emulator)
AMD Elan
RDC R-321x SoC
SGI 320/540 (Visual Workstation)
STA2X11-based (e.g. Northville)
Moorestown MID devices

If you have one of these systems, or if you want to build a
generic distribution kernel, say Y here - otherwise say N.

X86_EXTENDED_PLATFORM

Support for extended (non-PC) x86 platforms

If you disable this option then the kernel will only support
standard PC platforms. (which covers the vast majority of
systems out there.)

If you enable this option then you'll be able to select support
for the following (non-PC) 64 bit x86 platforms:
Numascale NumaChip
ScaleMP vSMP
SGI Ultraviolet

If you have one of these systems, or if you want to build a
generic distribution kernel, say Y here - otherwise say N.

X86_NUMACHIP

Numascale NumaChip

Adds support for Numascale NumaChip large-SMP systems. Needed to
enable more than ~168 cores.
If you don't have one of these, you should say N here.

X86_VSMP

ScaleMP vSMP

Support for ScaleMP vSMP systems.  Say 'Y' here if this kernel is
supposed to run on these EM64T-based machines.  Only choose this option
if you have one of these machines.

X86_UV

SGI Ultraviolet

This option is needed in order to support SGI Ultraviolet systems.
If you don't have one of these, you should say N here.

X86_GOLDFISH

Goldfish (Virtual Platform)

Enable support for the Goldfish virtual platform used primarily
for Android development. Unless you are building for the Android
Goldfish emulator say N here.

X86_INTEL_CE

CE4100 TV platform

Select for the Intel CE media processor (CE4100) SOC.
This option compiles in support for the CE4100 SOC for settop
boxes and media devices.

X86_INTEL_MID

Intel MID platform support

Select to build a kernel capable of supporting Intel MID (Mobile
Internet Device) platform systems which do not have the PCI legacy
interfaces. If you are building for a PC class system say N here.

Intel MID platforms are based on an Intel processor and chipset which
consume less power than most of the x86 derivatives.

X86_INTEL_QUARK

Intel Quark platform support

Select to include support for Quark X1000 SoC.
Say Y here if you have a Quark based system such as the Arduino
compatible Intel Galileo.

X86_INTEL_LPSS

Intel Low Power Subsystem Support

Select to build support for Intel Low Power Subsystem such as
found on Intel Lynxpoint PCH. Selecting this option enables
things like clock tree (common clock framework) and pincontrol
which are needed by the LPSS peripheral drivers.

X86_AMD_PLATFORM_DEVICE

AMD ACPI2Platform devices support

Select to interpret AMD specific ACPI device to platform device
such as I2C, UART, GPIO found on AMD Carrizo and later chipsets.
I2C and UART depend on COMMON_CLK to set clock. GPIO driver is
implemented under PINCTRL subsystem.

IOSF_MBI

Intel SoC IOSF Sideband support for SoC platforms

This option enables sideband register access support for Intel SoC
platforms. On these platforms the IOSF sideband is used in lieu of
MSR's for some register accesses, mostly but not limited to thermal
and power. Drivers may query the availability of this device to
determine if they need the sideband in order to work on these
platforms. The sideband is available on the following SoC products.
This list is not meant to be exclusive.
- BayTrail
- Braswell
- Quark

You should say Y if you are running a kernel on one of these SoC's.

IOSF_MBI_DEBUG

Enable IOSF sideband access through debugfs

Select this option to expose the IOSF sideband access registers (MCR,
MDR, MCRX) through debugfs to write and read register information from
different units on the SoC. This is most useful for obtaining device
state information for debug and analysis. As this is a general access
mechanism, users of this option would have specific knowledge of the
device they want to access.

If you don't require the option or are in doubt, say N.

X86_RDC321X

RDC R-321x SoC

This option is needed for RDC R-321x system-on-chip, also known
as R-8610-(G).
If you don't have one of these chips, you should say N here.

X86_32_NON_STANDARD

Support non-standard 32-bit SMP architectures

This option compiles in the bigsmp and STA2X11 default
subarchitectures.  It is intended for a generic binary
kernel. If you select them all, kernel will probe it one by
one and will fallback to default.

STA2X11

STA2X11 Companion Chip Support

This adds support for boards based on the STA2X11 IO-Hub,
a.k.a. "ConneXt". The chip is used in place of the standard
PC chipset, so all "standard" peripherals are missing. If this
option is selected the kernel will still be able to boot on
standard PC machines.

X86_32_IRIS

Eurobraille/Iris poweroff module

The Iris machines from EuroBraille do not have APM or ACPI support
to shut themselves down properly.  A special I/O sequence is
needed to do so, which is what this module does at
kernel shutdown.

This is only for Iris machines from EuroBraille.

If unused, say N.

SCHED_OMIT_FRAME_POINTER

Single-depth WCHAN output

Calculate simpler /proc/<PID>/wchan values. If this option
is disabled then wchan values will recurse back to the
caller function. This provides more accurate wchan values,
at the expense of slightly more scheduling overhead.

If in doubt, say "Y".

HYPERVISOR_GUEST

Linux guest support

Say Y here to enable options for running Linux under various hyper-
visors. This option enables basic hypervisor detection and platform
setup.

If you say N, all options in this submenu will be skipped and
disabled, and Linux guest support won't be built in.

PARAVIRT

Enable paravirtualization code

This changes the kernel so it can modify itself when it is run
under a hypervisor, potentially improving performance significantly
over full virtualization.  However, when run without a hypervisor
the kernel is theoretically slower and slightly larger.

PARAVIRT_DEBUG

paravirt-ops debugging

Enable to debug paravirt_ops internals.  Specifically, BUG if
a paravirt_op is missing when it is called.

PARAVIRT_SPINLOCKS

Paravirtualization layer for spinlocks

Paravirtualized spinlocks allow a pvops backend to replace the
spinlock implementation with something virtualization-friendly
(for example, block the virtual CPU rather than spinning).

It has a minimal impact on native kernels and gives a nice performance
benefit on paravirtualized KVM / Xen kernels.

If you are unsure how to answer this question, answer Y.

arch/x86/xen/Kconfig

KVM_GUEST

KVM Guest support (including kvmclock)

This option enables various optimizations for running under the KVM
hypervisor. It includes a paravirtualized clock, so that instead
of relying on a PIT (or probably other) emulation by the
underlying device model, the host provides the guest with
timing infrastructure such as time of day, and system time

ARCH_CPUIDLE_HALTPOLL

Disable host haltpoll when loading haltpoll driver

If virtualized under KVM, disable host haltpoll.

PVH

Support for running PVH guests

This option enables the PVH entry point for guest virtual machines
as specified in the x86/HVM direct boot ABI.

PARAVIRT_TIME_ACCOUNTING

Paravirtual steal time accounting

Select this option to enable fine granularity task steal time
accounting. Time spent executing other tasks in parallel with
the current vCPU is discounted from the vCPU power. To account for
that, there can be a small performance impact.

If in doubt, say N here.

JAILHOUSE_GUEST

Jailhouse non-root cell support

This option allows to run Linux as guest in a Jailhouse non-root
cell. You can leave this option disabled if you only want to start
Jailhouse and run Linux afterwards in the root cell.

ACRN_GUEST

ACRN Guest support

This option allows to run Linux as guest in the ACRN hypervisor. ACRN is
a flexible, lightweight reference open-source hypervisor, built with
real-time and safety-criticality in mind. It is built for embedded
IOT with small footprint and real-time features. More details can be
found in https://projectacrn.org/.

arch/x86/Kconfig.cpu

HPET_TIMER

HPET Timer Support

Use the IA-PC HPET (High Precision Event Timer) to manage
time in preference to the PIT and RTC, if a HPET is
present.
HPET is the next generation timer replacing legacy 8254s.
The HPET provides a stable time base on SMP
systems, unlike the TSC, but it is more expensive to access,
as it is off-chip.  The interface used is documented
in the HPET spec, revision 1.

You can safely choose Y here.  However, HPET will only be
activated if the platform and the BIOS support this feature.
Otherwise the 8254 will be used for timing services.

Choose N to continue using the legacy 8254 timer.

DMI

Enable DMI scanning

Enabled scanning of DMI to identify machine quirks. Say Y
here unless you have verified that your setup is not
affected by entries in the DMI blacklist. Required by PNP
BIOS code.

GART_IOMMU

Old AMD GART IOMMU support

Provides a driver for older AMD Athlon64/Opteron/Turion/Sempron
GART based hardware IOMMUs.

The GART supports full DMA access for devices with 32-bit access
limitations, on systems with more than 3 GB. This is usually needed
for USB, sound, many IDE/SATA chipsets and some other devices.

Newer systems typically have a modern AMD IOMMU, supported via
the CONFIG_AMD_IOMMU=y config option.

In normal configurations this driver is only active when needed:
there's more than 3 GB of memory and the system contains a
32-bit limited device.

If unsure, say Y.

MAXSMP

Enable Maximum number of SMP Processors and NUMA Nodes

Enable maximum number of CPUS and NUMA Nodes for this architecture.
If unsure, say N.

NR_CPUS

Maximum number of CPUs

This allows you to specify the maximum number of CPUs which this
kernel will support.  If CPUMASK_OFFSTACK is enabled, the maximum
supported value is 8192, otherwise the maximum value is 512.  The
minimum value which makes sense is 2.

This is purely to save memory: each supported CPU adds about 8KB
to the kernel image.

SCHED_MC

Multi-core scheduler support

Multi-core scheduler support improves the CPU scheduler's decision
making when dealing with multi-core CPU chips at a cost of slightly
increased overhead in some places. If unsure say N here.

SCHED_MC_PRIO

CPU core priorities scheduler support

Intel Turbo Boost Max Technology 3.0 enabled CPUs have a
core ordering determined at manufacturing time, which allows
certain cores to reach higher turbo frequencies (when running
single threaded workloads) than others.

Enabling this kernel feature teaches the scheduler about
the TBM3 (aka ITMT) priority order of the CPU cores and adjusts the
scheduler's CPU selection logic accordingly, so that higher
overall system performance can be achieved.

This feature will have no effect on CPUs without this feature.

If unsure say Y here.

X86_UP_APIC

Local APIC support on uniprocessors

A local APIC (Advanced Programmable Interrupt Controller) is an
integrated interrupt controller in the CPU. If you have a single-CPU
system which has a processor with a local APIC, you can say Y here to
enable and use it. If you say Y here even though your machine doesn't
have a local APIC, then the kernel will still run with no slowdown at
all. The local APIC supports CPU-generated self-interrupts (timer,
performance counters), and the NMI watchdog which detects hard
lockups.

X86_UP_IOAPIC

IO-APIC support on uniprocessors

An IO-APIC (I/O Advanced Programmable Interrupt Controller) is an
SMP-capable replacement for PC-style interrupt controllers. Most
SMP systems and many recent uniprocessor systems have one.

If you have a single-CPU system with an IO-APIC, you can say Y here
to use it. If you say Y here even though your machine doesn't have
an IO-APIC, then the kernel will still run with no slowdown at all.

X86_REROUTE_FOR_BROKEN_BOOT_IRQS

Reroute for broken boot IRQs

This option enables a workaround that fixes a source of
spurious interrupts. This is recommended when threaded
interrupt handling is used on systems where the generation of
superfluous "boot interrupts" cannot be disabled.

Some chipsets generate a legacy INTx "boot IRQ" when the IRQ
entry in the chipset's IO-APIC is masked (as, e.g. the RT
kernel does during interrupt handling). On chipsets where this
boot IRQ generation cannot be disabled, this workaround keeps
the original IRQ line masked so that only the equivalent "boot
IRQ" is delivered to the CPUs. The workaround also tells the
kernel to set up the IRQ handler on the boot IRQ line. In this
way only one interrupt is delivered to the kernel. Otherwise
the spurious second interrupt may cause the kernel to bring
down (vital) interrupt lines.

Only affects "broken" chipsets. Interrupt sharing may be
increased on these systems.

X86_MCE

Machine Check / overheating reporting

Machine Check support allows the processor to notify the
kernel if it detects a problem (e.g. overheating, data corruption).
The action the kernel takes depends on the severity of the problem,
ranging from warning messages to halting the machine.

X86_MCELOG_LEGACY

Support for deprecated /dev/mcelog character device

Enable support for /dev/mcelog which is needed by the old mcelog
userspace logging daemon. Consider switching to the new generation
rasdaemon solution.

X86_MCE_INTEL

Intel MCE features

Additional support for intel specific MCE features such as
the thermal monitor.

X86_MCE_AMD

AMD MCE features

Additional support for AMD specific MCE features such as
the DRAM Error Threshold.

X86_ANCIENT_MCE

Support for old Pentium 5 / WinChip machine checks

Include support for machine check handling on old Pentium 5 or WinChip
systems. These typically need to be enabled explicitly on the command
line.

X86_MCE_INJECT

Machine check injector support

Provide support for injecting machine checks for testing purposes.
If you don't know what a machine check is and you don't do kernel
QA it is safe to say n.

arch/x86/events/Kconfig

X86_LEGACY_VM86

Legacy VM86 support

This option allows user programs to put the CPU into V8086
mode, which is an 80286-era approximation of 16-bit real mode.

Some very old versions of X and/or vbetool require this option
for user mode setting.  Similarly, DOSEMU will use it if
available to accelerate real mode DOS programs.  However, any
recent version of DOSEMU, X, or vbetool should be fully
functional even without kernel VM86 support, as they will all
fall back to software emulation. Nevertheless, if you are using
a 16-bit DOS program where 16-bit performance matters, vm86
mode might be faster than emulation and you might want to
enable this option.

Note that any app that works on a 64-bit kernel is unlikely to
need this option, as 64-bit kernels don't, and can't, support
V8086 mode. This option is also unrelated to 16-bit protected
mode and is not needed to run most 16-bit programs under Wine.

Enabling this option increases the complexity of the kernel
and slows down exception handling a tiny bit.

If unsure, say N here.

X86_16BIT

Enable support for 16-bit segments

This option is required by programs like Wine to run 16-bit
protected mode legacy code on x86 processors.  Disabling
this option saves about 300 bytes on i386, or around 6K text
plus 16K runtime memory on x86-64,

X86_VSYSCALL_EMULATION

Enable vsyscall emulation

This enables emulation of the legacy vsyscall page.  Disabling
it is roughly equivalent to booting with vsyscall=none, except
that it will also disable the helpful warning if a program
tries to use a vsyscall.  With this option set to N, offending
programs will just segfault, citing addresses of the form
0xffffffffff600?00.

This option is required by many programs built before 2013, and
care should be used even with newer programs if set to N.

Disabling this option saves about 7K of kernel size and
possibly 4K of additional runtime pagetable memory.

X86_IOPL_IOPERM

IOPERM and IOPL Emulation

This enables the ioperm() and iopl() syscalls which are necessary
for legacy applications.

Legacy IOPL support is an overbroad mechanism which allows user
space aside of accessing all 65536 I/O ports also to disable
interrupts. To gain this access the caller needs CAP_SYS_RAWIO
capabilities and permission from potentially active security
modules.

The emulation restricts the functionality of the syscall to
only allowing the full range I/O port access, but prevents the
ability to disable interrupts from user space which would be
granted if the hardware IOPL mechanism would be used.

TOSHIBA

Toshiba Laptop support

This adds a driver to safely access the System Management Mode of
the CPU on Toshiba portables with a genuine Toshiba BIOS. It does
not work on models with a Phoenix BIOS. The System Management Mode
is used to set the BIOS and power saving options on Toshiba portables.

For information on utilities to make use of this driver see the
Toshiba Linux utilities web site at:
<http://www.buzzard.org.uk/toshiba/>.

Say Y if you intend to run this kernel on a Toshiba portable.
Say N otherwise.

I8K

Dell i8k legacy laptop support

This option enables legacy /proc/i8k userspace interface in hwmon
dell-smm-hwmon driver. Character file /proc/i8k reports bios version,
temperature and allows controlling fan speeds of Dell laptops via
System Management Mode. For old Dell laptops (like Dell Inspiron 8000)
it reports also power and hotkey status. For fan speed control is
needed userspace package i8kutils.

Say Y if you intend to run this kernel on old Dell laptops or want to
use userspace package i8kutils.
Say N otherwise.

X86_REBOOTFIXUPS

Enable X86 board specific fixups for reboot

This enables chipset and/or board specific fixups to be done
in order to get reboot to work correctly. This is only needed on
some combinations of hardware and BIOS. The symptom, for which
this config is intended, is when reboot ends with a stalled/hung
system.

Currently, the only fixup is for the Geode machines using
CS5530A and CS5536 chipsets and the RDC R-321x SoC.

Say Y if you want to enable the fixup. Currently, it's safe to
enable this option even if you don't need it.
Say N otherwise.

MICROCODE

CPU microcode loading support

If you say Y here, you will be able to update the microcode on
Intel and AMD processors. The Intel support is for the IA32 family,
e.g. Pentium Pro, Pentium II, Pentium III, Pentium 4, Xeon etc. The
AMD support is for families 0x10 and later. You will obviously need
the actual microcode binary data itself which is not shipped with
the Linux kernel.

The preferred method to load microcode from a detached initrd is described
in Documentation/x86/microcode.rst. For that you need to enable
CONFIG_BLK_DEV_INITRD in order for the loader to be able to scan the
initrd for microcode blobs.

In addition, you can build the microcode into the kernel. For that you
need to add the vendor-supplied microcode to the CONFIG_EXTRA_FIRMWARE
config option.

MICROCODE_INTEL

Intel microcode loading support

This options enables microcode patch loading support for Intel
processors.

For the current Intel microcode data package go to
<https://downloadcenter.intel.com> and search for
'Linux Processor Microcode Data File'.

MICROCODE_AMD

AMD microcode loading support

If you select this option, microcode patch loading support for AMD
processors will be enabled.

MICROCODE_OLD_INTERFACE

Ancient loading interface (DEPRECATED)

DO NOT USE THIS! This is the ancient /dev/cpu/microcode interface
which was used by userspace tools like iucode_tool and microcode.ctl.
It is inadequate because it runs too late to be able to properly
load microcode on a machine and it needs special tools. Instead, you
should've switched to the early loading method with the initrd or
builtin microcode by now: Documentation/x86/microcode.rst

X86_MSR

/dev/cpu/*/msr - Model-specific register support

This device gives privileged processes access to the x86
Model-Specific Registers (MSRs).  It is a character device with
major 202 and minors 0 to 31 for /dev/cpu/0/msr to /dev/cpu/31/msr.
MSR accesses are directed to a specific CPU on multi-processor
systems.

X86_CPUID

/dev/cpu/*/cpuid - CPU information support

This device gives processes access to the x86 CPUID instruction to
be executed on a specific processor.  It is a character device
with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to
/dev/cpu/31/cpuid.

NOHIGHMEM

off

Linux can use up to 64 Gigabytes of physical memory on x86 systems.
However, the address space of 32-bit x86 processors is only 4
Gigabytes large. That means that, if you have a large amount of
physical memory, not all of it can be "permanently mapped" by the
kernel. The physical memory that's not permanently mapped is called
"high memory".

If you are compiling a kernel which will never run on a machine with
more than 1 Gigabyte total physical RAM, answer "off" here (default
choice and suitable for most users). This will result in a "3GB/1GB"
split: 3GB are mapped so that each process sees a 3GB virtual memory
space and the remaining part of the 4GB virtual memory space is used
by the kernel to permanently map as much physical memory as
possible.

If the machine has between 1 and 4 Gigabytes physical RAM, then
answer "4GB" here.

If more than 4 Gigabytes is used then answer "64GB" here. This
selection turns Intel PAE (Physical Address Extension) mode on.
PAE implements 3-level paging on IA32 processors. PAE is fully
supported by Linux, PAE mode is implemented on all recent Intel
processors (Pentium Pro and better). NOTE: If you say "64GB" here,
then the kernel will not boot on CPUs that don't support PAE!

The actual amount of total physical memory will either be
auto detected or can be forced by using a kernel command line option
such as "mem=256M". (Try "man bootparam" or see the documentation of
your boot loader (lilo or loadlin) about how to pass options to the
kernel at boot time.)

If unsure, say "off".

HIGHMEM4G

4GB

Select this if you have a 32-bit processor and between 1 and 4
gigabytes of physical RAM.

HIGHMEM64G

64GB

Select this if you have a 32-bit processor and more than 4
gigabytes of physical RAM.

HIGHMEM64G

Memory split

Select the desired split between kernel and user memory.

If the address range available to the kernel is less than the
physical memory installed, the remaining memory will be available
as "high memory". Accessing high memory is a little more costly
than low memory, as it needs to be mapped into the kernel first.
Note that increasing the kernel address space limits the range
available to user programs, making the address space there
tighter.  Selecting anything other than the default 3G/1G split
will also likely make your kernel incompatible with binary-only
kernel modules.

If you are not absolutely sure what you are doing, leave this
option alone!

config VMSPLIT_3G
bool "3G/1G user/kernel split"
config VMSPLIT_3G_OPT
depends on !X86_PAE
bool "3G/1G user/kernel split (for full 1G low memory)"
config VMSPLIT_2G
bool "2G/2G user/kernel split"
config VMSPLIT_2G_OPT
depends on !X86_PAE
bool "2G/2G user/kernel split (for full 2G low memory)"
config VMSPLIT_1G
bool "1G/3G user/kernel split"

X86_PAE

PAE (Physical Address Extension) Support

PAE is required for NX support, and furthermore enables
larger swapspace support for non-overcommit purposes. It
has the cost of more pagetable lookup overhead, and also
consumes more pagetable space per process.

X86_5LEVEL

Enable 5-level page tables support

5-level paging enables access to larger address space:
upto 128 PiB of virtual address space and 4 PiB of
physical address space.

It will be supported by future Intel CPUs.

A kernel with the option enabled can be booted on machines that
support 4- or 5-level paging.

See Documentation/x86/x86_64/5level-paging.rst for more
information.

Say N if unsure.

X86_DIRECT_GBPAGES

Certain kernel features effectively disable kernel
linear 1 GB mappings (even if the CPU otherwise
supports them), so don't confuse the user by printing
that we have them enabled.

X86_CPA_STATISTICS

Enable statistic for Change Page Attribute

Expose statistics about the Change Page Attribute mechanism, which
helps to determine the effectiveness of preserving large and huge
page mappings when mapping protections are changed.

AMD_MEM_ENCRYPT

AMD Secure Memory Encryption (SME) support

Say yes to enable support for the encryption of system memory.
This requires an AMD processor that supports Secure Memory
Encryption (SME).

AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT

Activate AMD Secure Memory Encryption (SME) by default

Say yes to have system memory encrypted by default if running on
an AMD processor that supports Secure Memory Encryption (SME).

If set to Y, then the encryption of system memory can be
deactivated with the mem_encrypt=off command line option.

If set to N, then the encryption of system memory can be
activated with the mem_encrypt=on command line option.

NUMA

NUMA Memory Allocation and Scheduler Support

Enable NUMA (Non-Uniform Memory Access) support.

The kernel will try to allocate memory used by a CPU on the
local memory controller of the CPU and add some more
NUMA awareness to the kernel.

For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

For 32-bit this is only needed if you boot a 32-bit
kernel on a 64-bit NUMA platform.

Otherwise, you should say N.

AMD_NUMA

Old style AMD Opteron NUMA detection

Enable AMD NUMA node topology detection.  You should say Y here if
you have a multi processor AMD system. This uses an old method to
read the NUMA configuration directly from the builtin Northbridge
of Opteron. It is recommended to use X86_64_ACPI_NUMA instead,
which also takes priority if both are compiled in.

X86_64_ACPI_NUMA

ACPI NUMA detection

Enable ACPI SRAT based node topology detection.

NUMA_EMU

NUMA emulation

Enable NUMA emulation. A flat machine will be split
into virtual nodes when booted with "numa=fake=N", where N is the
number of nodes. This is only useful for debugging.

NODES_SHIFT

Maximum NUMA Nodes (as a power of 2)

Specify the maximum number of NUMA Nodes available on the target
system.  Increases memory reserved to accommodate various tables.

ARCH_MEMORY_PROBE

Enable sysfs memory/probe interface

This option enables a sysfs memory/probe interface for testing.
See Documentation/admin-guide/mm/memory-hotplug.rst for more information.
If you are unsure how to answer this question, answer N.

X86_PMEM_LEGACY

Support non-standard NVDIMMs and ADR protected memory

Treat memory marked using the non-standard e820 type of 12 as used
by the Intel Sandy Bridge-EP reference BIOS as protected memory.
The kernel will offer these regions to the 'pmem' driver so
they can be used for persistent storage.

Say Y if unsure.

HIGHPTE

Allocate 3rd-level pagetables from highmem

The VM uses one page table entry for each page of physical memory.
For systems with a lot of RAM, this can be wasteful of precious
low memory.  Setting this option will put user-space page table
entries in high memory.

X86_CHECK_BIOS_CORRUPTION

Check for low memory corruption

Periodically check for memory corruption in low memory, which
is suspected to be caused by BIOS.  Even when enabled in the
configuration, it is disabled at runtime.  Enable it by
setting "memory_corruption_check=1" on the kernel command
line.  By default it scans the low 64k of memory every 60
seconds; see the memory_corruption_check_size and
memory_corruption_check_period parameters in
Documentation/admin-guide/kernel-parameters.rst to adjust this.

When enabled with the default parameters, this option has
almost no overhead, as it reserves a relatively small amount
of memory and scans it infrequently.  It both detects corruption
and prevents it from affecting the running system.

It is, however, intended as a diagnostic tool; if repeatable
BIOS-originated corruption always affects the same memory,
you can use memmap= to prevent the kernel from using that
memory.

X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK

Set the default setting of memory_corruption_check

Set whether the default state of memory_corruption_check is
on or off.

X86_RESERVE_LOW

Amount of low memory, in kilobytes, to reserve for the BIOS

Specify the amount of low memory to reserve for the BIOS.

The first page contains BIOS data structures that the kernel
must not use, so that page must always be reserved.

By default we reserve the first 64K of physical RAM, as a
number of BIOSes are known to corrupt that memory range
during events such as suspend/resume or monitor cable
insertion, so it must not be used by the kernel.

You can set this to 4 if you are absolutely sure that you
trust the BIOS to get all its memory reservations and usages
right.  If you know your BIOS have problems beyond the
default 64K area, you can set this to 640 to avoid using the
entire low memory range.

If you have doubts about the BIOS (e.g. suspend/resume does
not work or there's kernel crashes after certain hardware
hotplug events) then you might want to enable
X86_CHECK_BIOS_CORRUPTION=y to allow the kernel to check
typical corruption patterns.

Leave this to the default value of 64 if you are unsure.

MATH_EMULATION

Math emulation

Linux can emulate a math coprocessor (used for floating point
operations) if you don't have one. 486DX and Pentium processors have
a math coprocessor built in, 486SX and 386 do not, unless you added
a 487DX or 387, respectively. (The messages during boot time can
give you some hints here ["man dmesg"].) Everyone needs either a
coprocessor or this emulation.

If you don't have a math coprocessor, you need to say Y here; if you
say Y here even though you have a coprocessor, the coprocessor will
be used nevertheless. (This behavior can be changed with the kernel
command line option "no387", which comes handy if your coprocessor
is broken. Try "man bootparam" or see the documentation of your boot
loader (lilo or loadlin) about how to pass options to the kernel at
boot time.) This means that it is a good idea to say Y here if you
intend to use this kernel on different machines.

More information about the internals of the Linux math coprocessor
emulation can be found in <file:arch/x86/math-emu/README>.

If you are not sure, say Y; apart from resulting in a 66 KB bigger
kernel, it won't hurt.

MTRR

MTRR (Memory Type Range Register) support

On Intel P6 family processors (Pentium Pro, Pentium II and later)
the Memory Type Range Registers (MTRRs) may be used to control
processor access to memory ranges. This is most useful if you have
a video (VGA) card on a PCI or AGP bus. Enabling write-combining
allows bus write transfers to be combined into a larger transfer
before bursting over the PCI/AGP bus. This can increase performance
of image write operations 2.5 times or more. Saying Y here creates a
/proc/mtrr file which may be used to manipulate your processor's
MTRRs. Typically the X server should use this.

This code has a reasonably generic interface so that similar
control registers on other processors can be easily supported
as well:

The Cyrix 6x86, 6x86MX and M II processors have Address Range
Registers (ARRs) which provide a similar functionality to MTRRs. For
these, the ARRs are used to emulate the MTRRs.
The AMD K6-2 (stepping 8 and above) and K6-3 processors have two
MTRRs. The Centaur C6 (WinChip) has 8 MCRs, allowing
write-combining. All of these processors are supported by this code
and it makes sense to say Y here if you have one of them.

Saying Y here also fixes a problem with buggy SMP BIOSes which only
set the MTRRs for the boot CPU and not for the secondary CPUs. This
can lead to all sorts of problems, so it's good to say Y here.

You can safely say Y even if your machine doesn't have MTRRs, you'll
just add about 9 KB to your kernel.

See <file:Documentation/x86/mtrr.rst> for more information.

MTRR_SANITIZER

MTRR cleanup support

Convert MTRR layout from continuous to discrete, so X drivers can
add writeback entries.

Can be disabled with disable_mtrr_cleanup on the kernel command line.
The largest mtrr entry size for a continuous block can be set with
mtrr_chunk_size.

If unsure, say Y.

MTRR_SANITIZER_ENABLE_DEFAULT

MTRR cleanup enable value (0-1)

Enable mtrr cleanup default value

MTRR_SANITIZER_SPARE_REG_NR_DEFAULT

MTRR cleanup spare reg num (0-7)

mtrr cleanup spare entries default, it can be changed via
mtrr_spare_reg_nr=N on the kernel command line.

X86_PAT

x86 PAT support

Use PAT attributes to setup page level cache control.

PATs are the modern equivalents of MTRRs and are much more
flexible than MTRRs.

Say N here if you see bootup problems (boot crash, boot hang,
spontaneous reboots) or a non-working video driver.

If unsure, say Y.

ARCH_RANDOM

x86 architectural random number generator

Enable the x86 architectural RDRAND instruction
(Intel Bull Mountain technology) to generate random numbers.
If supported, this is a high bandwidth, cryptographically
secure hardware random number generator.

X86_SMAP

Supervisor Mode Access Prevention

Supervisor Mode Access Prevention (SMAP) is a security
feature in newer Intel processors.  There is a small
performance cost if this enabled and turned on; there is
also a small increase in the kernel size if this is enabled.

If unsure, say Y.

X86_UMIP

User Mode Instruction Prevention

User Mode Instruction Prevention (UMIP) is a security feature in
some x86 processors. If enabled, a general protection fault is
issued if the SGDT, SLDT, SIDT, SMSW or STR instructions are
executed in user mode. These instructions unnecessarily expose
information about the hardware state.

The vast majority of applications do not use these instructions.
For the very few that do, software emulation is provided in
specific cases in protected and virtual-8086 modes. Emulated
results are dummy.

X86_INTEL_MEMORY_PROTECTION_KEYS

Memory Protection Keys

Memory Protection Keys provides a mechanism for enforcing
page-based protections, but without requiring modification of the
page tables when an application changes protection domains.

For details, see Documentation/core-api/protection-keys.rst

If unsure, say y.

X86_INTEL_MEMORY_PROTECTION_KEYS

TSX enable mode

Intel's TSX (Transactional Synchronization Extensions) feature
allows to optimize locking protocols through lock elision which
can lead to a noticeable performance boost.

On the other hand it has been shown that TSX can be exploited
to form side channel attacks (e.g. TAA) and chances are there
will be more of those attacks discovered in the future.

Therefore TSX is not enabled by default (aka tsx=off). An admin
might override this decision by tsx=on the command line parameter.
Even with TSX enabled, the kernel will attempt to enable the best
possible TAA mitigation setting depending on the microcode available
for the particular machine.

This option allows to set the default tsx mode between tsx=on, =off
and =auto. See Documentation/admin-guide/kernel-parameters.txt for more
details.

Say off if not sure, auto if TSX is in use but it should be used on safe
platforms or on if TSX is in use and the security aspect of tsx is not
relevant.

X86_INTEL_TSX_MODE_OFF

off

TSX is disabled if possible - equals to tsx=off command line parameter.

X86_INTEL_TSX_MODE_ON

on

TSX is always enabled on TSX capable HW - equals the tsx=on command
line parameter.

X86_INTEL_TSX_MODE_AUTO

auto

TSX is enabled on TSX capable HW that is believed to be safe against
side channel attacks- equals the tsx=auto command line parameter.

X86_SGX

Software Guard eXtensions (SGX)

Intel(R) Software Guard eXtensions (SGX) is a set of CPU instructions
that can be used by applications to set aside private regions of code
and data, referred to as enclaves. An enclave's private memory can
only be accessed by code running within the enclave. Accesses from
outside the enclave, including other enclaves, are disallowed by
hardware.

If unsure, say N.

EFI

EFI runtime service support

This enables the kernel to use EFI runtime services that are
available (such as the EFI variable services).

This option is only useful on systems that have EFI firmware.
In addition, you should use the latest ELILO loader available
at <http://elilo.sourceforge.net> in order to take advantage
of EFI runtime services. However, even with this option, the
resultant kernel should continue to boot on existing non-EFI
platforms.

EFI_STUB

EFI stub support

This kernel feature allows a bzImage to be loaded directly
by EFI firmware without the use of a bootloader.

See Documentation/admin-guide/efi-stub.rst for more information.

EFI_MIXED

EFI mixed-mode support

Enabling this feature allows a 64-bit kernel to be booted
on a 32-bit firmware, provided that your CPU supports 64-bit
mode.

Note that it is not possible to boot a mixed-mode enabled
kernel via the EFI boot stub - a bootloader that supports
the EFI handover protocol must be used.

If unsure, say N.

kernel/Kconfig.hz

KEXEC

kexec system call

kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel.  It is like a reboot
but it is independent of the system firmware.   And like a reboot
you can start any kernel with it, not just Linux.

The name comes from the similarity to the exec system call.

It is an ongoing process to be certain the hardware in a machine
is properly shutdown, so do not be surprised if this code does not
initially work for you.  As of this writing the exact hardware
interface is strongly in flux, so no good recommendation can be
made.

KEXEC_FILE

kexec file based system call

This is new version of kexec system call. This system call is
file based and takes file descriptors as system call argument
for kernel and initramfs as opposed to list of segments as
accepted by previous system call.

KEXEC_SIG

Verify kernel signature during kexec_file_load() syscall

This option makes the kexec_file_load() syscall check for a valid
signature of the kernel image.  The image can still be loaded without
a valid signature unless you also enable KEXEC_SIG_FORCE, though if
there's a signature that we can check, then it must be valid.

In addition to this option, you need to enable signature
verification for the corresponding kernel image type being
loaded in order for this to work.

KEXEC_SIG_FORCE

Require a valid signature in kexec_file_load() syscall

This option makes kernel signature verification mandatory for
the kexec_file_load() syscall.

KEXEC_BZIMAGE_VERIFY_SIG

Enable bzImage signature verification support

Enable bzImage signature verification support.

CRASH_DUMP

kernel crash dumps

Generate crash dump after being started by kexec.
This should be normally only set in special crash dump kernels
which are loaded in the main kernel with kexec-tools into
a specially reserved region and then later executed after
a crash by kdump/kexec. The crash dump kernel must be compiled
to a memory address not used by the main kernel or BIOS using
PHYSICAL_START, or it must be built as a relocatable image
(CONFIG_RELOCATABLE=y).
For more details see Documentation/admin-guide/kdump/kdump.rst

KEXEC_JUMP

kexec jump

Jump between original kernel and kexeced kernel and invoke
code in physical address mode via KEXEC

PHYSICAL_START

Physical address where the kernel is loaded

This gives the physical address where the kernel is loaded.

If kernel is a not relocatable (CONFIG_RELOCATABLE=n) then
bzImage will decompress itself to above physical address and
run from there. Otherwise, bzImage will run from the address where
it has been loaded by the boot loader and will ignore above physical
address.

In normal kdump cases one does not have to set/change this option
as now bzImage can be compiled as a completely relocatable image
(CONFIG_RELOCATABLE=y) and be used to load and run from a different
address. This option is mainly useful for the folks who don't want
to use a bzImage for capturing the crash dump and want to use a
vmlinux instead. vmlinux is not relocatable hence a kernel needs
to be specifically compiled to run from a specific memory area
(normally a reserved region) and this option comes handy.

So if you are using bzImage for capturing the crash dump,
leave the value here unchanged to 0x1000000 and set
CONFIG_RELOCATABLE=y.  Otherwise if you plan to use vmlinux
for capturing the crash dump change this value to start of
the reserved region.  In other words, it can be set based on
the "X" value as specified in the "crashkernel=YM@XM"
command line boot parameter passed to the panic-ed
kernel. Please take a look at Documentation/admin-guide/kdump/kdump.rst
for more details about crash dumps.

Usage of bzImage for capturing the crash dump is recommended as
one does not have to build two kernels. Same kernel can be used
as production kernel and capture kernel. Above option should have
gone away after relocatable bzImage support is introduced. But it
is present because there are users out there who continue to use
vmlinux for dump capture. This option should go away down the
line.

Don't change this unless you know what you are doing.

RELOCATABLE

Build a relocatable kernel

This builds a kernel image that retains relocation information
so it can be loaded someplace besides the default 1MB.
The relocations tend to make the kernel binary about 10% larger,
but are discarded at runtime.

One use is for the kexec on panic case where the recovery kernel
must live at a different physical address than the primary
kernel.

Note: If CONFIG_RELOCATABLE=y, then the kernel runs from the address
it has been loaded at and the compile time physical address
(CONFIG_PHYSICAL_START) is used as the minimum location.

RANDOMIZE_BASE

Randomize the address of the kernel image (KASLR)

In support of Kernel Address Space Layout Randomization (KASLR),
this randomizes the physical address at which the kernel image
is decompressed and the virtual address where the kernel
image is mapped, as a security feature that deters exploit
attempts relying on knowledge of the location of kernel
code internals.

On 64-bit, the kernel physical and virtual addresses are
randomized separately. The physical address will be anywhere
between 16MB and the top of physical memory (up to 64TB). The
virtual address will be randomized from 16MB up to 1GB (9 bits
of entropy). Note that this also reduces the memory space
available to kernel modules from 1.5GB to 1GB.

On 32-bit, the kernel physical and virtual addresses are
randomized together. They will be randomized from 16MB up to
512MB (8 bits of entropy).

Entropy is generated using the RDRAND instruction if it is
supported. If RDTSC is supported, its value is mixed into
the entropy pool as well. If neither RDRAND nor RDTSC are
supported, then entropy is read from the i8254 timer. The
usable entropy is limited by the kernel being built using
2GB addressing, and that PHYSICAL_ALIGN must be at a
minimum of 2MB. As a result, only 10 bits of entropy are
theoretically possible, but the implementations are further
limited due to memory layouts.

If unsure, say Y.

PHYSICAL_ALIGN

Alignment value to which kernel should be aligned

This value puts the alignment restrictions on physical address
where kernel is loaded and run from. Kernel is compiled for an
address which meets above alignment restriction.

If bootloader loads the kernel at a non-aligned address and
CONFIG_RELOCATABLE is set, kernel will move itself to nearest
address aligned to above value and run from there.

If bootloader loads the kernel at a non-aligned address and
CONFIG_RELOCATABLE is not set, kernel will ignore the run time
load address and decompress itself to the address it has been
compiled for and run from there. The address for which kernel is
compiled already meets above alignment restrictions. Hence the
end result is that kernel runs from a physical address meeting
above alignment restrictions.

On 32-bit this value must be a multiple of 0x2000. On 64-bit
this value must be a multiple of 0x200000.

Don't change this unless you know what you are doing.

DYNAMIC_MEMORY_LAYOUT

This option makes base addresses of vmalloc and vmemmap as well as
__PAGE_OFFSET movable during boot.

RANDOMIZE_MEMORY

Randomize the kernel memory sections

Randomizes the base virtual address of kernel memory sections
(physical memory mapping, vmalloc & vmemmap). This security feature
makes exploits relying on predictable memory locations less reliable.

The order of allocations remains unchanged. Entropy is generated in
the same way as RANDOMIZE_BASE. Current implementation in the optimal
configuration have in average 30,000 different possible virtual
addresses for each memory section.

If unsure, say Y.

RANDOMIZE_MEMORY_PHYSICAL_PADDING

Physical memory mapping padding

Define the padding in terabytes added to the existing physical
memory size during kernel memory randomization. It is useful
for memory hotplug support but reduces the entropy available for
address randomization.

If unsure, leave at the default value.

BOOTPARAM_HOTPLUG_CPU0

Set default setting of cpu0_hotpluggable

Set whether default state of cpu0_hotpluggable is on or off.

Say Y here to enable CPU0 hotplug by default. If this switch
is turned on, there is no need to give cpu0_hotplug kernel
parameter and the CPU0 hotplug feature is enabled by default.

Please note: there are two known CPU0 dependencies if you want
to enable the CPU0 hotplug feature either by this switch or by
cpu0_hotplug kernel parameter.

First, resume from hibernate or suspend always starts from CPU0.
So hibernate and suspend are prevented if CPU0 is offline.

Second dependency is PIC interrupts always go to CPU0. CPU0 can not
offline if any interrupt can not migrate out of CPU0. There may
be other CPU0 dependencies.

Please make sure the dependencies are under your control before
you enable this feature.

Say N if you don't want to enable CPU0 hotplug feature by default.
You still can enable the CPU0 hotplug feature at boot by kernel
parameter cpu0_hotplug.

DEBUG_HOTPLUG_CPU0

Debug CPU0 hotplug

Enabling this option offlines CPU0 (if CPU0 can be offlined) as
soon as possible and boots up userspace with CPU0 offlined. User
can online CPU0 back after boot time.

To debug CPU0 hotplug, you need to enable CPU0 offline/online
feature by either turning on CONFIG_BOOTPARAM_HOTPLUG_CPU0 during
compilation or giving cpu0_hotplug kernel parameter at boot.

If unsure, say N.

COMPAT_VDSO

Disable the 32-bit vDSO (needed for glibc 2.3.3)

Certain buggy versions of glibc will crash if they are
presented with a 32-bit vDSO that is not mapped at the address
indicated in its segment table.

The bug was introduced by f866314b89d56845f55e6f365e18b31ec978ec3a
and fixed by 3b3ddb4f7db98ec9e912ccdf54d35df4aa30e04a and
49ad572a70b8aeb91e57483a11dd1b77e31c4468.  Glibc 2.3.3 is
the only released version with the bug, but OpenSUSE 9
contains a buggy "glibc 2.3.2".

The symptom of the bug is that everything crashes on startup, saying:
dl_main: Assertion `(void *) ph->p_vaddr == _rtld_local._dl_sysinfo_dso' failed!

Saying Y here changes the default value of the vdso32 boot
option from 1 to 0, which turns off the 32-bit vDSO entirely.
This works around the glibc bug but hurts performance.

If unsure, say N: if you are compiling your own kernel, you
are unlikely to be using a buggy version of glibc.

COMPAT_VDSO

vsyscall table for legacy applications

Legacy user code that does not know how to find the vDSO expects
to be able to issue three syscalls by calling fixed addresses in
kernel space. Since this location is not randomized with ASLR,
it can be used to assist security vulnerability exploitation.

This setting can be changed at boot time via the kernel command
line parameter vsyscall=[emulate|xonly|none].

On a system with recent enough glibc (2.14 or newer) and no
static binaries, you can say None without a performance penalty
to improve security.

If unsure, select "Emulate execution only".

config LEGACY_VSYSCALL_EMULATE
bool "Full emulation"
help
The kernel traps and emulates calls into the fixed vsyscall
address mapping. This makes the mapping non-executable, but
it still contains readable known contents, which could be
used in certain rare security vulnerability exploits. This
configuration is recommended when using legacy userspace
that still uses vsyscalls along with legacy binary
instrumentation tools that require code to be readable.

An example of this type of legacy userspace is running
Pin on an old binary that still uses vsyscalls.

config LEGACY_VSYSCALL_XONLY
bool "Emulate execution only"
help
The kernel traps and emulates calls into the fixed vsyscall
address mapping and does not allow reads.  This
configuration is recommended when userspace might use the
legacy vsyscall area but support for legacy binary
instrumentation of legacy code is not needed.  It mitigates
certain uses of the vsyscall area as an ASLR-bypassing
buffer.

config LEGACY_VSYSCALL_NONE
bool "None"
help
There will be no vsyscall mapping at all. This will
eliminate any risk of ASLR bypass due to the vsyscall
fixed address mapping. Attempts to use the vsyscalls
will be reported to dmesg, so that either old or
malicious userspace programs can be identified.

CMDLINE_BOOL

Built-in kernel command line

Allow for specifying boot arguments to the kernel at
build time.  On some systems (e.g. embedded ones), it is
necessary or convenient to provide some or all of the
kernel boot arguments with the kernel itself (that is,
to not rely on the boot loader to provide them.)

To compile command line arguments into the kernel,
set this option to 'Y', then fill in the
boot arguments in CONFIG_CMDLINE.

Systems with fully functional boot loaders (i.e. non-embedded)
should leave this option set to 'N'.

CMDLINE

Built-in kernel command string

Enter arguments here that should be compiled into the kernel
image and used at boot time.  If the boot loader provides a
command line at boot time, it is appended to this string to
form the full kernel command line, when the system boots.

However, you can use the CONFIG_CMDLINE_OVERRIDE option to
change this behavior.

In most cases, the command line (whether built-in or provided
by the boot loader) should specify the device for the root
file system.

CMDLINE_OVERRIDE

Built-in command line overrides boot loader arguments

Set this option to 'Y' to have the kernel ignore the boot loader
command line, and use ONLY the built-in command line.

This is used to work around broken boot loaders.  This should
be set to 'N' under normal conditions.

MODIFY_LDT_SYSCALL

Enable the LDT (local descriptor table)

Linux can allow user programs to install a per-process x86
Local Descriptor Table (LDT) using the modify_ldt(2) system
call.  This is required to run 16-bit or segmented code such as
DOSEMU or some Wine programs.  It is also used by some very old
threading libraries.

Enabling this feature adds a small amount of overhead to
context switches and increases the low-level kernel attack
surface.  Disabling it removes the modify_ldt(2) system call.

Saying 'N' here may make sense for embedded or server kernels.

kernel/livepatch/Kconfig



Menu: Power management and ACPI options

kernel/power/Kconfig

drivers/acpi/Kconfig

APM

APM (Advanced Power Management) BIOS support

APM is a BIOS specification for saving power using several different
techniques. This is mostly useful for battery powered laptops with
APM compliant BIOSes. If you say Y here, the system time will be
reset after a RESUME operation, the /proc/apm device will provide
battery status information, and user-space programs will receive
notification of APM "events" (e.g. battery status change).

If you select "Y" here, you can disable actual use of the APM
BIOS by passing the "apm=off" option to the kernel at boot time.

Note that the APM support is almost completely disabled for
machines with more than one CPU.

In order to use APM, you will need supporting software. For location
and more information, read <file:Documentation/power/apm-acpi.rst>
and the Battery Powered Linux mini-HOWTO, available from
<http://www.tldp.org/docs.html#howto>.

This driver does not spin down disk drives (see the hdparm(8)
manpage ("man 8 hdparm") for that), and it doesn't turn off
VESA-compliant "green" monitors.

This driver does not support the TI 4000M TravelMate and the ACER
486/DX4/75 because they don't have compliant BIOSes. Many "green"
desktop machines also don't have compliant BIOSes, and this driver
may cause those machines to panic during the boot phase.

Generally, if you don't have a battery in your machine, there isn't
much point in using this driver and you should say N. If you get
random kernel OOPSes or reboots that don't seem to be related to
anything, try disabling/enabling this option (or disabling/enabling
APM in your BIOS).

Some other things you should try when experiencing seemingly random,
"weird" problems:

1) make sure that you have enough swap space and that it is
enabled.
2) pass the "no-hlt" option to the kernel
3) switch on floating point emulation in the kernel and pass
the "no387" option to the kernel
4) pass the "floppy=nodma" option to the kernel
5) pass the "mem=4M" option to the kernel (thereby disabling
all but the first 4 MB of RAM)
6) make sure that the CPU is not over clocked.
7) read the sig11 FAQ at <http://www.bitwizard.nl/sig11/>
8) disable the cache from your BIOS settings
9) install a fan for the video card or exchange video RAM
10) install a better fan for the CPU
11) exchange RAM chips
12) exchange the motherboard.

To compile this driver as a module, choose M here: the
module will be called apm.

APM_IGNORE_USER_SUSPEND

Ignore USER SUSPEND

This option will ignore USER SUSPEND requests. On machines with a
compliant APM BIOS, you want to say N. However, on the NEC Versa M
series notebooks, it is necessary to say Y because of a BIOS bug.

APM_DO_ENABLE

Enable PM at boot time

Enable APM features at boot time. From page 36 of the APM BIOS
specification: "When disabled, the APM BIOS does not automatically
power manage devices, enter the Standby State, enter the Suspend
State, or take power saving steps in response to CPU Idle calls."
This driver will make CPU Idle calls when Linux is idle (unless this
feature is turned off -- see "Do CPU IDLE calls", below). This
should always save battery power, but more complicated APM features
will be dependent on your BIOS implementation. You may need to turn
this option off if your computer hangs at boot time when using APM
support, or if it beeps continuously instead of suspending. Turn
this off if you have a NEC UltraLite Versa 33/C or a Toshiba
T400CDT. This is off by default since most machines do fine without
this feature.

APM_CPU_IDLE

Make CPU Idle calls when idle

Enable calls to APM CPU Idle/CPU Busy inside the kernel's idle loop.
On some machines, this can activate improved power savings, such as
a slowed CPU clock rate, when the machine is idle. These idle calls
are made after the idle loop has run for some length of time (e.g.,
333 mS). On some machines, this will cause a hang at boot time or
whenever the CPU becomes idle. (On machines with more than one CPU,
this option does nothing.)

APM_DISPLAY_BLANK

Enable console blanking using APM

Enable console blanking using the APM. Some laptops can use this to
turn off the LCD backlight when the screen blanker of the Linux
virtual console blanks the screen. Note that this is only used by
the virtual console screen blanker, and won't turn off the backlight
when using the X Window system. This also doesn't have anything to
do with your VESA-compliant power-saving monitor. Further, this
option doesn't work for all laptops -- it might not turn off your
backlight at all, or it might print a lot of errors to the console,
especially if you are using gpm.

APM_ALLOW_INTS

Allow interrupts during APM BIOS calls

Normally we disable external interrupts while we are making calls to
the APM BIOS as a measure to lessen the effects of a badly behaving
BIOS implementation.  The BIOS should reenable interrupts if it
needs to.  Unfortunately, some BIOSes do not -- especially those in
many of the newer IBM Thinkpads.  If you experience hangs when you
suspend, try setting this to Y.  Otherwise, say N.

drivers/cpufreq/Kconfig

drivers/cpuidle/Kconfig

drivers/idle/Kconfig



Menu: Bus options (PCI etc.)

APM_ALLOW_INTS

PCI access mode

On PCI systems, the BIOS can be used to detect the PCI devices and
determine their configuration. However, some old PCI motherboards
have BIOS bugs and may crash if this is done. Also, some embedded
PCI-based systems don't have any BIOS at all. Linux can also try to
detect the PCI hardware directly without using the BIOS.

With this option, you can specify how Linux should detect the
PCI devices. If you choose "BIOS", the BIOS will be used,
if you choose "Direct", the BIOS won't be used, and if you
choose "MMConfig", then PCI Express MMCONFIG will be used.
If you choose "Any", the kernel will try MMCONFIG, then the
direct access method and falls back to the BIOS if that doesn't
work. If unsure, go with the default, which is "Any".

PCI_CNB20LE_QUIRK

Read CNB20LE Host Bridge Windows

Read the PCI windows out of the CNB20LE host bridge. This allows
PCI hotplug to work on systems with the CNB20LE chipset which do
not have ACPI.

There's no public spec for this chipset, and this functionality
is known to be incomplete.

You should say N unless you know you need this.

ISA_BUS

ISA bus support on modern systems

Expose ISA bus device drivers and options available for selection and
configuration. Enable this option if your target machine has an ISA
bus. ISA is an older system, displaced by PCI and newer bus
architectures -- if your target machine is modern, it probably does
not have an ISA bus.

If unsure, say N.

ISA_DMA_API

ISA-style DMA support

Enables ISA-style DMA support for devices requiring such controllers.
If unsure, say Y.

ISA

ISA support

Find out whether you have ISA slots on your motherboard.  ISA is the
name of a bus system, i.e. the way the CPU talks to the other stuff
inside your box.  Other bus systems are PCI, EISA, MicroChannel
(MCA) or VESA.  ISA is an older system, now being displaced by PCI;
newer boards don't support it.  If you have ISA, say Y, otherwise N.

SCx200

NatSemi SCx200 support

This provides basic support for National Semiconductor's
(now AMD's) Geode processors.  The driver probes for the
PCI-IDs of several on-chip devices, so its a good dependency
for other scx200_* drivers.

If compiled as a module, the driver is named scx200.

SCx200HR_TIMER

NatSemi SCx200 27MHz High-Resolution Timer Support

This driver provides a clocksource built upon the on-chip
27MHz high-resolution timer.  Its also a workaround for
NSC Geode SC-1100's buggy TSC, which loses time when the
processor goes idle (as is done by the scheduler).  The
other workaround is idle=poll boot option.

OLPC

One Laptop Per Child support

Add support for detecting the unique features of the OLPC
XO hardware.

OLPC_XO1_PM

OLPC XO-1 Power Management

Add support for poweroff and suspend of the OLPC XO-1 laptop.

OLPC_XO1_RTC

OLPC XO-1 Real Time Clock

Add support for the XO-1 real time clock, which can be used as a
programmable wakeup source.

OLPC_XO1_SCI

OLPC XO-1 SCI extras

Add support for SCI-based features of the OLPC XO-1 laptop:
- EC-driven system wakeups
- Power button
- Ebook switch
- Lid switch
- AC adapter status updates
- Battery status updates

OLPC_XO15_SCI

OLPC XO-1.5 SCI extras

Add support for SCI-based features of the OLPC XO-1.5 laptop:
- EC-driven system wakeups
- AC adapter status updates
- Battery status updates

ALIX

PCEngines ALIX System Support (LED setup)

This option enables system support for the PCEngines ALIX.
At present this just sets up LEDs for GPIO control on
ALIX2/3/6 boards.  However, other system specific setup should
get added here.

Note: You must still enable the drivers for GPIO and LED support
(GPIO_CS5535 & LEDS_GPIO) to actually use the LEDs

Note: You have to set alix.force=1 for boards with Award BIOS.

NET5501

Soekris Engineering net5501 System Support (LEDS, GPIO, etc)

This option enables system support for the Soekris Engineering net5501.

GEOS

Traverse Technologies GEOS System Support (LEDS, GPIO, etc)

This option enables system support for the Traverse Technologies GEOS.

TS5500

Technologic Systems TS-5500 platform support

This option enables system support for the Technologic Systems TS-5500.

X86_SYSFB

Mark VGA/VBE/EFI FB as generic system framebuffer

Firmwares often provide initial graphics framebuffers so the BIOS,
bootloader or kernel can show basic video-output during boot for
user-guidance and debugging. Historically, x86 used the VESA BIOS
Extensions and EFI-framebuffers for this, which are mostly limited
to x86.
This option, if enabled, marks VGA/VBE/EFI framebuffers as generic
framebuffers so the new generic system-framebuffer drivers can be
used on x86. If the framebuffer is not compatible with the generic
modes, it is advertised as fallback platform framebuffer so legacy
drivers like efifb, vesafb and uvesafb can pick it up.
If this option is not selected, all system framebuffers are always
marked as fallback platform framebuffers as usual.

Note: Legacy fbdev drivers, including vesafb, efifb, uvesafb, will
not be able to pick up generic system framebuffers if this option
is selected. You are highly encouraged to enable simplefb as
replacement if you select this option. simplefb can correctly deal
with generic system framebuffers. But you should still keep vesafb
and others enabled as fallback if a system framebuffer is
incompatible with simplefb.

If unsure, say Y.



Menu: Binary Emulations

IA32_EMULATION

IA32 Emulation

Include code to run legacy 32-bit programs under a
64-bit kernel. You should likely turn this on, unless you're
100% sure that you don't have any 32-bit programs left.

IA32_AOUT

IA32 a.out support

Support old a.out binaries in the 32bit emulation.

X86_X32

x32 ABI for 64-bit mode

Include code to run binaries for the x32 native 32-bit ABI
for 64-bit processors.  An x32 process gets access to the
full 64-bit register file and wide data path while leaving
pointers at 32 bits for smaller memory footprint.

You will need a recent binutils (2.22 or later) with
elf32_x86_64 support enabled to compile a kernel with this
option set.


drivers/firmware/Kconfig

arch/x86/kvm/Kconfig

arch/x86/Kconfig.assembler