mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
5d8beee20d
Given the fact that the ACPI "EINJ" (error injection) facility is not universally available, implement software infrastructure to validate the memcpy_mcsafe() exception handling implementation. For each potential read exception point in memcpy_mcsafe(), inject a emulated exception point at the address identified by 'mcsafe_inject' variable. With this infrastructure implement a test to validate that the 'bytes remaining' calculation is correct for a range of various source buffer alignments. This code is compiled out by default. The CONFIG_MCSAFE_DEBUG configuration symbol needs to be manually enabled by editing Kconfig.debug. I.e. this functionality can not be accidentally enabled by a user / distro, it's only for development. Cc: <x86@kernel.org> Cc: Ingo Molnar <mingo@redhat.com> Cc: Borislav Petkov <bp@alien8.de> Cc: Tony Luck <tony.luck@intel.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Reported-by: Tony Luck <tony.luck@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
415 lines
12 KiB
Plaintext
415 lines
12 KiB
Plaintext
# SPDX-License-Identifier: GPL-2.0
|
|
menu "Kernel hacking"
|
|
|
|
config TRACE_IRQFLAGS_SUPPORT
|
|
def_bool y
|
|
|
|
source "lib/Kconfig.debug"
|
|
|
|
config EARLY_PRINTK_USB
|
|
bool
|
|
|
|
config X86_VERBOSE_BOOTUP
|
|
bool "Enable verbose x86 bootup info messages"
|
|
default y
|
|
---help---
|
|
Enables the informational output from the decompression stage
|
|
(e.g. bzImage) of the boot. If you disable this you will still
|
|
see errors. Disable this if you want silent bootup.
|
|
|
|
config EARLY_PRINTK
|
|
bool "Early printk" if EXPERT
|
|
default y
|
|
---help---
|
|
Write kernel log output directly into the VGA buffer or to a serial
|
|
port.
|
|
|
|
This is useful for kernel debugging when your machine crashes very
|
|
early before the console code is initialized. For normal operation
|
|
it is not recommended because it looks ugly and doesn't cooperate
|
|
with klogd/syslogd or the X server. You should normally say N here,
|
|
unless you want to debug such a crash.
|
|
|
|
config EARLY_PRINTK_DBGP
|
|
bool "Early printk via EHCI debug port"
|
|
depends on EARLY_PRINTK && PCI
|
|
select EARLY_PRINTK_USB
|
|
---help---
|
|
Write kernel log output directly into the EHCI debug port.
|
|
|
|
This is useful for kernel debugging when your machine crashes very
|
|
early before the console code is initialized. For normal operation
|
|
it is not recommended because it looks ugly and doesn't cooperate
|
|
with klogd/syslogd or the X server. You should normally say N here,
|
|
unless you want to debug such a crash. You need usb debug device.
|
|
|
|
config EARLY_PRINTK_EFI
|
|
bool "Early printk via the EFI framebuffer"
|
|
depends on EFI && EARLY_PRINTK
|
|
select FONT_SUPPORT
|
|
---help---
|
|
Write kernel log output directly into the EFI framebuffer.
|
|
|
|
This is useful for kernel debugging when your machine crashes very
|
|
early before the console code is initialized.
|
|
|
|
config EARLY_PRINTK_USB_XDBC
|
|
bool "Early printk via the xHCI debug port"
|
|
depends on EARLY_PRINTK && PCI
|
|
select EARLY_PRINTK_USB
|
|
---help---
|
|
Write kernel log output directly into the xHCI debug port.
|
|
|
|
One use for this feature is kernel debugging, for example when your
|
|
machine crashes very early before the regular console code is
|
|
initialized. Other uses include simpler, lockless logging instead of
|
|
a full-blown printk console driver + klogd.
|
|
|
|
For normal production environments this is normally not recommended,
|
|
because it doesn't feed events into klogd/syslogd and doesn't try to
|
|
print anything on the screen.
|
|
|
|
You should normally say N here, unless you want to debug early
|
|
crashes or need a very simple printk logging facility.
|
|
|
|
config MCSAFE_TEST
|
|
def_bool n
|
|
|
|
config X86_PTDUMP_CORE
|
|
def_bool n
|
|
|
|
config X86_PTDUMP
|
|
tristate "Export kernel pagetable layout to userspace via debugfs"
|
|
depends on DEBUG_KERNEL
|
|
select DEBUG_FS
|
|
select X86_PTDUMP_CORE
|
|
---help---
|
|
Say Y here if you want to show the kernel pagetable layout in a
|
|
debugfs file. This information is only useful for kernel developers
|
|
who are working in architecture specific areas of the kernel.
|
|
It is probably not a good idea to enable this feature in a production
|
|
kernel.
|
|
If in doubt, say "N"
|
|
|
|
config EFI_PGT_DUMP
|
|
bool "Dump the EFI pagetable"
|
|
depends on EFI
|
|
select X86_PTDUMP_CORE
|
|
---help---
|
|
Enable this if you want to dump the EFI page table before
|
|
enabling virtual mode. This can be used to debug miscellaneous
|
|
issues with the mapping of the EFI runtime regions into that
|
|
table.
|
|
|
|
config DEBUG_WX
|
|
bool "Warn on W+X mappings at boot"
|
|
select X86_PTDUMP_CORE
|
|
---help---
|
|
Generate a warning if any W+X mappings are found at boot.
|
|
|
|
This is useful for discovering cases where the kernel is leaving
|
|
W+X mappings after applying NX, as such mappings are a security risk.
|
|
|
|
Look for a message in dmesg output like this:
|
|
|
|
x86/mm: Checked W+X mappings: passed, no W+X pages found.
|
|
|
|
or like this, if the check failed:
|
|
|
|
x86/mm: Checked W+X mappings: FAILED, <N> W+X pages found.
|
|
|
|
Note that even if the check fails, your kernel is possibly
|
|
still fine, as W+X mappings are not a security hole in
|
|
themselves, what they do is that they make the exploitation
|
|
of other unfixed kernel bugs easier.
|
|
|
|
There is no runtime or memory usage effect of this option
|
|
once the kernel has booted up - it's a one time check.
|
|
|
|
If in doubt, say "Y".
|
|
|
|
config DOUBLEFAULT
|
|
default y
|
|
bool "Enable doublefault exception handler" if EXPERT
|
|
---help---
|
|
This option allows trapping of rare doublefault exceptions that
|
|
would otherwise cause a system to silently reboot. Disabling this
|
|
option saves about 4k and might cause you much additional grey
|
|
hair.
|
|
|
|
config DEBUG_TLBFLUSH
|
|
bool "Set upper limit of TLB entries to flush one-by-one"
|
|
depends on DEBUG_KERNEL
|
|
---help---
|
|
|
|
X86-only for now.
|
|
|
|
This option allows the user to tune the amount of TLB entries the
|
|
kernel flushes one-by-one instead of doing a full TLB flush. In
|
|
certain situations, the former is cheaper. This is controlled by the
|
|
tlb_flushall_shift knob under /sys/kernel/debug/x86. If you set it
|
|
to -1, the code flushes the whole TLB unconditionally. Otherwise,
|
|
for positive values of it, the kernel will use single TLB entry
|
|
invalidating instructions according to the following formula:
|
|
|
|
flush_entries <= active_tlb_entries / 2^tlb_flushall_shift
|
|
|
|
If in doubt, say "N".
|
|
|
|
config IOMMU_DEBUG
|
|
bool "Enable IOMMU debugging"
|
|
depends on GART_IOMMU && DEBUG_KERNEL
|
|
depends on X86_64
|
|
---help---
|
|
Force the IOMMU to on even when you have less than 4GB of
|
|
memory and add debugging code. On overflow always panic. And
|
|
allow to enable IOMMU leak tracing. Can be disabled at boot
|
|
time with iommu=noforce. This will also enable scatter gather
|
|
list merging. Currently not recommended for production
|
|
code. When you use it make sure you have a big enough
|
|
IOMMU/AGP aperture. Most of the options enabled by this can
|
|
be set more finegrained using the iommu= command line
|
|
options. See Documentation/x86/x86_64/boot-options.txt for more
|
|
details.
|
|
|
|
config IOMMU_LEAK
|
|
bool "IOMMU leak tracing"
|
|
depends on IOMMU_DEBUG && DMA_API_DEBUG
|
|
---help---
|
|
Add a simple leak tracer to the IOMMU code. This is useful when you
|
|
are debugging a buggy device driver that leaks IOMMU mappings.
|
|
|
|
config HAVE_MMIOTRACE_SUPPORT
|
|
def_bool y
|
|
|
|
config X86_DECODER_SELFTEST
|
|
bool "x86 instruction decoder selftest"
|
|
depends on DEBUG_KERNEL && KPROBES
|
|
depends on !COMPILE_TEST
|
|
---help---
|
|
Perform x86 instruction decoder selftests at build time.
|
|
This option is useful for checking the sanity of x86 instruction
|
|
decoder code.
|
|
If unsure, say "N".
|
|
|
|
#
|
|
# IO delay types:
|
|
#
|
|
|
|
config IO_DELAY_TYPE_0X80
|
|
int
|
|
default "0"
|
|
|
|
config IO_DELAY_TYPE_0XED
|
|
int
|
|
default "1"
|
|
|
|
config IO_DELAY_TYPE_UDELAY
|
|
int
|
|
default "2"
|
|
|
|
config IO_DELAY_TYPE_NONE
|
|
int
|
|
default "3"
|
|
|
|
choice
|
|
prompt "IO delay type"
|
|
default IO_DELAY_0X80
|
|
|
|
config IO_DELAY_0X80
|
|
bool "port 0x80 based port-IO delay [recommended]"
|
|
---help---
|
|
This is the traditional Linux IO delay used for in/out_p.
|
|
It is the most tested hence safest selection here.
|
|
|
|
config IO_DELAY_0XED
|
|
bool "port 0xed based port-IO delay"
|
|
---help---
|
|
Use port 0xed as the IO delay. This frees up port 0x80 which is
|
|
often used as a hardware-debug port.
|
|
|
|
config IO_DELAY_UDELAY
|
|
bool "udelay based port-IO delay"
|
|
---help---
|
|
Use udelay(2) as the IO delay method. This provides the delay
|
|
while not having any side-effect on the IO port space.
|
|
|
|
config IO_DELAY_NONE
|
|
bool "no port-IO delay"
|
|
---help---
|
|
No port-IO delay. Will break on old boxes that require port-IO
|
|
delay for certain operations. Should work on most new machines.
|
|
|
|
endchoice
|
|
|
|
if IO_DELAY_0X80
|
|
config DEFAULT_IO_DELAY_TYPE
|
|
int
|
|
default IO_DELAY_TYPE_0X80
|
|
endif
|
|
|
|
if IO_DELAY_0XED
|
|
config DEFAULT_IO_DELAY_TYPE
|
|
int
|
|
default IO_DELAY_TYPE_0XED
|
|
endif
|
|
|
|
if IO_DELAY_UDELAY
|
|
config DEFAULT_IO_DELAY_TYPE
|
|
int
|
|
default IO_DELAY_TYPE_UDELAY
|
|
endif
|
|
|
|
if IO_DELAY_NONE
|
|
config DEFAULT_IO_DELAY_TYPE
|
|
int
|
|
default IO_DELAY_TYPE_NONE
|
|
endif
|
|
|
|
config DEBUG_BOOT_PARAMS
|
|
bool "Debug boot parameters"
|
|
depends on DEBUG_KERNEL
|
|
depends on DEBUG_FS
|
|
---help---
|
|
This option will cause struct boot_params to be exported via debugfs.
|
|
|
|
config CPA_DEBUG
|
|
bool "CPA self-test code"
|
|
depends on DEBUG_KERNEL
|
|
---help---
|
|
Do change_page_attr() self-tests every 30 seconds.
|
|
|
|
config OPTIMIZE_INLINING
|
|
bool "Allow gcc to uninline functions marked 'inline'"
|
|
---help---
|
|
This option determines if the kernel forces gcc to inline the functions
|
|
developers have marked 'inline'. Doing so takes away freedom from gcc to
|
|
do what it thinks is best, which is desirable for the gcc 3.x series of
|
|
compilers. The gcc 4.x series have a rewritten inlining algorithm and
|
|
enabling this option will generate a smaller kernel there. Hopefully
|
|
this algorithm is so good that allowing gcc 4.x and above to make the
|
|
decision will become the default in the future. Until then this option
|
|
is there to test gcc for this.
|
|
|
|
If unsure, say N.
|
|
|
|
config DEBUG_ENTRY
|
|
bool "Debug low-level entry code"
|
|
depends on DEBUG_KERNEL
|
|
---help---
|
|
This option enables sanity checks in x86's low-level entry code.
|
|
Some of these sanity checks may slow down kernel entries and
|
|
exits or otherwise impact performance.
|
|
|
|
If unsure, say N.
|
|
|
|
config DEBUG_NMI_SELFTEST
|
|
bool "NMI Selftest"
|
|
depends on DEBUG_KERNEL && X86_LOCAL_APIC
|
|
---help---
|
|
Enabling this option turns on a quick NMI selftest to verify
|
|
that the NMI behaves correctly.
|
|
|
|
This might help diagnose strange hangs that rely on NMI to
|
|
function properly.
|
|
|
|
If unsure, say N.
|
|
|
|
config DEBUG_IMR_SELFTEST
|
|
bool "Isolated Memory Region self test"
|
|
default n
|
|
depends on INTEL_IMR
|
|
---help---
|
|
This option enables automated sanity testing of the IMR code.
|
|
Some simple tests are run to verify IMR bounds checking, alignment
|
|
and overlapping. This option is really only useful if you are
|
|
debugging an IMR memory map or are modifying the IMR code and want to
|
|
test your changes.
|
|
|
|
If unsure say N here.
|
|
|
|
config X86_DEBUG_FPU
|
|
bool "Debug the x86 FPU code"
|
|
depends on DEBUG_KERNEL
|
|
default y
|
|
---help---
|
|
If this option is enabled then there will be extra sanity
|
|
checks and (boot time) debug printouts added to the kernel.
|
|
This debugging adds some small amount of runtime overhead
|
|
to the kernel.
|
|
|
|
If unsure, say N.
|
|
|
|
config PUNIT_ATOM_DEBUG
|
|
tristate "ATOM Punit debug driver"
|
|
depends on PCI
|
|
select DEBUG_FS
|
|
select IOSF_MBI
|
|
---help---
|
|
This is a debug driver, which gets the power states
|
|
of all Punit North Complex devices. The power states of
|
|
each device is exposed as part of the debugfs interface.
|
|
The current power state can be read from
|
|
/sys/kernel/debug/punit_atom/dev_power_state
|
|
|
|
choice
|
|
prompt "Choose kernel unwinder"
|
|
default UNWINDER_ORC if X86_64
|
|
default UNWINDER_FRAME_POINTER if X86_32
|
|
---help---
|
|
This determines which method will be used for unwinding kernel stack
|
|
traces for panics, oopses, bugs, warnings, perf, /proc/<pid>/stack,
|
|
livepatch, lockdep, and more.
|
|
|
|
config UNWINDER_ORC
|
|
bool "ORC unwinder"
|
|
depends on X86_64
|
|
select STACK_VALIDATION
|
|
---help---
|
|
This option enables the ORC (Oops Rewind Capability) unwinder for
|
|
unwinding kernel stack traces. It uses a custom data format which is
|
|
a simplified version of the DWARF Call Frame Information standard.
|
|
|
|
This unwinder is more accurate across interrupt entry frames than the
|
|
frame pointer unwinder. It also enables a 5-10% performance
|
|
improvement across the entire kernel compared to frame pointers.
|
|
|
|
Enabling this option will increase the kernel's runtime memory usage
|
|
by roughly 2-4MB, depending on your kernel config.
|
|
|
|
config UNWINDER_FRAME_POINTER
|
|
bool "Frame pointer unwinder"
|
|
select FRAME_POINTER
|
|
---help---
|
|
This option enables the frame pointer unwinder for unwinding kernel
|
|
stack traces.
|
|
|
|
The unwinder itself is fast and it uses less RAM than the ORC
|
|
unwinder, but the kernel text size will grow by ~3% and the kernel's
|
|
overall performance will degrade by roughly 5-10%.
|
|
|
|
This option is recommended if you want to use the livepatch
|
|
consistency model, as this is currently the only way to get a
|
|
reliable stack trace (CONFIG_HAVE_RELIABLE_STACKTRACE).
|
|
|
|
config UNWINDER_GUESS
|
|
bool "Guess unwinder"
|
|
depends on EXPERT
|
|
depends on !STACKDEPOT
|
|
---help---
|
|
This option enables the "guess" unwinder for unwinding kernel stack
|
|
traces. It scans the stack and reports every kernel text address it
|
|
finds. Some of the addresses it reports may be incorrect.
|
|
|
|
While this option often produces false positives, it can still be
|
|
useful in many cases. Unlike the other unwinders, it has no runtime
|
|
overhead.
|
|
|
|
endchoice
|
|
|
|
config FRAME_POINTER
|
|
depends on !UNWINDER_ORC && !UNWINDER_GUESS
|
|
bool
|
|
|
|
endmenu
|