summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0082-slub-Enable-irqs-for-__GFP_WAIT.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt/0082-slub-Enable-irqs-for-__GFP_WAIT.patch')
-rw-r--r--debian/patches-rt/0082-slub-Enable-irqs-for-__GFP_WAIT.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/debian/patches-rt/0082-slub-Enable-irqs-for-__GFP_WAIT.patch b/debian/patches-rt/0082-slub-Enable-irqs-for-__GFP_WAIT.patch
new file mode 100644
index 000000000..05fa462e3
--- /dev/null
+++ b/debian/patches-rt/0082-slub-Enable-irqs-for-__GFP_WAIT.patch
@@ -0,0 +1,48 @@
+From e2e03d2e904d1df3d1e70dd70d5d939a6f5ccb26 Mon Sep 17 00:00:00 2001
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Wed, 9 Jan 2013 12:08:15 +0100
+Subject: [PATCH 082/347] slub: Enable irqs for __GFP_WAIT
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.19/older/patches-4.19.246-rt110.tar.xz
+
+SYSTEM_RUNNING might be too late for enabling interrupts. Allocations
+with GFP_WAIT can happen before that. So use this as an indicator.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ mm/slub.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/mm/slub.c b/mm/slub.c
+index 959ccf873292..3b1edb545215 100644
+--- a/mm/slub.c
++++ b/mm/slub.c
+@@ -1597,10 +1597,17 @@ static struct page *allocate_slab(struct kmem_cache *s, gfp_t flags, int node)
+ void *start, *p;
+ int idx, order;
+ bool shuffle;
++ bool enableirqs = false;
+
+ flags &= gfp_allowed_mask;
+
+ if (gfpflags_allow_blocking(flags))
++ enableirqs = true;
++#ifdef CONFIG_PREEMPT_RT_FULL
++ if (system_state > SYSTEM_BOOTING)
++ enableirqs = true;
++#endif
++ if (enableirqs)
+ local_irq_enable();
+
+ flags |= s->allocflags;
+@@ -1659,7 +1666,7 @@ static struct page *allocate_slab(struct kmem_cache *s, gfp_t flags, int node)
+ page->frozen = 1;
+
+ out:
+- if (gfpflags_allow_blocking(flags))
++ if (enableirqs)
+ local_irq_disable();
+ if (!page)
+ return NULL;
+--
+2.36.1
+