]> www.infradead.org Git - users/willy/linux.git/commitdiff
of: resolver: Simplify of_resolve_phandles() using __free()
authorRob Herring (Arm) <robh@kernel.org>
Sun, 9 Feb 2025 12:59:02 +0000 (20:59 +0800)
committerRob Herring (Arm) <robh@kernel.org>
Tue, 25 Feb 2025 13:18:30 +0000 (07:18 -0600)
Use the __free() cleanup to simplify of_resolve_phandles() and remove
all the goto's.

Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
drivers/of/resolver.c

index 779db058c42f5b8198ee3417dfaab80c81b43e4c..c871e35d4921760b73d2c94d56f953ff5e748285 100644 (file)
@@ -250,24 +250,20 @@ static int adjust_local_phandle_references(const struct device_node *local_fixup
 int of_resolve_phandles(struct device_node *overlay)
 {
        struct device_node *child, *local_fixups, *refnode;
-       struct device_node *tree_symbols, *overlay_fixups;
+       struct device_node *overlay_fixups;
        struct property *prop;
        const char *refpath;
        phandle phandle, phandle_delta;
        int err;
 
-       tree_symbols = NULL;
-
        if (!overlay) {
                pr_err("null overlay\n");
-               err = -EINVAL;
-               goto out;
+               return -EINVAL;
        }
 
        if (!of_node_check_flag(overlay, OF_DETACHED)) {
                pr_err("overlay not detached\n");
-               err = -EINVAL;
-               goto out;
+               return -EINVAL;
        }
 
        phandle_delta = live_tree_max_phandle() + 1;
@@ -279,7 +275,7 @@ int of_resolve_phandles(struct device_node *overlay)
 
        err = adjust_local_phandle_references(local_fixups, overlay, phandle_delta);
        if (err)
-               goto out;
+               return err;
 
        overlay_fixups = NULL;
 
@@ -288,16 +284,13 @@ int of_resolve_phandles(struct device_node *overlay)
                        overlay_fixups = child;
        }
 
-       if (!overlay_fixups) {
-               err = 0;
-               goto out;
-       }
+       if (!overlay_fixups)
+               return 0;
 
-       tree_symbols = of_find_node_by_path("/__symbols__");
+       struct device_node __free(device_node) *tree_symbols = of_find_node_by_path("/__symbols__");
        if (!tree_symbols) {
                pr_err("no symbols in root of device tree.\n");
-               err = -EINVAL;
-               goto out;
+               return -EINVAL;
        }
 
        for_each_property_of_node(overlay_fixups, prop) {
@@ -311,14 +304,12 @@ int of_resolve_phandles(struct device_node *overlay)
                if (err) {
                        pr_err("node label '%s' not found in live devicetree symbols table\n",
                               prop->name);
-                       goto out;
+                       return err;
                }
 
                refnode = of_find_node_by_path(refpath);
-               if (!refnode) {
-                       err = -ENOENT;
-                       goto out;
-               }
+               if (!refnode)
+                       return -ENOENT;
 
                phandle = refnode->phandle;
                of_node_put(refnode);
@@ -328,11 +319,8 @@ int of_resolve_phandles(struct device_node *overlay)
                        break;
        }
 
-out:
        if (err)
                pr_err("overlay phandle fixup failed: %d\n", err);
-       of_node_put(tree_symbols);
-
        return err;
 }
 EXPORT_SYMBOL_GPL(of_resolve_phandles);