summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/of-allocate-free-phandle-cache-outside-of-the-devtre.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt/of-allocate-free-phandle-cache-outside-of-the-devtre.patch')
-rw-r--r--debian/patches-rt/of-allocate-free-phandle-cache-outside-of-the-devtre.patch96
1 files changed, 0 insertions, 96 deletions
diff --git a/debian/patches-rt/of-allocate-free-phandle-cache-outside-of-the-devtre.patch b/debian/patches-rt/of-allocate-free-phandle-cache-outside-of-the-devtre.patch
deleted file mode 100644
index 7469e4fea..000000000
--- a/debian/patches-rt/of-allocate-free-phandle-cache-outside-of-the-devtre.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Date: Fri, 31 Aug 2018 14:16:30 +0200
-Subject: [PATCH] of: allocate / free phandle cache outside of the devtree_lock
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.2/older/patches-5.2.17-rt9.tar.xz
-
-The phandle cache code allocates memory while holding devtree_lock which
-is a raw_spinlock_t. Memory allocation (and free()) is not possible on
-RT while a raw_spinlock_t is held.
-Invoke the kfree() and kcalloc() while the lock is dropped.
-
-Cc: Rob Herring <robh+dt@kernel.org>
-Cc: Frank Rowand <frowand.list@gmail.com>
-Cc: devicetree@vger.kernel.org
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- drivers/of/base.c | 19 +++++++++++++------
- 1 file changed, 13 insertions(+), 6 deletions(-)
-
---- a/drivers/of/base.c
-+++ b/drivers/of/base.c
-@@ -138,31 +138,34 @@ static u32 phandle_cache_mask;
- /*
- * Caller must hold devtree_lock.
- */
--static void __of_free_phandle_cache(void)
-+static struct device_node** __of_free_phandle_cache(void)
- {
- u32 cache_entries = phandle_cache_mask + 1;
- u32 k;
-+ struct device_node **shadow;
-
- if (!phandle_cache)
-- return;
-+ return NULL;
-
- for (k = 0; k < cache_entries; k++)
- of_node_put(phandle_cache[k]);
-
-- kfree(phandle_cache);
-+ shadow = phandle_cache;
- phandle_cache = NULL;
-+ return shadow;
- }
-
- int of_free_phandle_cache(void)
- {
- unsigned long flags;
-+ struct device_node **shadow;
-
- raw_spin_lock_irqsave(&devtree_lock, flags);
-
-- __of_free_phandle_cache();
-+ shadow = __of_free_phandle_cache();
-
- raw_spin_unlock_irqrestore(&devtree_lock, flags);
--
-+ kfree(shadow);
- return 0;
- }
- #if !defined(CONFIG_MODULES)
-@@ -197,10 +200,11 @@ void of_populate_phandle_cache(void)
- u32 cache_entries;
- struct device_node *np;
- u32 phandles = 0;
-+ struct device_node **shadow;
-
- raw_spin_lock_irqsave(&devtree_lock, flags);
-
-- __of_free_phandle_cache();
-+ shadow = __of_free_phandle_cache();
-
- for_each_of_allnodes(np)
- if (np->phandle && np->phandle != OF_PHANDLE_ILLEGAL)
-@@ -208,12 +212,14 @@ void of_populate_phandle_cache(void)
-
- if (!phandles)
- goto out;
-+ raw_spin_unlock_irqrestore(&devtree_lock, flags);
-
- cache_entries = roundup_pow_of_two(phandles);
- phandle_cache_mask = cache_entries - 1;
-
- phandle_cache = kcalloc(cache_entries, sizeof(*phandle_cache),
- GFP_ATOMIC);
-+ raw_spin_lock_irqsave(&devtree_lock, flags);
- if (!phandle_cache)
- goto out;
-
-@@ -225,6 +231,7 @@ void of_populate_phandle_cache(void)
-
- out:
- raw_spin_unlock_irqrestore(&devtree_lock, flags);
-+ kfree(shadow);
- }
-
- void __init of_core_init(void)