summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/mm-Disable-zsmalloc-on-PREEMPT_RT.patch
diff options
context:
space:
mode:
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.patch47
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