lkml.org 
[lkml]   [2019]   [Nov]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.19 223/237] of: unittest: allow base devicetree to have symbol metadata
    Date
    From: Frank Rowand <frank.rowand@sony.com>

    [ Upstream commit 5babefb7f7ab1f23861336d511cc666fa45ede82 ]

    The overlay metadata nodes in the FDT created from testcases.dts
    are not handled properly.

    The __fixups__ and __local_fixups__ node were added to the live
    devicetree, but should not be.

    Only the first property in the /__symbols__ node was added to the
    live devicetree if the live devicetree already contained a
    /__symbols node. All of the node's properties must be added.

    Tested-by: Alan Tull <atull@kernel.org>
    Signed-off-by: Frank Rowand <frank.rowand@sony.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/of/unittest.c | 43 +++++++++++++++++++++++++++++++++++--------
    1 file changed, 35 insertions(+), 8 deletions(-)

    diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c
    index bac4b4bbc33de..e8997cdb228cb 100644
    --- a/drivers/of/unittest.c
    +++ b/drivers/of/unittest.c
    @@ -1067,20 +1067,44 @@ static void __init of_unittest_platform_populate(void)
    * of np into dup node (present in live tree) and
    * updates parent of children of np to dup.
    *
    - * @np: node already present in live tree
    + * @np: node whose properties are being added to the live tree
    * @dup: node present in live tree to be updated
    */
    static void update_node_properties(struct device_node *np,
    struct device_node *dup)
    {
    struct property *prop;
    + struct property *save_next;
    struct device_node *child;
    -
    - for_each_property_of_node(np, prop)
    - of_add_property(dup, prop);
    + int ret;

    for_each_child_of_node(np, child)
    child->parent = dup;
    +
    + /*
    + * "unittest internal error: unable to add testdata property"
    + *
    + * If this message reports a property in node '/__symbols__' then
    + * the respective unittest overlay contains a label that has the
    + * same name as a label in the live devicetree. The label will
    + * be in the live devicetree only if the devicetree source was
    + * compiled with the '-@' option. If you encounter this error,
    + * please consider renaming __all__ of the labels in the unittest
    + * overlay dts files with an odd prefix that is unlikely to be
    + * used in a real devicetree.
    + */
    +
    + /*
    + * open code for_each_property_of_node() because of_add_property()
    + * sets prop->next to NULL
    + */
    + for (prop = np->properties; prop != NULL; prop = save_next) {
    + save_next = prop->next;
    + ret = of_add_property(dup, prop);
    + if (ret)
    + pr_err("unittest internal error: unable to add testdata property %pOF/%s",
    + np, prop->name);
    + }
    }

    /**
    @@ -1089,18 +1113,23 @@ static void update_node_properties(struct device_node *np,
    *
    * @np: Node to attach to live tree
    */
    -static int attach_node_and_children(struct device_node *np)
    +static void attach_node_and_children(struct device_node *np)
    {
    struct device_node *next, *dup, *child;
    unsigned long flags;
    const char *full_name;

    full_name = kasprintf(GFP_KERNEL, "%pOF", np);
    +
    + if (!strcmp(full_name, "/__local_fixups__") ||
    + !strcmp(full_name, "/__fixups__"))
    + return;
    +
    dup = of_find_node_by_path(full_name);
    kfree(full_name);
    if (dup) {
    update_node_properties(np, dup);
    - return 0;
    + return;
    }

    child = np->child;
    @@ -1121,8 +1150,6 @@ static int attach_node_and_children(struct device_node *np)
    attach_node_and_children(child);
    child = next;
    }
    -
    - return 0;
    }

    /**
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-11-16 17:19    [W:4.124 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site