android_kernel_xiaomi_sm8350/mm/Kconfig.debug
Sudarshan Rajagopalan fb23f8fa6a mm, page_owner: set page owner info for tail pages
When allocating higher order pages, currently only the head page is set
with page owner info, leaving the tail pages with previous or stale info.
This patch sets the info for tail pages too and sets the time of free in
page owner info of all pages during free. This patch also adds an extra
info to page extension flags to help check if page is in buddy or not.

Change-Id: I96d13485af698d586a4dd7b1092a379a645c8fcb
Signed-off-by: Sudarshan Rajagopalan <sudaraja@codeaurora.org>
[cgoldswo@codeaurora.org: Fix merge conflicts, add GKI #ifdef guards]
Signed-off-by: Chris Goldsworthy <cgoldswo@codeaurora.org>
2020-02-27 15:13:14 -08:00

168 lines
6.5 KiB
Plaintext

# SPDX-License-Identifier: GPL-2.0-only
config PAGE_EXTENSION
bool "Extend memmap on extra space for more information on page"
---help---
Extend memmap on extra space for more information on page. This
could be used for debugging features that need to insert extra
field for every page. This extension enables us to save memory
by not allocating this extra memory according to boottime
configuration.
config PAGE_EXTENSION_PAGE_FREE
bool "Add a flag in page_ext_flags to indicate if a page is free"
depends on PAGE_EXTENSION && QGKI
help
Add the PAGE_FREE flag in page_ext_flags, in order to indicate
whether a page from the buddy allocator is free or is in
use. This information can aid in debugging buddy allocator
related issues.
config DEBUG_PAGEALLOC
bool "Debug page memory allocations"
depends on DEBUG_KERNEL
depends on !HIBERNATION || ARCH_SUPPORTS_DEBUG_PAGEALLOC && !PPC && !SPARC
select PAGE_POISONING if !ARCH_SUPPORTS_DEBUG_PAGEALLOC
---help---
Unmap pages from the kernel linear mapping after free_pages().
Depending on runtime enablement, this results in a small or large
slowdown, but helps to find certain types of memory corruption.
Also, the state of page tracking structures is checked more often as
pages are being allocated and freed, as unexpected state changes
often happen for same reasons as memory corruption (e.g. double free,
use-after-free). The error reports for these checks can be augmented
with stack traces of last allocation and freeing of the page, when
PAGE_OWNER is also selected and enabled on boot.
For architectures which don't enable ARCH_SUPPORTS_DEBUG_PAGEALLOC,
fill the pages with poison patterns after free_pages() and verify
the patterns before alloc_pages(). Additionally, this option cannot
be enabled in combination with hibernation as that would result in
incorrect warnings of memory corruption after a resume because free
pages are not saved to the suspend image.
By default this option will have a small overhead, e.g. by not
allowing the kernel mapping to be backed by large pages on some
architectures. Even bigger overhead comes when the debugging is
enabled by DEBUG_PAGEALLOC_ENABLE_DEFAULT or the debug_pagealloc
command line parameter.
config SLUB_DEBUG_PANIC_ON
bool "Enable to Panic on SLUB corruption detection"
depends on SLUB_DEBUG
help
SLUB has a resiliency feature enabled which restores bytes in
order for production environments to continue to operate. IN
debug options this may not be desirable as it prevents from
investigating the root cause which may be rooted within cache
or memory.
config DEBUG_PANIC_ON_OOM
bool "Enable to Panic on OOM detection"
help
Android primarily uses an alternative mechanism to detect low
memory situations and kill processes as required. The kernel
oom-killer can mask problems with this feature, which may be
undesireable in a debug environment.
config DEBUG_PAGEALLOC_ENABLE_DEFAULT
bool "Enable debug page memory allocations by default?"
depends on DEBUG_PAGEALLOC
---help---
Enable debug page memory allocations by default? This value
can be overridden by debug_pagealloc=off|on.
config PAGE_OWNER
bool "Track page owner"
depends on DEBUG_KERNEL && STACKTRACE_SUPPORT
select DEBUG_FS
select STACKTRACE
select STACKDEPOT
select PAGE_EXTENSION
help
This keeps track of what call chain is the owner of a page, may
help to find bare alloc_page(s) leaks. Even if you include this
feature on your build, it is disabled in default. You should pass
"page_owner=on" to boot parameter in order to enable it. Eats
a fair amount of memory if enabled. See tools/vm/page_owner_sort.c
for user-space helper.
If unsure, say N.
config PAGE_OWNER_ENABLE_DEFAULT
bool "Enable Track page owner by default"
depends on PAGE_OWNER
help
This keeps track of what call chain is the owner of a page, may
help to find bare alloc_page(s) leaks. If you include this
feature on your build, it is enabled by default. You should pass
"page_owner=off" to boot parameter in order to disable it. Eats
a fair amount of memory if enabled. See tools/vm/page_owner_sort.c
for user-space helper.
config PAGE_POISONING
bool "Poison pages after freeing"
select PAGE_POISONING_NO_SANITY if HIBERNATION
---help---
Fill the pages with poison patterns after free_pages() and verify
the patterns before alloc_pages. The filling of the memory helps
reduce the risk of information leaks from freed data. This does
have a potential performance impact if enabled with the
"page_poison=1" kernel boot option.
Note that "poison" here is not the same thing as the "HWPoison"
for CONFIG_MEMORY_FAILURE. This is software poisoning only.
If unsure, say N
config PAGE_POISONING_ENABLE_DEFAULT
bool "Enable page poisoning by default?"
default n
depends on PAGE_POISONING
help
Enable page poisoning of free pages by default? This value
can be overridden by page_poison=off|on. This can be used
to avoid passing the kernel parameter and let page poisoning
feature enabled by default.
config PAGE_POISONING_NO_SANITY
depends on PAGE_POISONING
bool "Only poison, don't sanity check"
---help---
Skip the sanity checking on alloc, only fill the pages with
poison on free. This reduces some of the overhead of the
poisoning feature.
If you are only interested in sanitization, say Y. Otherwise
say N.
config PAGE_POISONING_ZERO
bool "Use zero for poisoning instead of debugging value"
depends on PAGE_POISONING
---help---
Instead of using the existing poison value, fill the pages with
zeros. This makes it harder to detect when errors are occurring
due to sanitization but the zeroing at free means that it is
no longer necessary to write zeros when GFP_ZERO is used on
allocation.
If unsure, say N
config DEBUG_PAGE_REF
bool "Enable tracepoint to track down page reference manipulation"
depends on DEBUG_KERNEL
depends on TRACEPOINTS
---help---
This is a feature to add tracepoint for tracking down page reference
manipulation. This tracking is useful to diagnose functional failure
due to migration failures caused by page reference mismatches. Be
careful when enabling this feature because it adds about 30 KB to the
kernel code. However the runtime performance overhead is virtually
nil until the tracepoints are actually enabled.
config DEBUG_RODATA_TEST
bool "Testcase for the marking rodata read-only"
depends on STRICT_KERNEL_RWX
---help---
This option enables a testcase for the setting rodata read-only.