* [PATCH v2] Removes OF_UNITTEST dependency on OF_DYNAMIC config symbol @ 2015-01-11 7:19 Gaurav Minocha [not found] ` <1420960791-26761-1-git-send-email-gaurav.minocha.os-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 5+ messages in thread From: Gaurav Minocha @ 2015-01-11 7:19 UTC (permalink / raw) To: devicetree-u79uwXL29TY76Z2rM5mHXA Cc: grant.likely-QSEj5FYQhm4dnm+yROfE0A, rob.herring-QSEj5FYQhm4dnm+yROfE0A, Gaurav Minocha This patch intends to remove the unittests dependency on the functions defined in dynamic.c. So, rather than calling of_attach_node defined in dynamic.c, minimal functionality required to attach a new node is re-defined in unittest.c. Also, now after executing the tests the test data is not removed from the device tree so there is no need to call of_detach_node. Tested with and without OF_DYNAMIC enabled on ppc, arm and x86 Signed-off-by: Gaurav Minocha <gaurav.minocha.os-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> --- drivers/of/Kconfig | 1 - drivers/of/unittest.c | 70 +++++++++------------------------------------------ 2 files changed, 12 insertions(+), 59 deletions(-) diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig index b5e0c87..38d1c51 100644 --- a/drivers/of/Kconfig +++ b/drivers/of/Kconfig @@ -10,7 +10,6 @@ menu "Device Tree and Open Firmware support" config OF_UNITTEST bool "Device Tree runtime unit tests" depends on OF_IRQ && OF_EARLY_FLATTREE - select OF_DYNAMIC select OF_RESOLVE help This option builds in test cases for the device tree infrastructure diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c index 844838e..139363a 100644 --- a/drivers/of/unittest.c +++ b/drivers/of/unittest.c @@ -822,6 +822,7 @@ static void update_node_properties(struct device_node *np, static int attach_node_and_children(struct device_node *np) { struct device_node *next, *dup, *child; + unsigned long flags; dup = of_find_node_by_path(np->full_name); if (dup) { @@ -838,8 +839,17 @@ static int attach_node_and_children(struct device_node *np) child = np->child; np->child = NULL; - np->sibling = NULL; - of_attach_node(np); + + mutex_lock(&of_mutex); + raw_spin_lock_irqsave(&devtree_lock, flags); + np->sibling = np->parent->child; + np->parent->child = np; + of_node_clear_flag(np, OF_DETACHED); + raw_spin_unlock_irqrestore(&devtree_lock, flags); + + __of_attach_node_sysfs(np); + mutex_unlock(&of_mutex); + while (child) { next = child->sibling; attach_node_and_children(child); @@ -911,59 +921,6 @@ static int __init selftest_data_add(void) return 0; } -/** - * detach_node_and_children - detaches node - * and its children from live tree - * - * @np: Node to detach from live tree - */ -static void detach_node_and_children(struct device_node *np) -{ - while (np->child) - detach_node_and_children(np->child); - of_detach_node(np); -} - -/** - * selftest_data_remove - removes the selftest data - * nodes from the live tree - */ -static void selftest_data_remove(void) -{ - struct device_node *np; - struct property *prop; - - if (selftest_live_tree) { - of_node_put(of_aliases); - of_node_put(of_chosen); - of_aliases = NULL; - of_chosen = NULL; - for_each_child_of_node(of_root, np) - detach_node_and_children(np); - __of_detach_node_sysfs(of_root); - of_root = NULL; - return; - } - - while (last_node_index-- > 0) { - if (nodes[last_node_index]) { - np = of_find_node_by_path(nodes[last_node_index]->full_name); - if (np == nodes[last_node_index]) { - if (of_aliases == np) { - of_node_put(of_aliases); - of_aliases = NULL; - } - detach_node_and_children(np); - } else { - for_each_property_of_node(np, prop) { - if (strcmp(prop->name, "testcase-alias") == 0) - of_remove_property(np, prop); - } - } - } - } -} - #ifdef CONFIG_OF_OVERLAY static int selftest_probe(struct platform_device *pdev) @@ -1475,9 +1432,6 @@ static int __init of_selftest(void) of_selftest_platform_populate(); of_selftest_overlay(); - /* removing selftest data from live tree */ - selftest_data_remove(); - /* Double check linkage after removing testcase data */ of_selftest_check_tree_linkage(); -- 2.1.0 -- 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 ^ permalink raw reply related [flat|nested] 5+ messages in thread
[parent not found: <1420960791-26761-1-git-send-email-gaurav.minocha.os-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH v2] Removes OF_UNITTEST dependency on OF_DYNAMIC config symbol [not found] ` <1420960791-26761-1-git-send-email-gaurav.minocha.os-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2015-01-13 20:06 ` Rob Herring 2015-01-22 16:56 ` Grant Likely 2015-01-23 13:03 ` Geert Uytterhoeven 2 siblings, 0 replies; 5+ messages in thread From: Rob Herring @ 2015-01-13 20:06 UTC (permalink / raw) To: Gaurav Minocha Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Grant Likely, Rob Herring On Sun, Jan 11, 2015 at 1:19 AM, Gaurav Minocha <gaurav.minocha.os-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > This patch intends to remove the unittests dependency on > the functions defined in dynamic.c. So, rather than calling > of_attach_node defined in dynamic.c, minimal functionality > required to attach a new node is re-defined in unittest.c. > Also, now after executing the tests the test data is not > removed from the device tree so there is no need to call > of_detach_node. > > Tested with and without OF_DYNAMIC enabled on ppc, arm and > x86 > > Signed-off-by: Gaurav Minocha <gaurav.minocha.os-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Applied for 3.20. Thanks. > --- > drivers/of/Kconfig | 1 - > drivers/of/unittest.c | 70 +++++++++------------------------------------------ > 2 files changed, 12 insertions(+), 59 deletions(-) > > diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig > index b5e0c87..38d1c51 100644 > --- a/drivers/of/Kconfig > +++ b/drivers/of/Kconfig > @@ -10,7 +10,6 @@ menu "Device Tree and Open Firmware support" > config OF_UNITTEST > bool "Device Tree runtime unit tests" > depends on OF_IRQ && OF_EARLY_FLATTREE > - select OF_DYNAMIC > select OF_RESOLVE > help > This option builds in test cases for the device tree infrastructure > diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c > index 844838e..139363a 100644 > --- a/drivers/of/unittest.c > +++ b/drivers/of/unittest.c > @@ -822,6 +822,7 @@ static void update_node_properties(struct device_node *np, > static int attach_node_and_children(struct device_node *np) > { > struct device_node *next, *dup, *child; > + unsigned long flags; > > dup = of_find_node_by_path(np->full_name); > if (dup) { > @@ -838,8 +839,17 @@ static int attach_node_and_children(struct device_node *np) > > child = np->child; > np->child = NULL; > - np->sibling = NULL; > - of_attach_node(np); > + > + mutex_lock(&of_mutex); > + raw_spin_lock_irqsave(&devtree_lock, flags); > + np->sibling = np->parent->child; > + np->parent->child = np; > + of_node_clear_flag(np, OF_DETACHED); > + raw_spin_unlock_irqrestore(&devtree_lock, flags); > + > + __of_attach_node_sysfs(np); > + mutex_unlock(&of_mutex); > + > while (child) { > next = child->sibling; > attach_node_and_children(child); > @@ -911,59 +921,6 @@ static int __init selftest_data_add(void) > return 0; > } > > -/** > - * detach_node_and_children - detaches node > - * and its children from live tree > - * > - * @np: Node to detach from live tree > - */ > -static void detach_node_and_children(struct device_node *np) > -{ > - while (np->child) > - detach_node_and_children(np->child); > - of_detach_node(np); > -} > - > -/** > - * selftest_data_remove - removes the selftest data > - * nodes from the live tree > - */ > -static void selftest_data_remove(void) > -{ > - struct device_node *np; > - struct property *prop; > - > - if (selftest_live_tree) { > - of_node_put(of_aliases); > - of_node_put(of_chosen); > - of_aliases = NULL; > - of_chosen = NULL; > - for_each_child_of_node(of_root, np) > - detach_node_and_children(np); > - __of_detach_node_sysfs(of_root); > - of_root = NULL; > - return; > - } > - > - while (last_node_index-- > 0) { > - if (nodes[last_node_index]) { > - np = of_find_node_by_path(nodes[last_node_index]->full_name); > - if (np == nodes[last_node_index]) { > - if (of_aliases == np) { > - of_node_put(of_aliases); > - of_aliases = NULL; > - } > - detach_node_and_children(np); > - } else { > - for_each_property_of_node(np, prop) { > - if (strcmp(prop->name, "testcase-alias") == 0) > - of_remove_property(np, prop); > - } > - } > - } > - } > -} > - > #ifdef CONFIG_OF_OVERLAY > > static int selftest_probe(struct platform_device *pdev) > @@ -1475,9 +1432,6 @@ static int __init of_selftest(void) > of_selftest_platform_populate(); > of_selftest_overlay(); > > - /* removing selftest data from live tree */ > - selftest_data_remove(); > - > /* Double check linkage after removing testcase data */ > of_selftest_check_tree_linkage(); > > -- > 2.1.0 > > -- > 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 -- 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 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] Removes OF_UNITTEST dependency on OF_DYNAMIC config symbol [not found] ` <1420960791-26761-1-git-send-email-gaurav.minocha.os-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2015-01-13 20:06 ` Rob Herring @ 2015-01-22 16:56 ` Grant Likely [not found] ` <20150122165601.E4BA6C40A80-WNowdnHR2B42iJbIjFUEsiwD8/FfD2ys@public.gmane.org> 2015-01-23 13:03 ` Geert Uytterhoeven 2 siblings, 1 reply; 5+ messages in thread From: Grant Likely @ 2015-01-22 16:56 UTC (permalink / raw) To: devicetree-u79uwXL29TY76Z2rM5mHXA Cc: rob.herring-QSEj5FYQhm4dnm+yROfE0A, Gaurav Minocha On Sat, 10 Jan 2015 23:19:51 -0800 , Gaurav Minocha <gaurav.minocha.os-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > This patch intends to remove the unittests dependency on > the functions defined in dynamic.c. So, rather than calling > of_attach_node defined in dynamic.c, minimal functionality > required to attach a new node is re-defined in unittest.c. > Also, now after executing the tests the test data is not > removed from the device tree so there is no need to call > of_detach_node. > > Tested with and without OF_DYNAMIC enabled on ppc, arm and > x86 > > Signed-off-by: Gaurav Minocha <gaurav.minocha.os-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Looks good, but it leaves in some stale node removal code. I've fixed it up and applied for v3.19. Here is my fixup: --- diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c index 139363af5c88..28beed1b3c2c 100644 --- a/drivers/of/unittest.c +++ b/drivers/of/unittest.c @@ -27,11 +27,6 @@ static struct selftest_results { int failed; } selftest_results; -#define NO_OF_NODES 3 -static struct device_node *nodes[NO_OF_NODES]; -static int last_node_index; -static bool selftest_live_tree; - #define selftest(result, fmt, ...) ({ \ bool failed = !(result); \ if (failed) { \ @@ -830,13 +825,6 @@ static int attach_node_and_children(struct device_node *np) return 0; } - /* Children of the root need to be remembered for removal */ - if (np->parent == of_root) { - if (WARN_ON(last_node_index >= NO_OF_NODES)) - return -EINVAL; - nodes[last_node_index++] = np; - } - child = np->child; np->child = NULL; @@ -899,8 +887,6 @@ static int __init selftest_data_add(void) } if (!of_root) { - /* enabling flag for removing nodes */ - selftest_live_tree = true; of_root = selftest_data_node; for_each_of_allnodes(np) -- 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 ^ permalink raw reply related [flat|nested] 5+ messages in thread
[parent not found: <20150122165601.E4BA6C40A80-WNowdnHR2B42iJbIjFUEsiwD8/FfD2ys@public.gmane.org>]
* Re: [PATCH v2] Removes OF_UNITTEST dependency on OF_DYNAMIC config symbol [not found] ` <20150122165601.E4BA6C40A80-WNowdnHR2B42iJbIjFUEsiwD8/FfD2ys@public.gmane.org> @ 2015-01-22 16:59 ` Grant Likely 0 siblings, 0 replies; 5+ messages in thread From: Grant Likely @ 2015-01-22 16:59 UTC (permalink / raw) To: Gaurav Minocha, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: Rob Herring On Thu, Jan 22, 2015 at 4:56 PM, Grant Likely <grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> wrote: > On Sat, 10 Jan 2015 23:19:51 -0800 > , Gaurav Minocha <gaurav.minocha.os-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > wrote: >> This patch intends to remove the unittests dependency on >> the functions defined in dynamic.c. So, rather than calling >> of_attach_node defined in dynamic.c, minimal functionality >> required to attach a new node is re-defined in unittest.c. >> Also, now after executing the tests the test data is not >> removed from the device tree so there is no need to call >> of_detach_node. >> >> Tested with and without OF_DYNAMIC enabled on ppc, arm and >> x86 >> >> Signed-off-by: Gaurav Minocha <gaurav.minocha.os-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > > Looks good, but it leaves in some stale node removal code. I've fixed it > up and applied for v3.19. Here is my fixup: On reflection, picking this up for v3.19 is a bad decision because it is not a regression fix. I'll submit a separate fixup patch to remove the stale code. g. > > --- > > diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c > index 139363af5c88..28beed1b3c2c 100644 > --- a/drivers/of/unittest.c > +++ b/drivers/of/unittest.c > @@ -27,11 +27,6 @@ static struct selftest_results { > int failed; > } selftest_results; > > -#define NO_OF_NODES 3 > -static struct device_node *nodes[NO_OF_NODES]; > -static int last_node_index; > -static bool selftest_live_tree; > - > #define selftest(result, fmt, ...) ({ \ > bool failed = !(result); \ > if (failed) { \ > @@ -830,13 +825,6 @@ static int attach_node_and_children(struct device_node *np) > return 0; > } > > - /* Children of the root need to be remembered for removal */ > - if (np->parent == of_root) { > - if (WARN_ON(last_node_index >= NO_OF_NODES)) > - return -EINVAL; > - nodes[last_node_index++] = np; > - } > - > child = np->child; > np->child = NULL; > > @@ -899,8 +887,6 @@ static int __init selftest_data_add(void) > } > > if (!of_root) { > - /* enabling flag for removing nodes */ > - selftest_live_tree = true; > of_root = selftest_data_node; > > for_each_of_allnodes(np) > -- 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 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] Removes OF_UNITTEST dependency on OF_DYNAMIC config symbol [not found] ` <1420960791-26761-1-git-send-email-gaurav.minocha.os-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2015-01-13 20:06 ` Rob Herring 2015-01-22 16:56 ` Grant Likely @ 2015-01-23 13:03 ` Geert Uytterhoeven 2 siblings, 0 replies; 5+ messages in thread From: Geert Uytterhoeven @ 2015-01-23 13:03 UTC (permalink / raw) To: Gaurav Minocha Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Grant Likely, Rob Herring On Sun, Jan 11, 2015 at 8:19 AM, Gaurav Minocha <gaurav.minocha.os-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > This patch intends to remove the unittests dependency on > the functions defined in dynamic.c. So, rather than calling > of_attach_node defined in dynamic.c, minimal functionality > required to attach a new node is re-defined in unittest.c. > Also, now after executing the tests the test data is not > removed from the device tree so there is no need to call > of_detach_node. Could there be unwanted side effects of not removing the test data? > --- a/drivers/of/unittest.c > +++ b/drivers/of/unittest.c > @@ -1475,9 +1432,6 @@ static int __init of_selftest(void) > of_selftest_platform_populate(); > of_selftest_overlay(); > > - /* removing selftest data from live tree */ > - selftest_data_remove(); > - > /* Double check linkage after removing testcase data */ You forgot to remove the comment above. > of_selftest_check_tree_linkage(); Is this test still relevant now the testcase data has been removed? Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert-Td1EMuHUCqxL1ZNQvxDV9g@public.gmane.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds -- 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 ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-01-23 13:03 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-01-11 7:19 [PATCH v2] Removes OF_UNITTEST dependency on OF_DYNAMIC config symbol Gaurav Minocha [not found] ` <1420960791-26761-1-git-send-email-gaurav.minocha.os-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2015-01-13 20:06 ` Rob Herring 2015-01-22 16:56 ` Grant Likely [not found] ` <20150122165601.E4BA6C40A80-WNowdnHR2B42iJbIjFUEsiwD8/FfD2ys@public.gmane.org> 2015-01-22 16:59 ` Grant Likely 2015-01-23 13:03 ` Geert Uytterhoeven
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).