Skip to content

Commit

Permalink
Removes OF_UNITTEST dependency on OF_DYNAMIC config symbol
Browse files Browse the repository at this point in the history
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@gmail.com>
Signed-off-by: Rob Herring <robh@kernel.org>
  • Loading branch information
Gaurav Minocha authored and Rob Herring committed Jan 13, 2015
1 parent 9a4305b commit 3ce04b4
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 59 deletions.
1 change: 0 additions & 1 deletion drivers/of/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
70 changes: 12 additions & 58 deletions drivers/of/unittest.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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);
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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();

Expand Down

0 comments on commit 3ce04b4

Please sign in to comment.