Skip to contentSkip to conversation

of: reduce the number of PROBE_DEFERs

PATCH In review Jean-Francois Moine 2 participants 4 messages Aug 20, 2013 – Aug 22, 2013 Device tree

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 of: reduce the number of PROBE_DEFERs

This patch populates the platform from the device tree into two steps:
the first step creates the nodes that are referenced by a phandle, the second step creates the other nodes.

This permits to reduce the number of PROBE_DEFERs.

---
A better way to reduce probe deferral could be sorting the nodes according to their phandle level in the DT blob at compilation time ...

---
 drivers/of/platform.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)
drivers/of/platform.c +16 -1
index e0a6514..a2ea858 100644
@@ -382,8 +382,23 @@ static int of_platform_bus_create(struct device_node *bus,
 	if (!dev || !of_match_node(matches, bus))
 		return 0;
 
+	/* first step: create the nodes that are referenced by phandle */
 	for_each_child_of_node(bus, child) {
-		pr_debug("   create child: %s\n", child->full_name);
+		if (child->phandle == 0)
+			continue;
+		pr_debug("   create child 1: %s\n", child->full_name);
+		rc = of_platform_bus_create(child, matches, lookup, &dev->dev, strict);
+		if (rc) {
+			of_node_put(child);
+			return rc;
+		}
+	}
+
+	/* second step: create the other nodes */
+	for_each_child_of_node(bus, child) {
+		if (child->phandle != 0)
+			continue;
+		pr_debug("   create child 2: %s\n", child->full_name);
 		rc = of_platform_bus_create(child, matches, lookup, &dev->dev, strict);
 		if (rc) {
 			of_node_put(child);
Signature · 2 lines
Ken ar c'hentañ	|	      ** Breizh ha Linux atav! **
Jef		|		http://moinejf.free.fr/
#1 lore raw
Quoted 10 lines · Jean-Francois Moine

This patch populates the platform from the device tree into two steps:
the first step creates the nodes that are referenced by a phandle, the second step creates the other nodes.

This permits to reduce the number of PROBE_DEFERs.

---
A better way to reduce probe deferral could be sorting the nodes according to their phandle level in the DT blob at compilation time ...

Have you got measurements or statistics that show this making a difference? I suspect you'll find for boot time it will have little to no affect since the device driver probe order is more closely related to the kernel link order than the order that devices were registered.

g.

Quoted 38 lines
---
 drivers/of/platform.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)
drivers/of/platform.c +16 -2
index e0a6514..a2ea858 100644
@@ -382,8 +382,23 @@ static int of_platform_bus_create(struct device_node *bus,
        if (!dev || !of_match_node(matches, bus))
                return 0;
 
+       /* first step: create the nodes that are referenced by phandle */
        for_each_child_of_node(bus, child) {
-               pr_debug("   create child: %s\n", child->full_name);
+               if (child->phandle == 0)
+                       continue;
+               pr_debug("   create child 1: %s\n", child->full_name);
+               rc = of_platform_bus_create(child, matches, lookup, &dev->dev, strict);
+               if (rc) {
+                       of_node_put(child);
+                       return rc;
+               }
+       }
+
+       /* second step: create the other nodes */
+       for_each_child_of_node(bus, child) {
+               if (child->phandle != 0)
+                       continue;
+               pr_debug("   create child 2: %s\n", child->full_name);
                rc = of_platform_bus_create(child, matches, lookup, &dev->dev, strict);
                if (rc) {
                        of_node_put(child);
 
 
--

Ken ar c'henta? | ** Breizh ha Linux atav! **
Jef | http://moinejf.free.fr/

#2 lore raw
Quoted 12 lines · On Tue, 20 Aug 2013 11:13:24 +0100 Grant Likely <[email protected]> wrote:
Quoted 10 lines · Jean-Francois Moine

This patch populates the platform from the device tree into two steps:
the first step creates the nodes that are referenced by a phandle, the second step creates the other nodes.

This permits to reduce the number of PROBE_DEFERs.

---
A better way to reduce probe deferral could be sorting the nodes according to their phandle level in the DT blob at compilation time ...

Quoted 4 lines

Have you got measurements or statistics that show this making a difference? I suspect you'll find for boot time it will have little to no affect since the device driver probe order is more closely related to the kernel link order than the order that devices were registered.

With the device tree and most drivers as modules, the kernel link order does not matter.

I admit that the gain may be small: I just get none or just one probe deferral instead of 3 on my cubox with this patch.

Signature · 2 lines
Ken ar c'hentañ	|	      ** Breizh ha Linux atav! **
Jef		|		http://moinejf.free.fr/
#3 lore raw
Quoted 20 lines · Jean-Francois Moine
Quoted 12 lines · On Tue, 20 Aug 2013 11:13:24 +0100 Grant Likely <[email protected]> wrote:
Quoted 10 lines · Jean-Francois Moine

This patch populates the platform from the device tree into two steps:
the first step creates the nodes that are referenced by a phandle, the second step creates the other nodes.

This permits to reduce the number of PROBE_DEFERs.

---
A better way to reduce probe deferral could be sorting the nodes according to their phandle level in the DT blob at compilation time ...

Quoted 4 lines

Have you got measurements or statistics that show this making a difference? I suspect you'll find for boot time it will have little to no affect since the device driver probe order is more closely related to the kernel link order than the order that devices were registered.

Quoted 5 lines

With the device tree and most drivers as modules, the kernel link order does not matter.

I admit that the gain may be small: I just get none or just one probe deferral instead of 3 on my cubox with this patch.

If you've only got 3 probe deferrals, then is this really an issue worth complicating the code over? I'd like to see a more significant impact before taking this step.

g.