mm/highmem: Provide and use CONFIG_DEBUG_KMAP_LOCAL

CONFIG_KMAP_LOCAL can be enabled by x86/32bit even if CONFIG_HIGHMEM is not
enabled for temporary MMIO space mappings.

Provide it as a seperate config option which depends on CONFIG_KMAP_LOCAL
and let CONFIG_DEBUG_HIGHMEM select it.

This won't increase the debug coverage of this significantly but it paves
the way to do so.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20201118204006.869487226@linutronix.de
This commit is contained in:
Thomas Gleixner 2020-11-18 20:48:39 +01:00
parent 13c8da5db4
commit 6e799cb69a
3 changed files with 11 additions and 3 deletions

View File

@ -3,7 +3,7 @@
#define _ASM_GENERIC_KMAP_SIZE_H #define _ASM_GENERIC_KMAP_SIZE_H
/* For debug this provides guard pages between the maps */ /* For debug this provides guard pages between the maps */
#ifdef CONFIG_DEBUG_HIGHMEM #ifdef CONFIG_DEBUG_KMAP_LOCAL
# define KM_MAX_IDX 33 # define KM_MAX_IDX 33
#else #else
# define KM_MAX_IDX 16 # define KM_MAX_IDX 16

View File

@ -849,9 +849,17 @@ config DEBUG_PER_CPU_MAPS
Say N if unsure. Say N if unsure.
config DEBUG_KMAP_LOCAL
bool "Debug kmap_local temporary mappings"
depends on DEBUG_KERNEL && KMAP_LOCAL
help
This option enables additional error checking for the kmap_local
infrastructure. Disable for production use.
config DEBUG_HIGHMEM config DEBUG_HIGHMEM
bool "Highmem debugging" bool "Highmem debugging"
depends on DEBUG_KERNEL && HIGHMEM depends on DEBUG_KERNEL && HIGHMEM
select DEBUG_KMAP_LOCAL
help help
This option enables additional error checking for high memory This option enables additional error checking for high memory
systems. Disable for production systems. systems. Disable for production systems.

View File

@ -368,10 +368,10 @@ EXPORT_SYMBOL(kunmap_high);
static DEFINE_PER_CPU(int, __kmap_local_idx); static DEFINE_PER_CPU(int, __kmap_local_idx);
/* /*
* With DEBUG_HIGHMEM the stack depth is doubled and every second * With DEBUG_KMAP_LOCAL the stack depth is doubled and every second
* slot is unused which acts as a guard page * slot is unused which acts as a guard page
*/ */
#ifdef CONFIG_DEBUG_HIGHMEM #ifdef CONFIG_DEBUG_KMAP_LOCAL
# define KM_INCR 2 # define KM_INCR 2
#else #else
# define KM_INCR 1 # define KM_INCR 1