From: Heikki Krogerus Date: Fri, 31 May 2019 14:15:33 +0000 (+0300) Subject: software node: Simplify software_node_release() function X-Git-Tag: v5.15~6016^2~15 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3df85a1ae51f6b256982fe9d17c2dc5bfb4cc402;p=platform%2Fkernel%2Flinux-starfive.git software node: Simplify software_node_release() function It's possible to release the node ID immediately when fwnode_remove_software_node() is called, no need to wait for software_node_release() with that. Signed-off-by: Heikki Krogerus Tested-by: Hans de Goede Signed-off-by: Rafael J. Wysocki --- diff --git a/drivers/base/swnode.c b/drivers/base/swnode.c index 3007745..7b321bf 100644 --- a/drivers/base/swnode.c +++ b/drivers/base/swnode.c @@ -557,13 +557,6 @@ static void software_node_release(struct kobject *kobj) { struct software_node *swnode = kobj_to_swnode(kobj); - if (swnode->parent) { - ida_simple_remove(&swnode->parent->child_ids, swnode->id); - list_del(&swnode->entry); - } else { - ida_simple_remove(&swnode_root_ids, swnode->id); - } - ida_destroy(&swnode->child_ids); property_entries_free(swnode->properties); kfree(swnode); @@ -610,9 +603,6 @@ fwnode_create_software_node(const struct property_entry *properties, INIT_LIST_HEAD(&swnode->children); swnode->parent = p; - if (p) - list_add_tail(&swnode->entry, &p->children); - ret = kobject_init_and_add(&swnode->kobj, &software_node_type, p ? &p->kobj : NULL, "node%d", swnode->id); if (ret) { @@ -626,6 +616,9 @@ fwnode_create_software_node(const struct property_entry *properties, return ERR_PTR(ret); } + if (p) + list_add_tail(&swnode->entry, &p->children); + kobject_uevent(&swnode->kobj, KOBJ_ADD); return &swnode->fwnode; } @@ -638,6 +631,13 @@ void fwnode_remove_software_node(struct fwnode_handle *fwnode) if (!swnode) return; + if (swnode->parent) { + ida_simple_remove(&swnode->parent->child_ids, swnode->id); + list_del(&swnode->entry); + } else { + ida_simple_remove(&swnode_root_ids, swnode->id); + } + kobject_put(&swnode->kobj); } EXPORT_SYMBOL_GPL(fwnode_remove_software_node);