diff options
Diffstat (limited to 'debian/patches-rt/mm-Disable-zsmalloc-on-PREEMPT_RT.patch')
-rw-r--r-- | debian/patches-rt/mm-Disable-zsmalloc-on-PREEMPT_RT.patch | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/debian/patches-rt/mm-Disable-zsmalloc-on-PREEMPT_RT.patch b/debian/patches-rt/mm-Disable-zsmalloc-on-PREEMPT_RT.patch new file mode 100644 index 000000000..8b4b653f0 --- /dev/null +++ b/debian/patches-rt/mm-Disable-zsmalloc-on-PREEMPT_RT.patch @@ -0,0 +1,47 @@ +From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +Date: Thu, 23 Sep 2021 15:51:48 +0200 +Subject: [PATCH] mm: Disable zsmalloc on PREEMPT_RT +Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.15/older/patches-5.15.3-rt21.tar.xz + +For efficiency reasons, zsmalloc is using a slim `handle'. The value is +the address of a memory allocation of 4 or 8 bytes depending on the size +of the long data type. The lowest bit in that allocated memory is used +as a bit spin lock. +The usage of the bit spin lock is problematic because with the bit spin +lock held zsmalloc acquires a rwlock_t and spinlock_t which are both +sleeping locks on PREEMPT_RT and therefore must not be acquired with +disabled preemption. + +There is a patch which extends the handle on PREEMPT_RT so that a full +spinlock_t fits (even with lockdep enabled) and then eliminates the bit +spin lock. I'm not sure how sensible zsmalloc on PREEMPT_RT is given +that it is used to store compressed user memory. + +Disable ZSMALLOC on PREEMPT_RT. If there is need for it, we can try to +get it to work. + +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +Link: https://lkml.kernel.org/r/20210923170121.1860133-1-bigeasy@linutronix.de +--- + mm/Kconfig | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/mm/Kconfig ++++ b/mm/Kconfig +@@ -640,6 +640,7 @@ config ZSWAP_ZPOOL_DEFAULT_Z3FOLD + + config ZSWAP_ZPOOL_DEFAULT_ZSMALLOC + bool "zsmalloc" ++ depends on !PREEMPT_RT + select ZSMALLOC + help + Use the zsmalloc allocator as the default allocator. +@@ -690,7 +691,7 @@ config Z3FOLD + + config ZSMALLOC + tristate "Memory allocator for compressed pages" +- depends on MMU ++ depends on MMU && !PREEMPT_RT + help + zsmalloc is a slab-based memory allocator designed to store + compressed RAM pages. zsmalloc uses virtual memory mapping |