of: overlay: loosen overly strict phandle clash check
authorFrank Rowand <frank.rowand@sony.com>
Tue, 17 Oct 2017 23:36:28 +0000 (16:36 -0700)
committerRob Herring <robh@kernel.org>
Wed, 18 Oct 2017 01:47:22 +0000 (20:47 -0500)
When an overlay contains a node that already exists in
the live device tree, the overlay node is not allowed
to change the phandle of the existing node.

The existing check refused to allow an overlay node to
set the node phandle even when the existing node did
not have a phandle.  Relax the check to allow an
overlay node to set the phandle value if the existing
node does not have a phandle.

Signed-off-by: Frank Rowand <frank.rowand@sony.com>
Signed-off-by: Rob Herring <robh@kernel.org>
drivers/of/overlay.c

index 4cdee169a5ab634a515094e2965291cfc7443d64..791753321ed2d764f854c62c1bb8a5e0424f8b2e 100644 (file)
@@ -311,10 +311,10 @@ static int add_changeset_node(struct overlay_changeset *ovcs,
                return build_changeset_next_level(ovcs, tchild, node, 0);
        }
 
-       if (node->phandle)
-               return -EINVAL;
-
-       ret = build_changeset_next_level(ovcs, tchild, node, 0);
+       if (node->phandle && tchild->phandle)
+               ret = -EINVAL;
+       else
+               ret = build_changeset_next_level(ovcs, tchild, node, 0);
        of_node_put(tchild);
 
        return ret;