diff options
author | Rob Herring <robh@kernel.org> | 2024-04-09 13:59:39 -0500 |
---|---|---|
committer | Rob Herring <robh@kernel.org> | 2024-04-15 08:40:40 -0500 |
commit | 1c5e3d9bf33b811e1c6dd9081b322004acc4a1fd (patch) | |
tree | e3de2e82c97a3114bbfc3d2e32659215f52c2c4f /drivers/of/dynamic.c | |
parent | 15f3df361720de343d125ca01b7b456b8d16327f (diff) |
of: Add a helper to free property struct
Freeing a property struct is 3 kfree()'s which is duplicated in multiple
spots. Add a helper, __of_prop_free(), and replace all the open coded
cases in the DT code.
Reviewed-by: Saravana Kannan <saravanak@google.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Link: https://lore.kernel.org/r/20240409-dt-cleanup-free-v2-1-5b419a4af38d@kernel.org
Signed-off-by: Rob Herring <robh@kernel.org>
Diffstat (limited to 'drivers/of/dynamic.c')
-rw-r--r-- | drivers/of/dynamic.c | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/drivers/of/dynamic.c b/drivers/of/dynamic.c index 3bf27052832f..af7c57a7a25d 100644 --- a/drivers/of/dynamic.c +++ b/drivers/of/dynamic.c @@ -305,15 +305,20 @@ int of_detach_node(struct device_node *np) } EXPORT_SYMBOL_GPL(of_detach_node); +void __of_prop_free(struct property *prop) +{ + kfree(prop->name); + kfree(prop->value); + kfree(prop); +} + static void property_list_free(struct property *prop_list) { struct property *prop, *next; for (prop = prop_list; prop != NULL; prop = next) { next = prop->next; - kfree(prop->name); - kfree(prop->value); - kfree(prop); + __of_prop_free(prop); } } @@ -426,9 +431,7 @@ struct property *__of_prop_dup(const struct property *prop, gfp_t allocflags) return new; err_free: - kfree(new->name); - kfree(new->value); - kfree(new); + __of_prop_free(new); return NULL; } @@ -470,9 +473,7 @@ struct device_node *__of_node_dup(const struct device_node *np, if (!new_pp) goto err_prop; if (__of_add_property(node, new_pp)) { - kfree(new_pp->name); - kfree(new_pp->value); - kfree(new_pp); + __of_prop_free(new_pp); goto err_prop; } } @@ -921,11 +922,8 @@ static int of_changeset_add_prop_helper(struct of_changeset *ocs, return -ENOMEM; ret = of_changeset_add_property(ocs, np, new_pp); - if (ret) { - kfree(new_pp->name); - kfree(new_pp->value); - kfree(new_pp); - } + if (ret) + __of_prop_free(new_pp); return ret; } |