Thread (6 messages) 6 messages, 2 authors, 2018-02-28

Re: [PATCH v3] of: cache phandle nodes to reduce cost of of_find_node_by_phandle()

From: Frank Rowand <hidden>
Date: 2018-02-16 22:33:36
Also in: lkml

On 02/16/18 14:20, Frank Rowand wrote:
On 02/16/18 01:04, Chintan Pandya wrote:
quoted

On 2/15/2018 6:22 AM, frowand.list-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org wrote:
quoted
From: Frank Rowand <frank.rowand-7U/KSKJipcs@public.gmane.org>

Create a cache of the nodes that contain a phandle property.  Use this
cache to find the node for a given phandle value instead of scanning
the devicetree to find the node.  If the phandle value is not found
in the cache, of_find_node_by_phandle() will fall back to the tree
scan algorithm.
< snip >
quoted
quoted
diff --git a/drivers/of/base.c b/drivers/of/base.c
index ad28de96e13f..ab545dfa9173 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -91,10 +91,69 @@ int __weak of_node_to_nid(struct device_node *np)
  }
  #endif
  +static struct device_node **phandle_cache;
+static u32 phandle_cache_mask;
+
+/*
+ * Assumptions behind phandle_cache implementation:
+ *   - phandle property values are in a contiguous range of 1..n
+ *
+ * If the assumptions do not hold, then
+ *   - the phandle lookup overhead reduction provided by the cache
+ *     will likely be less
+ */
+static void of_populate_phandle_cache(void)
+{
+    unsigned long flags;
+    u32 cache_entries;
+    struct device_node *np;
+    u32 phandles = 0;
+
+    raw_spin_lock_irqsave(&devtree_lock, flags);
+
+    kfree(phandle_cache);
I couldn't understood this. Everything else looks good to me.
I will be adding a call to of_populate_phandle_cache() from the
devicetree overlay code.  I put the kfree here so that the previous
cache memory is freed when a new cache is created.

Adding the call from the overlay code is not done in this
series because I have a patch series modifying overlays and
I do not want to create a conflict or ordering between that
series and that patch.  The lack of the call from overlay
             ^^^^ this
code means that overlay code will gain some of the overhead
reduction from this patch, but possibly not the entire reduction.

quoted
quoted
+    phandle_cache = NULL;
+
+    for_each_of_allnodes(np)
< snip >
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help